- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
voidcovert(unsignedcharx){ charcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管编码表 disp[0]=dispcode[x/50];//真实电压值为x乘以0.02V,整数部分相当于x除以50 disp[0]=disp[0]+0x80;//显示时加上小数点 x=(x%50)*2;//获得小数部分 disp[1]=dispcode[x/10];//第一位小数 disp[2]=dispcode[x%10];//第二位小数}#includereg51.h#definedata_pointP0//定义数据读入端口sbitEOC=P2^0;//定义ADC0809的控制引脚sbitADDA=P2^1;sbitADDB=P2^2;sbitADDC=P2^3;sbitOE=P2^5;sbitSTART=P2^6;sbitCLK=P2^7;unsignedchardisp[8]={0,0,0};//显示数据unsignedchart0count=0;//软件计数变量源程序voiddisplay()//显示函数{ unsignedchari,j,k=0x80;//设置位码初值 for(i=0;i3;i++)//循环三次 { P1=0;//关闭显示 P3=disp[i];//输出段码 P1=k;//输出位码 k=1;//指向下一个数码管 for(j=200;j0;j--);//延时0.4ms } P1=0;//关闭显示}unsignedcharADC0809(){//通过ADC0809读入数据,并通过函数返回 unsignedchard; ADDC=0;//使ADC0809选择IN0 ADDB=0;ADDA=0;//TR1=1;//启动定时器1//ALE=1;ALE=0;//单独控制ALE START=1;START=0;//启动ADC0809 while(EOC==0);//等待转换结束,EOC变为高电平 OE=1;//允许ADC0809输出 d=data_point;//读入数据 OE=0;//关闭ADC0809输出//TR1=0;//关闭定时器1 returnd;//返回数据}voidcovert(unsignedcharx){ charcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管编码表 disp[0]=dispcode[x/50];//真实电压值为x乘以0.02V,整数部分相当于x除以50 disp[0]=disp[0]+0x80;//显示时加上小数点 x=(x%50)*2;//获得小数部分 disp[1]=dispcode[x/10];//第一位小数 disp[2]=dispcode[x%10];//第二位小数}主程序电压表:显示与输入的模拟电压大小相对应的数据。软件:完成数据的读入和显示部分显示:动态显示,要求ADC0809每秒转换一次,每秒变化一次数据。1S定时采用定时器+软件计数完成。主程序完成初始化和动态显示voidmain(){ TMOD=0X21;//T0为方式1,T1为方式2 TH0=(65536-10000)/256; TL0=(65536-10000)%256;//T0设置为10ms TH1=256-2;//T1设置为2μs ET0=1;//设置中断允许 ET1=1; EA=1; TR0=1;//启动T0 TR1=1;//启动T1 OE=0; START=0; EOC=1;//ADC0809初始化 while(1) { display(); //显示数据 }}voidtime0()interrupt1//定时器0中断服务程序{ TH0=(65536-10000)/256;//重置T0初值 TL0=(65536-10000)%256; t0count++;//软件计数器加1 if(t0count==100)//是否到1s { t0count=0;//软件计数器清0 covert(ADC0809())
文档评论(0)