|
效果圖詳見(jiàn):http://www.torrancerestoration.com/bbs/dpj-40455-1.html
- /**********************************************************
- 功能 :STC12C5A60S2片內(nèi)4路AD循環(huán)檢測(cè)并數(shù)碼管顯示
- 大數(shù)碼管實(shí)驗(yàn)板 約2秒循環(huán)顯示一次。P1^0-P1^3口
- 模擬輸入的值
- 單片機(jī):STC12C5A60S2
- 晶振 :11.0592M
- 作者 :蘇義江
- 時(shí)間 ;2015-11-16
-
- ********************************************************/
- #include<stc12c5a60s2.h>
- #include<intrins.h>
- #define uint8 unsigned char
- #define uint16 unsigned int
- //帶小數(shù)點(diǎn)的共陽(yáng)段碼
- uint8 code tab_d[]={0x40,0x79,0x24,0x30,0x19,0x12,
- 0x02,0x78,0x00,0x10}; //帶點(diǎn)共陽(yáng)段驅(qū)動(dòng)
- //不帶小數(shù)點(diǎn)的共陽(yáng)段碼
- uint8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
- 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- //sfr P1ASF=0x9d;
- //sfr ADC_CONTR=0xbc;
- //sfr ADC_RES =0xbd;
- //sfr ADC_RESL =0xbe;
- sbit wei=P0^6;
- sbit duan=P0^7;
- uint8 datah0=0;
- uint8 datah1=0;
- uint8 datah2=0;
- uint8 datah3=0;
- uint8 tab[4];
- void delayms(uint16 z)
- {
- uint16 x,y;
- for(x=z;x>0;x--)
- for(y=620;y>0;y--);
- }
- void ADC_Init0(void)
- {
- P1ASF=0x0F;//P1.0,P1.1,P1.2,P1.3口作為模擬功能AD使用。
- ADC_CONTR=0X80;//打開ADC轉(zhuǎn)換電源,540個(gè)周期轉(zhuǎn)換一次,初始化ADC標(biāo)志位為0,AD轉(zhuǎn)換控制位初始化為0,選擇P1.0作為AD輸入來(lái)用。
- ADC_RES =0;
- ADC_RESL =0;
- }
- void ADC_Init1(void)
- {
- ADC_CONTR=0X81;//打開ADC轉(zhuǎn)換電源,540個(gè)周期轉(zhuǎn)換一次,初始化ADC標(biāo)志位為0,AD轉(zhuǎn)換控制位初始化為0,選擇P1.1作為AD輸入來(lái)用。
- }
- void ADC_Init2(void)
- {
- ADC_CONTR=0X82;
- }
- void ADC_Init3(void)
- {
- ADC_CONTR=0X83;
- }
- void display(uint8 num)
- {
- uint8 hundred,ten,one;
- float a;
- int b;
- a=ADC_RES;
- a=(ADC_RES+0.05)/55; //調(diào)節(jié)/后面的數(shù)值調(diào)節(jié)精度
- // a=(num+0.005)/51;
- a=a*100;
- b=a;
- hundred=b/100;
- ten=b%100/10;
- one=b%10;
- wei=1;
- P2=0XFE;
- wei=0;
- duan=1;
- P2=tab_d[hundred];
- duan=0;
- delayms(10);
- P2=0xff;
- wei=1;
- P2=0XFd;
- wei=0;
- duan=1;
- P2=table[ten];
- duan=0;
- delayms(10);
- P2=0xff;
- wei=1;
- P2=0XFb;
- wei=0;
- duan=1;
- P2=table[one];
- duan=0;
- delayms(10);
- P2=0xff;
-
- }
- void main()
- {
- uint8 i;
- ADC_Init0();
- ADC_Init1();
- ADC_Init2();
- ADC_Init3();
- while(1)
- {
- ADC_CONTR=0X80;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- datah0=ADC_RES;
-
- /***************************/
- ADC_CONTR=0X81;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- datah1=ADC_RES;
- ADC_CONTR=0X82;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- datah2=ADC_RES;
- ADC_CONTR=0X83;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- datah3=ADC_RES;
- ADC_CONTR=0X88;//打開ADC轉(zhuǎn)換電源,540個(gè)周期轉(zhuǎn)換一次,初始化ADC標(biāo)志位為0,AD開始轉(zhuǎn)換,選擇P1.0作為AD輸入來(lái)用。
- _nop_();
- _nop_();
- _nop_();
- _nop_();/*以上是四個(gè)時(shí)鐘延時(shí)*/
- for(i=0;i<50;i++)
- {
- display(table[datah0]);
- delayms(5);
- }
- delayms(2000);
- // R_S_Byte(datah0);
- tab[0]=datah0;
- ADC_CONTR=0X89;//打開ADC轉(zhuǎn)換電源,540個(gè)周期轉(zhuǎn)換一次,初始化ADC標(biāo)志位為0,AD開始轉(zhuǎn)換,選擇P1.1作為AD輸入來(lái)用。
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- /*以上是四個(gè)時(shí)鐘延時(shí)*/
- for(i=0;i<50;i++)
- {
- display(table[datah1]);
- delayms(5);
- }
- delayms(2000);
-
- // R_S_Byte(datah1);
- tab[1]=datah1;
- ADC_CONTR=0X8A;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- for(i=0;i<50;i++)
- {
- display(table[datah2]);
- delayms(5);
- }
- delayms(2000);
-
- // R_S_Byte(datah2);
- tab[2]=datah2;
- ADC_CONTR=0X8B;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- for(i=0;i<50;i++)
- {
- display(table[datah3]);
- delayms(5);
- }
- delayms(2000);
-
- // R_S_Byte(datah3);
- tab[3]=datah3;
- }
- }
復(fù)制代碼
|
|