|
這是我的單片機實驗課的實驗課題
使用到的A/D芯片為 A/D0809,在數碼管上顯示電壓值,電壓范圍為0~5v
- #include "reg51.h"
- #include "absacc.h"
- #define COUNT 5000
- #define AIN0 XBYTE[0x0000] //定義外部地址
- sbit EOC=P3^3; //轉換結束信號
- unsigned char LED_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- //unsigned char YLED_seg[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xf7,0xff,0xef};
- unsigned char LED_bit[4]={0x01,0x02,0x04,0x08};
- unsigned char LED_buf[3]={0};
- //fosc=11.0592MHz,9600bps
- //串口初始化函數9600bps
- void Sbuf_Init(void)
- {
- SCON=0x50; //10位方式
- //波特率設置
- PCON=0x00; //波特率不倍增
- TMOD=(TMOD&0x0f)|0x20;//T1方式2
- TH1=0xfd; //T1計數初值
- TL1=0xfd;
- //ES=1;EA=1; //串口中斷使能
- TR1=1; //啟動定時器
- }
- void T0_ISR(void) interrupt 1
- {
- static unsigned char i=0;
- TH0=(65536-COUNT)/256;
- TL0=(65536-COUNT)%256;
- if(i==2)//顯示小數點
- {
- P2=~LED_bit[i]; //先送位碼
- P1=LED_seg[LED_buf[i]]|0x80;//再送段碼;0x80對應的是段碼口的dp位
- }
- else
- {
- P2=~LED_bit[i]; //先送位碼
- P1=LED_seg[LED_buf[i]]; //再送段碼
- }
- i++;
- if(i==3)
- i=0;
- }
- void Timer0_Init(void)
- {
- TMOD=(TMOD&0xf0)|0x01;//定時器0為工作方式1
- TH0=(65536-COUNT)/256;//裝初值 高八位
- TL0=(65536-COUNT)%256;//低八位
- ET0=1;//開定時器0中斷
- EA=1; //開總中斷
- TR0=1;//啟動定時器0
- }
- void delay(unsigned int n)
- {
- unsigned int i;
- for(i=0;i<n;i++)
- ;
- }
- void main(void)
- {
- unsigned int i=0,ad,pre_ad=0;
- Timer0_Init();
- Sbuf_Init();
- while(1)
- {
- AIN0=0; //啟動轉換
- i=i;
- i=i;
- delay(20);
- while(EOC==0); //等待AD轉換結束
- ad=AIN0; //讀AD轉換結果
- if(ad!=pre_ad)
- {
- //ad=ad/51;8位A/D轉換精度為1/225*5V=19.6mV
- LED_buf[2]=(ad*100/51)/100;
- LED_buf[1]=(ad*100/51)/10%10;
- LED_buf[0]=(ad*100/51)%10;
- }
- pre_ad=ad;
- }
復制代碼
|
-
-
實驗5(AD)報告.doc
2018-6-25 01:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
63 KB, 下載次數: 13, 下載積分: 黑幣 -5
|