给51黑电子论坛的朋友们分享一个ICL7135和51单片机实现的数字电压表,下面是仿真原理图:
数字电压表的仿真工程文件和源码下载:
51单片机的数字电压表.rar
(28.94 KB, 下载次数: 439)
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code tab[]={
- 0x3F,
- 0x06,
- 0x5B,
- 0x4F,
- 0x66,
- 0x6D,
- 0x7D,
- 0x07,
- 0x7F,
- 0x6F, //字形码
- };
- uint V=0;
- uchar flag=3;
- sbit point=P0^7;
- sbit s1=P2^0;
- sbit s2=P2^1;
- sbit s3=P2^2;
- void delay(uint ms)
- {
- uchar i;
- while(ms--)
- for(i=0;i<123;i++); //延时
- }
- void main()
- {
- TMOD=0x0D; //00001101
- TR0=1;
- IT0=1;
- TL0=0;
- TH0=0;
- EA=1;
- EX0=1;
- s1=1;s2=1;s3=0;
- while(1)
- {
- uchar temp=0xFE,a[4],i;
- a[0]=V/10000;
- a[1]=V%10000/1000;
- a[2]=V%1000/100;
- a[3]=V%100/10; //取位
- for(i=0;i<4;i++)
- {
- P0=tab[a[i]];
- if(i==1&&flag==3) //小数点位置
- point=1;
- if(i==0&&flag==2)
- point=1;
- if(i==0&&flag==1)
- point=1;
- P1=temp;
- delay(1);
- P1=0xff;
- temp=_crol_(temp,1); //显示
- }
-
- }
- }
- void ADC_7135() interrupt 0
- {
- V=TH0;
- V<<=8;
- V+=TL0;
- V-=10001;
- TL0=0;
- TH0=0;
- switch(flag) //选档
- {
- case 3: //缩小档
- {
- if((V>=200)&&(V<2000))
- {
- s1=1;s2=0;s3=1;
- flag=2;
- }
- if(V<200)
- {
- s1=0;s2=1;s3=1;
- flag=1;
- }
- break;
- }
- case 2: //一倍档
- {
- if(V>=20000)
- {
- s1=1;s2=1;s3=0;
- flag=3;
- }
- if(V<2000)
- {
- s1=0;s2=1;s3=1;
- flag=1;
- }
- break;
- }
- case 1: //放大档
- {
- if(V>=20000)
- {
- s1=1;s2=1;s3=0;
- flag=3;
- }
- break;
- }
- }
- }
复制代码 |