第20集 ADC_NTC测温 课后小练
NTC温度读取采用冲哥STC32G视频教程第19集NTC温度采集程序。 程序下载运行IRC频率24M,插上测温跳帽JUP2。
- void KEY_Task(void)
- {
-
- u8 temp;
- temp = ADC_KEY_READ(ADC_Read(0));
- if(temp)
- {
- Key_Vol++;
-
- if( Key_Vol==5 )
- {
- key = temp;
- if(key==8) //“设置”按键
- Set_t = 1; //按下设置键,标志位Set_t置一
- if(key==16) //“确认退出”按键
- Set_t = 0;
- if(Set_t)
- {
- switch(key)
- {
- //温度增减按键
- case 1: if(baojing[0]<9) baojing[0]++; break;
- case 2: if(baojing[1]<9) baojing[1]++; break;
- case 3: if(baojing[2]<9) baojing[2]++; break;
- case 4: if(baojing[3]<9) baojing[3]++; break;
- case 9: if(baojing[0]>0) baojing[0]--; break;
- case 10: if(baojing[1]>0) baojing[1]--; break;
- case 11: if(baojing[2]>0) baojing[2]--; break;
- case 12: if(baojing[3]>0) baojing[3]--; break;
- default: break;
- }
- }
- }
- }
- else
- {
- Key_Vol = 0;
- }
- BJ_wendu = baojing[3]*1000+baojing[2]*100+baojing[1]*10+baojing[0]; //报警温度放在数组baojing[]内
- }
-
- void NTC_Task(void) //间隔500ms读取一次NTC值,兼作后四位数码管闪烁计时来源
- {
- NTC_wendu = Temp_Cal( ADC_Read(3)); //NTC温度读取采用冲哥STC32G视频教程第19集NTC温度采集程序
- VCC = 4096l*BGV_Read()/BGV_ADC_Read; //MCU电压计算
- SEG_Show(VCC,NTC_wendu); //数码管显示,前四位显示电压,后四位显示NTC温度
- if(Set_t) //按下设置键,标志位Set_t置一,后四位数码管闪烁
- blink = ~blink;
- }
复制代码
- void SEG_Task(void)
- {
-
- if( Seg_no ==0 )
- {
- Display_Seg( SEG_NUM[passward[0]]+0x80 , ~T_NUM[0]); //+0x80是为了添加小数点,编译会出现警告C188,可忽略
- }
- else if( Seg_no ==1 )
- {
- Display_Seg( SEG_NUM[passward[1]] , ~T_NUM[1]);
- }
- else if( Seg_no ==2 )
- {
- Display_Seg( SEG_NUM[passward[2]] , ~T_NUM[2]);
- }
- else if( Seg_no ==3 )
- {
- Display_Seg( SEG_NUM[passward[3]] , ~T_NUM[3]);
- }
- else if( Seg_no ==4 )
- {
- if(passward[4]==0)
- Display_Seg( SEG_NUM[17] , ~T_NUM[0]); //第一位如果是零,则消隐
- else
- Display_Seg( SEG_NUM[passward[4]], ~T_NUM[4]);
- }
- else if( Seg_no ==5 )
- {
- Display_Seg( SEG_NUM[passward[5]] , ~T_NUM[5]);
- }
- else if( Seg_no ==6 )
- {
- if(Set_t ) //按下设置键,后四位数码管闪烁
- {
- if(!blink)
- Display_Seg( 0 , ~T_NUM[6]);
- else
- Display_Seg( SEG_NUM[passward[6]]+0x80 , ~T_NUM[6]);
- }
- else if(NTC_wendu < BJ_wendu )
- Display_Seg( SEG_NUM[passward[6]]+0x80 , ~T_NUM[6]);
- else
- Display_Seg( SEG_NUM[passward[6]] , ~T_NUM[6]);
- }
- else if( Seg_no ==7 )
- {
- Display_Seg( SEG_NUM[passward[7]] , ~T_NUM[7]);
- }
- else
- {
-
- }
- Seg_no ++;
- if( Seg_no>7 )
- Seg_no=0;
- }
-
-
- void SEG_Show(u16 vol,u16 wendu)
- {
- u8 i;
- for(i=0;i<4;i++)
- {
- if(Set_t) //按下设置键,后四位数码管闪烁
- {
- if(blink)
- passward[7-i] = 17;
- else
- passward[7-i] = baojing[i];
-
- }
- else
- {
-
- if(wendu > BJ_wendu) //如果温度高于预警温度值,则显示“----”
- passward[7-i] = 16;
- else
- {
- passward[7-i] = wendu%10;;
- wendu /= 10;
- }
- }
- }
- for(i=4;i<8;i++)
- {
- passward[7-i] = vol%10;
- vol /= 10;
- }
- }
复制代码
demo.zip
(252.02 KB, 下载次数: 135)
|