|
樓主改這樣試試
- #include <STC12C5A60S2.H>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- //宏定義ADC的操作命令
- #define ADC_POWER 0x80 //ADC電源控制位
- #define ADC_START 0x08 //ADC啟動控制位
- #define ADC_FLAG 0x10 //ADC完成標(biāo)志位
- #define ADC_SPEEDLL 0x00 //420時鐘速度控制位
- sbit LSA=P2^5;//數(shù)碼管定義
- sbit LSB=P2^6;//
- sbit LSC=P2^7;//
- uchar code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar disp[4];
- uint temp1,result,a,b;
- void delayms(uint k)//1T單片機(jī)延時
- {
- uint i,j;
- for(i=k;i>0;i--)
- for(j=1150;j>0;j--);
- }
- /*-----------------------------------------------------------------------------
- InitADC 初始化ADC
- -----------------------------------------------------------------------------*/
- void InitADC()
- {
- P1ASF=0x01; //設(shè)置P1的第1通道端口作為模擬輸入
- ADC_RES=0; //清除ADC_RES存儲器以前的結(jié)果
- ADC_RESL=0; //清除ADC_RESL存儲器以前的結(jié)果
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL;//ADC 開啟電源、轉(zhuǎn)換速度 1000 0000
- delayms(1); //上電延時1ms
- }
- /*----------------------------------------------------------------------------
- Get ADC Result(獲取ADC結(jié)果)
- ----------------------------------------------------------------------------*/
- uint Read(uchar CHA) //獲取ADC結(jié)果
- {
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL|CHA|ADC_START;//啟動轉(zhuǎn)換1000 1000
- _nop_(); //延時確保正確讀到ADC_CONTR寄存器的值
- _nop_();
- _nop_();
- _nop_();
- while(!(ADC_CONTR & ADC_FLAG)); //等待ADC轉(zhuǎn)換完成標(biāo)志置位 1001 1000
- ADC_CONTR &=~ADC_FLAG; //關(guān)閉ADC
- return(ADC_RES*4+ADC_RESL); //返回十位ADC結(jié)果
- }
- void datapros()
- {
- static uint i=0;
- if(++i>=1000)//大約1秒取樣一次
- {
- i=0;
- temp1=Read(0); //讀取第一通道AD值//光敏
- disp[0]=smgduan[temp1/1000%10];
- disp[1]=smgduan[temp1/100%10];
- disp[2]=smgduan[temp1/10%10];
- disp[3]=smgduan[temp1%10];
- }
- }
- void DigDisplay()
- {
- static uchar i=0;
- P0=0x00; //消隱
- switch(i) //位選
- {
- case(0):LSA=0;LSB=0;LSC=0;break;
- case(1):LSA=1;LSB=0;LSC=0;break;
- case(2):LSA=0;LSB=1;LSC=0;break;
- case(3):LSA=1;LSB=1;LSC=0;break;
- }
- P0=disp[i];
- i++;
- i%=4;
- }
- void main()
- {
- P1M0 = 0x00;
- P1M1 = 0x01;
- InitADC();
- while(1)
- {
- datapros();
- DigDisplay();
- delayms(1);
- }
- }
復(fù)制代碼 |
|