STC片內(nèi)AD程序- /****************************************************
- P2口接4位數(shù)碼管顯示STC12C單片機AD轉(zhuǎn)換電壓值,
- 測P1 8個口任意一個口轉(zhuǎn)換電壓,
- 數(shù)碼管為共陽管
- 電壓為單片機電壓:5v經(jīng)2個10k電阻分壓給單片機vref
- 提供2.5v基準電壓
- 作者:蘇義江
- ***********************************************/
- //#include<12c5a.h>
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint AV;
- sfr P1ASF = 0x9D; //P1口模數(shù)轉(zhuǎn)換功能控制寄存器
- sfr ADC_CONTR = 0xBC; //AD轉(zhuǎn)換控制寄存器
- sfr ADC_RES = 0xBD; //AD轉(zhuǎn)換結(jié)果寄存器高位
- sfr ADC_RESL = 0xBE; //AD轉(zhuǎn)換結(jié)果寄存器低位
- sfr AURX1 = 0xA2; //AD轉(zhuǎn)換結(jié)果存儲方式控制位
- sfr ADC_CONTER=0xc5; //ADC控制寄存器
- sfr ADC_DATA=0xc6;//ADC轉(zhuǎn)換結(jié)果寄存器 高8位
- sfr ADC_LOW2 = 0xBE; //ADC轉(zhuǎn)換結(jié)果寄存器 低8位
- sfr P1M0 =0x91;
- sfr P1M1 =0x92;
- sbit led =P0^0;
- sbit led1=P0^1;
- sbit wei =P0^6;
- sbit duan=P0^7;
- uint a, b, c, d,temp;
- uchar code SMG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- uchar code table1[]={0x04,0x9e,0x22,0x12,0x98,0x11,0x01,0x96,0x00,0x10};
- //帶小數(shù)點字碼表//
- uchar code table[]={0x44,0xde,0x62,0x52,0xd8,0x51,0x41,0xd6,0x40,0x50};
- //不帶小數(shù)點字碼表//
- void delay(uint z) //延時//
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- /****獲取ADC轉(zhuǎn)換結(jié)果*****/
- uint ADC() //設(shè)置AD轉(zhuǎn)換口//
- {
- ADC_CONTER = ADC_CONTER|0x80;
- ADC_DATA=0x00;
- ADC_CONTER=0xe2;
- ADC_CONTER|=0x08;
- //查詢ADC_FLAG位是否置1
- while ((0x10&ADC_CONTER)!=0x10);
- // ADC_CONTER = ADC_CONTER&0xe7;
- ADC_CONTER&=0xE7; //關(guān)閉AD 清除轉(zhuǎn)換結(jié)束標志
- //單片機電源為5V,求的真實電壓值
- AV=256*ADC_DATA/5;//公式換算成電壓值//
- return (AV);
- }
- void main ()
- {
- //設(shè)置P1.2為 AD 輸入口
- // P1M0=0X02 ;
- // P1M1=0X02;
- //把P1.0配置為ADC輸入引腳
- // P1M0=0x01;
- // P1M1=0x00;
- //1111 1111 設(shè)置P1口為開漏模式,用來AD采集
- P1M0=0xFF;
- P1M1=0xFF;
- ADC_CONTER|=0x80;//打開ADC電源
- while(1)
- {
- temp=ADC();
- a=temp/1000;
- b=(temp-a*1000)/100;
- c=(temp-a*1000-b*100)/10;
- d=temp%10;
- wei=1;
- P2=0XFE;
- wei=0;
- duan=0;
- duan=1;
- P2=SMG[a];
- delay(10);
- P2=0XFf;
- wei=1;
- P2=0XFd;
- wei=0;
- duan=0;
- duan=1;
- P2=SMG[b];
- delay(10);
- P2=0XFf;
- wei=0;
- wei=1;
- P2=0XFb;
- duan=0;
- duan=1;
- P2=SMG[c];
- delay(10);
- P2=0XFf;
- wei=0;
- wei=1;
- P2=0XF7;
- duan=0;
- duan=1;
- P2=SMG[d];
- delay(10);
- P2=0XFf;
- if(AV>5.3)
- led=0;led1=1;
- if(AV<4.5)
- led=1;led1=0;
- if(AV<5.25&&AV>4.55)
- led=1;led1=1;
- }
- }
復(fù)制代碼 |