數字電壓表,文件里包含了C語言程序,proteus仿真。測量范圍為 0~5V,測量精度達到0.01V
單片機源程序如下:
- //頭文件區
- #include<AT89X51.h>
- #include<stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define SEG P1//聲明數碼管接P1口
- //定義變量區
- uchar TAB[]={ 0x3f,0x06,0x5b,0x4f,0x66,//共陰字形碼
- 0x6d,0x7d,0x07,0x7f,0x6f};
- uchar disp[4];//顯示器數組
- uint temp,result;
- //函數聲明區
- void display();//聲明顯示函數
- void delay1ms(uchar);//聲明延時函數
- void init(void);//初始化函數
- sbit CLK=P3^4;//時鐘接口
- sbit EOC=P3^2;//轉換結束信號
- sbit ST=P3^6; //開始轉換
- sbit OE=P3^7; //輸出允許端
- //=====主函數=================
- main()
- { init();
- ST=0;
- while(1)
- { ST=1;//啟動
- ST=0;
- while(EOC==0);//查詢等待轉換結果
- OE=1;//打開輸出允許信號
- temp=P0;//讀數據
- result=temp*1.0/255*500;//把0~255數字量量程改為0~500
- disp[0]=result/1000;//最高位永遠為0,除法取商
- disp[1]=result/100%10;//;除以100取商,再除以10取余數
- disp[2]=result/10%10;//
- disp[3]=result%10;//
- display();
- }
- }
- //======顯示函數=============
- void display()
- { uchar i,scan;
- scan=1;
- for(i=0;i<4;i++)
- { P2=~scan;
- SEG=TAB[disp[i]];
- if(i==1)
- SEG=SEG|0x80;
- delay1ms(4);
- scan<<=1;
- }
- }
- //=====延時1MS函數=========
- void delay1ms(uchar x)
- { uchar i,j;
- for(i=0;i<x;i++)
- for(j=0;j<120;j++);
- }
- //=====T0初始化函數============
- void init()
- { EA=1;
- ET0=1;
- TMOD=0x01;
- TH0=(65536-200)/256;
- TL0=(65536-200)%256;
- TR0=1;
- }
- //=======T0中斷服務,提供時鐘信號======
- void timer0() interrupt 1
- { TH0=(65536-200)/256;
- TL0=(65536-200)%256;
- CLK=~CLK;//取反,產生方波
- }
復制代碼
所有資料51hei提供下載:
數字電壓表.rar
(321.67 KB, 下載次數: 82)
2018-5-24 16:42 上傳
點擊文件名下載附件
|