AD0809简易数字电压表_第1页
AD0809简易数字电压表_第2页
AD0809简易数字电压表_第3页
AD0809简易数字电压表_第4页
AD0809简易数字电压表_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AD0809简易数字电压表,一AD0809电压表设计要求,要求: 设计一个简易的数字电压表,用来测量我们焊接的单片机开发板中AD0809模块前端电位器R40的实时电压值,并用电路板中左位数码管的前三位显示当前模拟电压的十进制数字量值,同时用右数码管显示当前的模拟电压值 附加要求: 为了防止数字电压表使用时出现测量值与实际值存在误差的问题,须增加能通过按键对十进制数字量测量值进行100以内补偿值设定的功能.,二、转换的流程图,开始,左右数码管显示十进制,初始化,在中显示数码管中的数值,判断是否 按键按下?,判断是加1 还是减1?,否,是,加1,减1,结束,三、设计中的问题,1、串口在线下载问题;

2、 2、数码管的显示问题; 3、用周立公芯片实现按键加一; 4、LCD的显示; 5、调试中遇到显示不稳定;,四、解答上述问题,硬件问题: 串口不能下载程序,通过一步步检测MAX232是否与串口连通,是否 与单片机接受和发送的端口连接上,借助万用表查看电阻、电容以及芯片是否正常工作。 软件问题: 经过了解zlg7290.h文件、zlg7290.c文件、VIIC_C51.h文件以 及 VIIC_C51.c文件,主要是zlg7290.c文件中Test_Key子函数、 DispValue子函数、ZLG7290_Download子函数。通过在主函数中调用子函数,并且多处的运用for、while、if语句,

3、经过编译,再一步步排查问题。,五、程序,#include #includeZLG7290.h #includeI2C.h #include /#include #define data_point P0 #define uchar unsigned char typedef unsigned char BYTE;/重新定义 typedef unsigned int WORD;/重新定义 typedef bit BOOL;/重新定义 BYTE code disp21=V; BYTE code disp33=.-+; BYTE code disp4=Stander:; sbit rs=P13;/定

4、义P13端口为rs sbit ep=P15; sbit rw=P14; /lcd,sbit EOC=P33;sbit ADDA=P20;sbit ADDB=P21;sbit ADDC=P22;sbit OE=P25;sbit START=P26;/sbit CLK=P27;volatile bit FlagINT = 0;unsigned char AD=0;char count=0;unsigned char disp7=0,0,0,0,0,0,0;unsigned int t0count=0;void delay(unsigned char t)doTH1 = 0 xD8;TL1 = 0

5、xf0;TR1 = 1;while ( !TF1 );TF1= 0;TR1 = 0; while (-t);,BOOL lcd_bz()BOOL result;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(BOOL)(P0 ,_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;lcd_pos(BYTE pos)lcd_wcmd(pos | 0 x80); lcd_wdat(BYTE dat)while(lcd_bz();rs=1;rw=

6、0;ep=0;P0=dat;,_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;lcd_init()lcd_wcmd(0 x38);lcd_wcmd(0 x0c);lcd_wcmd(0 x06);/lcd_wcmd(0 x00);/delay(1);/lcd_wcmd(0 x14);/delay(1);lcd_wcmd(0 x01);/lcd_pos(12);/lcd_wdat(disp21);, void INT0_SVC() interrupt 0FlagINT = 1;void System

7、Init()I2C_Init();TMOD = 0 x01; delay(1);/等待ZLG7290复位完毕void ClearAll()unsigned char x;for ( x=0; x8; x+ )ZLG7290_Download(x,0,0,31);,void display()unsigned int i,j,k=0 xfb; for(i=0;i4;i+)/P1=0 xff;if(i=0)ZLG7290_Download(3,1,0,dispi);delay(1);if(i=1)ZLG7290_Download(2,0,0, dispi);delay(1);if(i=2)ZLG7

8、290_Download(1,0,0,dispi);delay(1);,if(i=3)ZLG7290_Download(0,0,0,dispi); delay(1); / ZLG7290_Download(7,0,0,disp4);/ZLG7290_Download(6,0,0,disp5);/ZLG7290_Download(5,0,0,disp6);/P1=k;/ k=k=1; for(j=200;j0;j-);/P1=0 xff;unsigned int ADC0809() unsigned int d;ADDC=0;ADDB=0;ADDA=0;TR1=1;START=1;START=0

9、;while(EOC=0);OE=1;d=data_point;OE=0;TR1=0;return d;,void covert(unsigned char x)unsigned int X; char code dispcode=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09 ; X=x * (1.0) * 5000 / 255;/x=(x*100*1.0)/51;disp0=dispcodeX/1000; disp1=dispcodeX%1000/100; / x/50 x/100; /disp0=disp0+0 x8

10、0;disp2=dispcodeX%1000%100/10;/x/10 x%100/10;disp3=dispcodeX%1000%100%10;/ x%100%10;/disp4=k/100;/disp5=k%100/10;/disp6=k%100%10; void DispValue(char x, unsigned char dat)unsigned char d;d = dat/100;ZLG7290_Download(x+2,0,0,d); d = dat % 100/10;ZLG7290_Download(x+1,0,0,d);d = dat%100%10;ZLG7290_Down

11、load(x,0,0,d);disp4=dat/100;disp5=dat % 100/10; disp6= dat%100%10;,void Test_Key() char fuhao;unsigned char KeyValue;/BYTE i;/i=0;unsigned char i=0,k=0,l=0;/unsigned char RepeatCnt;/unsigned char FnKeyValue;ClearAll();EA = 0;IT0 = 1;/负边沿触发中断EX0 = 1;/允许外部中断EA = 1;for (;)if ( FlagINT )/如果有键按下/清除中断标志Fl

12、agINT = 0;/读取键值、连击计数器值、功能键值ZLG7290_ReadReg(ZLG7290_Key,/ZLG7290_ReadReg(ZLG7290_FunctionKey,/DispValue(0,KeyValue);/DispHexValue(3,RepeatCnt);/DispHexValue(6,FnKeyValue); lcd_pos(0); /for(i=0;i6;i+)/AD=ADC0809();covert(AD+count);display();DispValue(5,AD+count);while(disp4i!=0)lcd_wdat(disp4i);i+;lcd

13、_pos(0 x09);lcd_wdat(0 x30+disp0);lcd_pos(0 x0A);lcd_wdat(disp30);/ 0 x30+lcd_pos(0 x0B);lcd_wdat(0 x30+disp1);lcd_pos(0 x0C);lcd_wdat(0 x30+disp2);lcd_pos(0 x0D);lcd_wdat(0 x30+disp3);lcd_pos(0 x0E); lcd_wdat(disp20); /0 x30+,lcd_pos(0 x46); for(l=4;l7;l+) lcd_wdat(0 x30+displ);/lcd_wdat(0 x30+disp5);/lcd_wdat(0 x30+disp6);delay(100); i=0;/PCON |= 0 x01;/使CPU进入空闲状态,任一中断可唤醒void main()BYTE i;i=0;TMOD=0 x10;/TH1=(65536-10000)/256;/TL1=(65536-10000)%256;/TH1=256-2;/TL1=256-2;,/ET0=1;/ET1=1;/EA=1;/TR0=1;OE=0;START=0;EOC=1;SystemInit();lcd_init()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论