这个是把电压值直接在数码管上显示出来的(从网上搜出类的)
可是我想通过单片机串口通信,将数值发送给上位机PC,不要显示
的,应该怎么修改下面的程序呢?
要删除数码管显示的部分,并加上串口通信的部分.请高手指点
另外,我的AD转换器老板给的是AD7731
谢谢
#include <AT89X51.H>
#define uchar unsigned char;
uchar code scan_con[]={0x03,0x02,0x01,0x00}; //定义列扫描
uchar dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//定义0~9的显示段码
uchar dispbuf[8]={0,0,0,0,0,0,0,0}; //定义8个存储空间
uchar dispcount=0;
uchar getdata;
unsigned int temp;//定义暂存空间
uchar i,j,k,l,m;
sbit s3=P2^7; //位定义,控制模拟开关
sbit s2=P2^6;
sbit s1=P2^5;
sbit dp=P1^7; //定义小数点
#define v20_on {s3=1;s2=0;s1=0;} //宏定义不同量程,不同的开关状态
#define v2_on {s3=0;s2=1;s1=0;}
#define v02_on {s3=0;s2=0;s1=1;}
sbit ST=P2^0; //定义单片机和ADC的控制信号
sbit OE=P2^1;
sbit EOC=P2^2;
main()
{
while(1)
{
_20v: //2~20V量程
v20_on;
ST=0; //启动A/D转换
ST=1;
ST=0;
while(EOC==0);
OE=0;
getdata=P0;
OE=1;
if(getdata<21) //量程不合适,切换
{
goto _2v;
}
l=3;
temp=getdata; //量程合适,数据处理
temp=temp*100;
temp=(temp/51)*5;
goto disp; //跳到数码管显示程序段
_2v: //200MV~2V量程
v2_on;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=0;
getdata=P0;
OE=1;
if(getdata<21)
{
goto _02v;
}
else if(getdata>204)
{
goto _20v;
}
l=2;
temp=getdata;
temp=(temp*100/51)*10;
temp=temp/2;
goto disp;
_02v: //0~200MV量程
v02_on;
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=0;
getdata=P0;
OE=1;
if(getdata>204)
{
goto _2v;
}
l=1;
temp=getdata;
temp=(temp*100/51)*100;
temp=temp/20;
disp:
dispbuf[0]=0;
dispbuf[1]=0;
dispbuf[2]=0;
dispbuf[3]=0;
dispbuf[4]=0;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
i=0;
while(temp/10) //电压值的每个位计算
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
for(k=0;k<=3;k++) //数码管显示
{
P1=dispcode[dispbuf[k]];
P3=scan_con[k];
if(l==3){if(k==2) { P1=P1 | 0x80; }} //小数点的确定
else if(l==2) {if(k==3) { P1=P1 | 0x80; }}
else if(l==1){if(k==1) { P1=P1 | 0x80; }}
for(m=0;m<=2;m++) //延时
for(j=0;j<=100;j++);
}
}
}
6 个解决方案
#1
没注意,分数写错了,如何追加或者修改/.?谢谢
#2
就把数码管显示那段改成发送到串口
#3
把你的得到的AD,转换成ASCII 然后写到串口发送缓冲区中,就OK了,前边在加上串口初始化,这些在网上很多代码的
#4
谢谢,
刚入门还是比较迷惑.
刚入门还是比较迷惑.
#5
找点别人的代码做瞧瞧就OK了,刚开始是比较迷惑的
#6
"可是我想通过单片机串口通信,将数值发送给上位机PC,不要显示"
发送给PC,还不去显示。楼主的目的是什么呢。
还是比较容易实现的。
下位机程序需要加上串口方面的代码
PC机部分,你是要怎么接收,不会是用串口调试助手吧。
PC部分需要自己写一下代码。用VC,VB都可以。操作串口收发就可以了。
还是比较简单的。
我也写过这方面的代码。将AD的采样值发送给WINCE,然后根据不同的AD采样值
绘制一个简单的动态曲线。
我这里是WINCE下,和你PC的WINDOWS下是一个道理的。
总之,楼主动手写吧。到具体细节不会的,再一起交流。
————————————————————————————————————————————————
现阶段连菜鸟都算不上,我就是来顶贴学习的!
发送给PC,还不去显示。楼主的目的是什么呢。
还是比较容易实现的。
下位机程序需要加上串口方面的代码
PC机部分,你是要怎么接收,不会是用串口调试助手吧。
PC部分需要自己写一下代码。用VC,VB都可以。操作串口收发就可以了。
还是比较简单的。
我也写过这方面的代码。将AD的采样值发送给WINCE,然后根据不同的AD采样值
绘制一个简单的动态曲线。
我这里是WINCE下,和你PC的WINDOWS下是一个道理的。
总之,楼主动手写吧。到具体细节不会的,再一起交流。
————————————————————————————————————————————————
现阶段连菜鸟都算不上,我就是来顶贴学习的!
#1
没注意,分数写错了,如何追加或者修改/.?谢谢
#2
就把数码管显示那段改成发送到串口
#3
把你的得到的AD,转换成ASCII 然后写到串口发送缓冲区中,就OK了,前边在加上串口初始化,这些在网上很多代码的
#4
谢谢,
刚入门还是比较迷惑.
刚入门还是比较迷惑.
#5
找点别人的代码做瞧瞧就OK了,刚开始是比较迷惑的
#6
"可是我想通过单片机串口通信,将数值发送给上位机PC,不要显示"
发送给PC,还不去显示。楼主的目的是什么呢。
还是比较容易实现的。
下位机程序需要加上串口方面的代码
PC机部分,你是要怎么接收,不会是用串口调试助手吧。
PC部分需要自己写一下代码。用VC,VB都可以。操作串口收发就可以了。
还是比较简单的。
我也写过这方面的代码。将AD的采样值发送给WINCE,然后根据不同的AD采样值
绘制一个简单的动态曲线。
我这里是WINCE下,和你PC的WINDOWS下是一个道理的。
总之,楼主动手写吧。到具体细节不会的,再一起交流。
————————————————————————————————————————————————
现阶段连菜鸟都算不上,我就是来顶贴学习的!
发送给PC,还不去显示。楼主的目的是什么呢。
还是比较容易实现的。
下位机程序需要加上串口方面的代码
PC机部分,你是要怎么接收,不会是用串口调试助手吧。
PC部分需要自己写一下代码。用VC,VB都可以。操作串口收发就可以了。
还是比较简单的。
我也写过这方面的代码。将AD的采样值发送给WINCE,然后根据不同的AD采样值
绘制一个简单的动态曲线。
我这里是WINCE下,和你PC的WINDOWS下是一个道理的。
总之,楼主动手写吧。到具体细节不会的,再一起交流。
————————————————————————————————————————————————
现阶段连菜鸟都算不上,我就是来顶贴学习的!