|
源碼加電路圖
51hei.png (28.04 KB, 下載次數(shù): 46)
下載附件
2020-12-22 15:13 上傳
51hei.png (36.22 KB, 下載次數(shù): 36)
下載附件
2020-12-22 15:13 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示0-9的電平碼
- uint volt,vtime; //電壓值測定值
- uchar addr;//測量地址位
- sbit LW1=P2^3; //對應(yīng)第4個數(shù)碼管
- sbit LW2=P2^2; //對應(yīng)第3個數(shù)碼管
- sbit LW3=P2^1; //對應(yīng)第2個數(shù)碼管
- sbit LW4=P2^0; //對應(yīng)第1個數(shù)碼管
- sbit LW5=P1^4;//指示當(dāng)前顯示的是第幾個轉(zhuǎn)換值
- sbit CLK=P2^4; //時鐘信號
- sbit START=P2^5; //轉(zhuǎn)換啟動開關(guān)
- sbit EOC=P2^6; //轉(zhuǎn)換結(jié)束標志
- sbit OE=P2^7;//定義ADC0809各腳
- /**********************************************************/
- //函數(shù)名:delay(uint x)
- //功能:延時程序 改變測量地址
- //調(diào)用函數(shù):
- //輸入?yún)?shù):x
- //輸出參數(shù):
- //說明:程序的延時時間為x乘以0.5ms 每5s改變測量地址位
- /**********************************************************/
- void delay(uint x)
- {
- uchar y,z;
- for(y=x;y>0;y--)
- for(z=250;z>0;z--);//該步運行時間約為0.5ms
- vtime++;
- if(vtime==1000)
- {
- vtime=0;
- addr++;
- if(addr==3) //本例子一共有3個測量輸入值,輪流讀取這3個值并轉(zhuǎn)換顯示
- addr=0;//以上語句實現(xiàn)測量地址位的改變
- }
- }
- /**********************************************************/
- //函數(shù)名:ADC()
- //功能:數(shù)模轉(zhuǎn)換程序
- //調(diào)用函數(shù):
- //輸入?yún)?shù):
- //輸出參數(shù):
- //說明:將轉(zhuǎn)換好的測定值保存在變量volt中
- /**********************************************************/
- void ADC()
- {
- EA=1;//開中斷
- //確保進入正常AD轉(zhuǎn)換狀態(tài)?
- START=0;
- START=1;
- START=0;//ad開始轉(zhuǎn)換
- while(EOC==0); //等待轉(zhuǎn)換結(jié)束
- OE=1; //輸出數(shù)據(jù)標志為真
-
- EA=0;//關(guān)中斷
- volt=P3;//獲取轉(zhuǎn)換值保存到volt中,(P3為轉(zhuǎn)換后數(shù)據(jù))
- volt=volt*196;//轉(zhuǎn)換值處理 (例子的滿量程為5V,轉(zhuǎn)換分辯率為8位即最大值是255,5/255=196mV,即1代表196mV)
-
- OE=0;//輸出轉(zhuǎn)換結(jié)束 (要在獲取轉(zhuǎn)換值之后)
- }
- /**********************************************************/
- //函數(shù)名:display()
- //功能:4位數(shù)碼管顯示
- //調(diào)用函數(shù):delay(uint x)
- //輸入?yún)?shù):
- //輸出參數(shù):
- //說明:將處理后的電壓值顯示在4位數(shù)碼管上
- /**********************************************************/
- void display()
- {
- P0=0xff;//消隱 (相當(dāng)于全部滅燈,清除上次顯示效果)
- LW1=0;
- P0=~led[volt/10000]&0x7f;//帶小數(shù)點1伏顯示位
- delay(2);
- P0=0xff;
- LW1=1;
- LW2=0;
- P0=~led[(volt/1000)%10];//100毫伏顯示位
- delay(2);
- P0=0xff;
- LW2=1;
- LW3=0;
- P0=~led[(volt/100)%10];//10毫伏顯示位
- delay(2);
- P0=0xff;
- LW3=1;
- LW4=0;
- P0=~led[(volt/10)%10];//1毫伏顯示位
- delay(2);
- P0=0xff;
- LW4=1;
- LW5=0;
- P0=~led[addr+1];//顯示電壓測量位
- delay(2);
- LW5=1;//指示當(dāng)前顯示的是第幾個轉(zhuǎn)換值
- }
- /**********************************************************/
- //主程序
- /**********************************************************/
- void main()
- {
- EA=1;//開總中斷
- TMOD=0x01;//設(shè)定定時計數(shù)工作方式
- //為定時器初賦值
- TH0=0XFF;
- TL0=0XB4;
- ET0=1;//開定時器0中斷
- TR0=1;//開啟定時器0
- while(1)
- {
- P1=addr;//裝入測量地址
- LW5=1;
- ADC();//調(diào)用模數(shù)轉(zhuǎn)換程序
- display();//調(diào)用顯示程序
- }
- }
- /**********************************************************/
- //函數(shù)名:timer() interrupt 1
- //功能:定時中斷0響應(yīng)程序
- //調(diào)用函數(shù):
- //輸入?yún)?shù):
- //輸出參數(shù):
- //說明:為ADC提供時鐘信號
- /**********************************************************/
- void timer() interrupt 1
- {
- //初值重置
- TH0=0XFF;
- TL0=0XF0;
- CLK=~CLK;//取反 產(chǎn)生時鐘信號
- }
復(fù)制代碼
仿真代碼51hei提供下載:
數(shù)字電壓表(ADC0809)-2.rar
(47.83 KB, 下載次數(shù): 70)
2020-12-22 08:16 上傳
點擊文件名下載附件
數(shù)字電壓表 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|