ADC0804转换程序ADC0804转换程序
#include
unsigned char code seg7code[10]={ox3f,0x06,0x5b,x04f,0x66,0x6d,0x7d,0x07,0x6f};
//显示段码
sbit int1=P3^3; //定义管脚功能
sbit cs=P3^2; //使能端
sbit wr=P3^6; //写端口
sbit rd=P3^7; //读端口
void delay (unsigned int tc) //显示延时程序 {
while(tc !=0)
{
...
ADC0804转换程序
#include
unsigned char code seg7code[10]={ox3f,0x06,0x5b,x04f,0x66,0x6d,0x7d,0x07,0x6f};
//显示段码
sbit int1=P3^3; //定义管脚功能
sbit cs=P3^2; //使能端
sbit wr=P3^6; //写端口
sbit rd=P3^7; //读端口
void delay (unsigned int tc) //显示延时程序 {
while(tc !=0)
{
unsigned int i;
for(i=0;i<100;i++);
tc--;
}
}
unsigned char adc0804(void) //读AD0804子程序 {
unsigned char addata,i;
rd=1;
wr=1;
int1=1;//读ADC0804前准备
cs=0;
wr=0;
wr=1;//启动ADC0804开始测电压
while(int1=1);//查询等待A/D转换完毕产生的INT(低电平有效)信号
rd=0;//开始转换后数据
i=1;i=i;//无意义语句,用于延时等待ADC90804读数完毕
addata=P1;//读出的数据赋给addata
rd=1;
cs=1;//读数完毕
return(addata);//返回最后读出的数据 }
unsigned int datpro(void)//adc0804读出的数据处理 {
unsigned char x;
unsigned int dianyah,dianyal;//用于存储读出数据的高字节和低字节
unsigned int dianya=0;//存储最后处理完的结果,注意数据类型
for(x=0;x<10,x++)
{
dianya=adc0804()+dianya;
}
dianya=dianya/10;//求平均值
dianyah=dianya&0xf0;//屏蔽低四位
dianyah=dianyah>>4;//右移四位,取出高四位
dianyal=dianya&0x0f;//屏蔽低高四位,取出低四位】
dianya=dianya*20+dianyah*320;//最后的结果是一个四位,便于显示
return(dianya);//返回最后处理结果
}
void Led()
{
unsigned int date;
date=datpro();//调用数据处理最后结果
P2=P2&0xef;
P0=seg7code[date/100]|0x80;//输出个位数和小数点
delay(8);
P2=P2|0xf0;P2=P2&0xdf;
P0=seg7code[date%1000/100];//输出小数点后第一位
delay(8);
P2=P2|0xf0;P2=P2&0xdf;
P0=seg7code[date%100/10];//输出小数点后第二位
delay(8);
P2=P2|0xf0;P2=P2&0xdf;
P0=seg7code[date%10];//输出小数点后第三位
delay(8);
P2=P2|0xf0;
}
void mian()
{
while(1)
{
Led();//只需调用显示函数
}
}
//名称:单片机控制ADC0804模数转换实现电压测量(0--5v)
//芯片:AT89C52
//晶振:12M
#include
#include(intrins.h) #define uchar unsigned char
#defien uint unsigned int #defien ad0_7 P0 //AD数据口
sbit cs=P1^0; //芯片选择信号,控制芯片的启动和结果读取,低电平有效
sbit rd=P1^1; //读数据控制,低电平有效 sbit wr=P1^2; //AD转换启动控制,上升沿有效
uchar led[10]={0xc0;0xf9;0xa4;0xb0;0x99;0x92;0x82;0xf8;0x80;0x90};
//5ms延时子程序
void delay(uint i) {
uint j;
for(;i>0;i--)
for(j=0;j<410;j++); }
//启动AD转换子程序
void start_ad(void) {
cs=0;//允许进行AD转换
wr=0;_nop_();wr=1;//wr由低变高时,AD开始转换
while(intr);
cs=1;//停止AD转换
}
//读AD数据子程序
read_ad()
{
uint ad_data;
ad0_7=0xff;
cs=0;//允许读
rd=0;//读取转换数据结果数据结果
_nop_();
ad_dara=ad0_7;//把数据存到ad_data中
rd=1;cs=1;
return(ad_data);
}
/*数据处理与显示子程序
说明当输入电压为5V时,AD输出为FFH,即输入电压=AD数据*(5/255)=AD数据/(255/5)=AD
数据/51
用四位数码管进行显示,数码管的A-H接于P3口,公共端从最低位是P2.0,最高位是P2.3
*/
void data_shout(uint ad_data)
{
uint a=50,one,two,three,four;
four=ad_data/51;//第四位数码管(最高位)
three=ad_data%51*10/51;//第三位数码管
two=ad_data%51*10%51*10/51;//第二位数码管
one=ad_data%51*10%51*10%51*10/51;//第一位数码管
while(a--)
{
P3=led[one];
P2=0xfe;
delay(1);
P3=led[two];
P2=0xfd;
delay(1);
P3=led[three];
P2=0xfb;
delay(1);
P3=led[four]-0x80;
P2=0xf7;
delay(1);
}
}
void main()
{
while(1)
{
start_ad();//启动AD
data_shout(read_ad);//读AD数据并显示
}
}
本文档为【ADC0804转换程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。