|
這是我的單片機(jī)實(shí)驗(yàn)課的實(shí)驗(yàn)課題
使用到的A/D芯片為 A/D0809,在數(shù)碼管上顯示電壓值,電壓范圍為0~5v
0.png (295.4 KB, 下載次數(shù): 53)
下載附件
2018-6-27 04:40 上傳
- #include "reg51.h"
- #include "absacc.h"
- #define COUNT 5000
- #define AIN0 XBYTE[0x0000] //定義外部地址
- sbit EOC=P3^3; //轉(zhuǎn)換結(jié)束信號(hào)
- 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
- //串口初始化函數(shù)9600bps
- void Sbuf_Init(void)
- {
- SCON=0x50; //10位方式
- //波特率設(shè)置
- PCON=0x00; //波特率不倍增
- TMOD=(TMOD&0x0f)|0x20;//T1方式2
- TH1=0xfd; //T1計(jì)數(shù)初值
- TL1=0xfd;
- //ES=1;EA=1; //串口中斷使能
- TR1=1; //啟動(dòng)定時(shí)器
- }
- void T0_ISR(void) interrupt 1
- {
- static unsigned char i=0;
- TH0=(65536-COUNT)/256;
- TL0=(65536-COUNT)%256;
- if(i==2)//顯示小數(shù)點(diǎn)
- {
- P2=~LED_bit[i]; //先送位碼
- P1=LED_seg[LED_buf[i]]|0x80;//再送段碼;0x80對(duì)應(yīng)的是段碼口的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;//定時(shí)器0為工作方式1
- TH0=(65536-COUNT)/256;//裝初值 高八位
- TL0=(65536-COUNT)%256;//低八位
- ET0=1;//開(kāi)定時(shí)器0中斷
- EA=1; //開(kāi)總中斷
- TR0=1;//啟動(dòng)定時(shí)器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; //啟動(dòng)轉(zhuǎn)換
- i=i;
- i=i;
- delay(20);
- while(EOC==0); //等待AD轉(zhuǎn)換結(jié)束
- ad=AIN0; //讀AD轉(zhuǎn)換結(jié)果
- if(ad!=pre_ad)
- {
- //ad=ad/51;8位A/D轉(zhuǎn)換精度為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;
- }
復(fù)制代碼
|
|