第17课打卡
综述:前面发送2个回帖都为由经过实际实验,这一次是经过实验回复了。之前抄程序的时候不仔细,抄错了一个代码导致按键值错误。现在改正回帖
- #include <STC32G.H>
- #include <intrins.h>
- #include"sys_init.h"
- #include"LED_display.h"
-
- unsigned char cnt1ms=0;
- unsigned int ad_volume=0;
- #define ADC_OFFSET 64
- unsigned char KeyCode=0;
- void CalculateAdcKey(unsigned int adc);
- unsigned int Get_ADC12BitResult(unsigned char channel);
- void Timer0Init(void)
- {
- AUXR |= 0X7F;
- TMOD &= 0XF0;
- TL0=0X30;
- TH0=0XF8;
- TF0=0;
- TR0=1;
- }
-
- void main()
- {
- unsigned int j;
- sys_init();
- ADCCFG=ADCCFG | 0X20;
- ADC_POWER = 1;
- P1M1=P1M1 | 0X01;
- Timer0Init();
- ET0 = 1;
- TR0 = 1;
- EA = 1;
- while(1)
- {
- Dis_buf[4] = ad_volume /1000%10;
- Dis_buf[5] = ad_volume /100%10;
- Dis_buf[6] = ad_volume /10%10;
- Dis_buf[7] = ad_volume %10;
- Dis_buf[0] = KeyCode /10;
- Dis_buf[1] = KeyCode %10;
- LED_display();
- if(cnt1ms>=10)
- {
- cnt1ms=0;
- j = Get_ADC12BitResult(0);
- if(((256-ADC_OFFSET)<j) && (j<4096))
- {
- LED_display();
- LED_display();
- j = Get_ADC12BitResult(0);
- if(((256-ADC_OFFSET)<j) && (j<4096))
- {
- ad_volume = j;
- CalculateAdcKey(j);
- Dis_buf[4] = ad_volume /1000%10;
- Dis_buf[5] = ad_volume /100%10;
- Dis_buf[6] = ad_volume /10%10;
- Dis_buf[7] = ad_volume %10;
- Dis_buf[0] = KeyCode /10;
- Dis_buf[1] = KeyCode %10;
- L1: j = Get_ADC12BitResult(0);
- while(((256-ADC_OFFSET)<j) && (j<4096))
- {
- LED_display();
- goto L1;
- }
- }
- }
- }
- }
- }
-
- unsigned int Get_ADC12BitResult(unsigned char channel)
- {
- ADC_RES = 0;
- ADC_RESL = 0;
- ADC_CONTR = (ADC_CONTR & 0XE0) | 0X40 | channel;
- _nop_();_nop_();
- _nop_();_nop_();
- while((ADC_CONTR & 0X20) == 0);
- ADC_FLAG=0;
- return <font color="#ff0000">(((unsigned int)ADC_RES << 8) | ADC_RESL);</font>
- }
-
- void CalculateAdcKey(unsigned int adc)
- {
- unsigned char i;
- unsigned int j=256;
- for(i=1;i<=16; i++)
- {
- if((adc >= (j - ADC_OFFSET)) && (adc <= (j+ADC_OFFSET))) break;
- j+=256;
- }
- if(i<17) KeyCode = i;
- }
-
- void timer0(void) interrupt 1
- {
- cnt1ms++;
- }
复制代码
|