這個項目主要是應用51單片機實現,ad轉換+數碼管輸出、
注意:ad0809這個型號在Proteus中沒有所以用ad0808代替仿真。
單片機源程序如下:
- #include "reg51.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit sla=P3^0;//選擇輸入口定義
- sbit slb=P3^1;
- sbit slc=P3^3;//裝置為3.仿真為6
- sbit dia=P0^7;
- sbit ALE=P3^4 ;//AD鎖存器允許信號(4)仿真為3
- sbit CLOCK=P3^5;//時鐘信號(5)仿真為4
- sbit ST=P3^7;//裝置為(7)仿真為5
- sbit EOC=P3^2;//轉換完成信號
- sbit OE=P3^6;//允許輸出信號裝置為(6)仿真為7
- sbit dula=P2^6;//數碼管鎖存信號,裝置為6/7,仿真為0/1
- sbit wula=P2^7;
- u8 code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
-
- u16 t0, votage;
- void delay(u16 i)
- {
- u16 m,n;
- for(m=i;m>0;m--)
- for(n=110;n>0;n--);
- }
- u16 trans(u16 x)//將二進制轉化為十進制
- {
-
- u16 d;
- d=(19.6078431372549)*x;
-
- return d;
-
- }
- void display(u16 v)
- {
- P0=0x00;
- dula=1;
- P0=table[v/1000];
- dia=1;
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfe;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[(v%1000)/100];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfd;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[((v%1000)%100)/10];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfb;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[v%10];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xf7;
- wula=0;
- delay(2);
-
-
- }
- void main()
- {
-
- sla=0;//0號作為口輸入模擬信號
- slb=0;
- slc=0;
-
- OE=0;
- ST=0;
-
- TMOD=0x01;
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- EA=1;
- ET0=1;
- TR0=1;
-
-
-
- while(1)
- {
- ST=0;ST=1;ST=0;//啟動轉換
- while(EOC==0)
- {
- OE=1;
- display(trans(P1));
- OE=0;
- }
- trans(P1);
- }
- }
- void T0_time() interrupt 1//TO計時器給ADC提供時鐘信號
- {
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- CLOCK=~CLOCK;
- }
復制代碼
Keil5工程文件,仿真圖在下面jpg圖片格式,大家自己打開Proteus畫一下吧,下面的附件里面只有代碼的Keil文件:
AD_51.rar
(12.8 KB, 下載次數: 45)
2018-9-28 21:01 上傳
點擊文件名下載附件
工程代碼 下載積分: 黑幣 -5
|