1.jpg (76.38 KB, 下載次數(shù): 56)
下載附件
2020-4-12 10:15 上傳
程序流程圖
最下面四個是采樣電阻,調(diào)節(jié)電阻值改變采樣電壓大小,然后8個通道依次采四個電阻值輸出的電壓的大小,在數(shù)碼管上動態(tài)顯示通道號和所對應(yīng)采回的電壓值大小。ADC0808轉(zhuǎn)換完成是使用外部中斷下降沿的方式通知單片機進行數(shù)據(jù)讀取,最大程度上保證了電壓數(shù)據(jù)的精確,程序中可以更改ADC循環(huán) 采樣的時間。示波器是為了觀察轉(zhuǎn)換是否完成的波形來確保ADC0808能否正常工作。
2.jpg (181.19 KB, 下載次數(shù): 27)
下載附件
2020-4-12 10:08 上傳
3.jpg (218.57 KB, 下載次數(shù): 32)
下載附件
2020-4-12 10:19 上傳
Proteus仿真圖
單片機源程序如下:
- /* Main.c file generated by New Project wizard
- *
- * Created: 周四 2月 27 2020
- * Processor: AT89C51
- * Compiler: Keil for 8051
- */
- #include <reg51.h>
- #include <stdio.h>
- #define u8 unsigned char
- sfr AUXR =0x8E;
- u8 code t_display[]={ //標準字庫
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- // black - H J K L N o P U t G Q r M y
- 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
- 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
- // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
- unsigned xianshi[6];
- u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼
- /*******************************************************/
- sbit start=P3^1;
- sbit CLK=P3^0;
- sbit addA=P3^4;
- sbit addB=P3^5;
- sbit addC=P3^3;
- sbit OE=P3^7;
- bit disflag;
- bit adcflag;
- bit okflag;
- u8 adcnum,adc_value;
- unsigned int a;
- void Timer0Init(void) //定時器初始化0.1毫秒@11.0592MHz
- {
- TMOD &=0xf0;
- TMOD |=0X01;
- //TH0=(65536-92)/256;
- //TL0=(65536-92)%256;
-
- TL0 = 0xA4; //設(shè)置定時初值
- TH0 = 0xFF;
-
- ET0=1; //開啟定時器0中斷
- TR0=1; //定時器T0啟動
- }
- void timer0() interrupt 1 using 1 //定時器中斷函數(shù)配置
- {
- static int dis_count=0,adc_count=0;
- TL0 = 0xA4; //設(shè)置定時初值
- TH0 = 0xFF;
- //CLK=~CLK;
- dis_count++;
- adc_count++;
- if(dis_count==10)
- {
- dis_count=0;
- disflag=1;
- };
- if(adc_count==10000)
- {
- adc_count=0;
- adcflag=1;
- };
-
- }
- void Exit0Init(void) //外部中斷初始化
- {
- IE=0; //開啟外部中斷請求
- IT0=1; //外部中斷設(shè)置為下降沿觸發(fā)
- EX0=1; //外部中斷請求開啟
- }
- void exit0() interrupt 0 //外部中斷0中斷函數(shù)配置
- {
- okflag=1; //轉(zhuǎn)換完成
- }
- void display() //數(shù)碼管掃描顯示函數(shù)
- {
- static int i=0;
- disflag=0;
- P2=0XFF; //消影
- P1=xianshi[i]; //送位選
- P2=~T_COM[i]; //送段選
- i++;
- if(i==6) i=0;
- }
- void start_adc() //adc啟動函數(shù)
- {
- start=0;
- adcflag=0;
-
- addC=adcnum/4;
- addB=adcnum%4/2;
- addA=adcnum%2;
-
-
- start=1;
-
- if(adcnum==8) adcnum=0;
- adcnum++;
- start=0;
- }
- void read_adc() //adc讀取函數(shù)
- {
- okflag=0;
-
- OE=1;
- adc_value=P0;
-
-
- a=adc_value*20;//255表示5000mv ,1表示20mv,共5100mv
- OE=0;
- xianshi[0]=t_display[a%10];
- xianshi[1]=t_display[a%100/10];
- xianshi[2]=t_display[a%1000/100];
- xianshi[3]=t_display[a/1000+32];
- xianshi[4]=0x40;
- xianshi[5]=t_display[adcnum-1];
-
- }
- void main(void)
- {
-
- // Write your code here
- Exit0Init();
- Timer0Init();
- EA=1; //開啟全局中斷
- while (1)
- {
-
- if(disflag==1) display();
- if(adcflag==1) start_adc();
- if(okflag==1) read_adc();
- }
- ;
- }
復(fù)制代碼 全部資料51hei下載地址:
ADC0808循環(huán)采樣.zip
(1.28 MB, 下載次數(shù): 77)
2020-4-12 10:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|