給51黑電子論壇的朋友們分享一個ICL7135和51單片機實現的數字電壓表,下面是仿真原理圖:
0.png (31.04 KB, 下載次數: 175)
下載附件
2016-9-27 19:42 上傳
0.png (57.04 KB, 下載次數: 137)
下載附件
2016-9-27 19:43 上傳
數字電壓表的仿真工程文件和源碼下載:
51單片機的數字電壓表.rar
(28.94 KB, 下載次數: 439)
2016-9-27 19:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- #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;
- }
- }
- }
復制代碼 |