数字电压表设计proteus仿真原理图:
单片机源程序:
- #include <reg52.h>
- #include <intrins.h>
- sbit EOC=P2^6;
- sbit START=P2^5;
- sbit OE=P2^7;
- sbit CLK=P2^4;
- long int a;
- int b,c,d,e,f,g; //定义长度为7的字符串
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
- void delay_display(unsigned int z) //延时子程序
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void ADC0808()
- {
- if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换
- {
- START=0;
- START=1;
- START=0;
- }
- while(!EOC); //等待AD转换结束
- START=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备
- START=0;
- while(EOC);
- }
- void bianma()
- {
- START=0;
- ADC0808();
- a=P1*100;
- a=a/51;
- }
- void yima()
- {
- //定义整形局域变量
- b=a/1000; //取出千位
- c=a-b*1000; //取出百位、十位、个位
- d=c/100; //取出百位
- e=c-d*100; //取出十位、个位
- f=e/10; //取出十位
- g=e-f*10; //取出个位
- }
- void display() //显示子程序
- {
- P2 = 0xfe;
- P0 = table[b];
- delay_display(1);
-
- P2 = 0xfd;
- P0 = table[d];
- delay_display(1);
-
- P2 = 0xfd;
- P0 = table[10];
- delay_display(1);
- P2 = 0xfb;
- P0 = table[f];
- delay_display(1);
-
- P2 = 0xf7;
- P0 = table[g];
- delay_display(1);
- }
- void main()
- {
- EA=1;
- TMOD=0X02;
- TH0=216;
- TL0=216;
- TR0=1;
- ET0=1;
- while(1)
- {
- bianma();
- yima();
- display();
- }
- }
- void t0() interrupt 1 using 0
- {
- CLK=~CLK;
- }
复制代码
仿真工程文件和源码下载:
第1章 数字电压表设计.rar
(46.59 KB, 下载次数: 54)
|