|
- #include "lcd1602.h"
- #include "key.h"
- #include "pwm.h"
- #include "adc.h"
- #include "gpio.h"
- uint8 code table1[]="set:"; //要顯示的內容1放入數組table1 cold,warm
- uint8 code table11[]="cold";
- uint8 code table12[]="warm";
- uint8 code table2[]="now:"; //要顯示的內容2放入數組table2
- uint8 set_temperature=20,now_temperature=0; //設定溫度默認22度
- uint8 set_shi=0,set_ge=0,now_shi=0,now_ge=0;
- uint8 cold_flag=1,warm_flag=0; //默認制熱模式
- uint8 duty=0;
- void adc_handle()
- {
- uint8 i;
- now_temperature=Get_ADC10bitResult(7);//讀取p1.7口adc轉換的值
- for(i=1;i<50;i++)
- {
- if(now_temperature>=i*15&&now_temperature<=(i+1)*15)
- now_temperature=30-i;
- }
- }
- void display()
- {
- DisplayListChar(0, 0, table1); //從第一行第1列開始顯示內容1
- set_shi=set_temperature/10+'0'; //數字轉化為字符
- set_ge=set_temperature%10+'0';
- DisplayOneChar(4,0,set_shi); //顯示一個字符
- DisplayOneChar(5,0,set_ge);
- if(cold_flag==1) //顯示“cold”
- {
- DisplayListChar(9, 0, table11);
- if(set_temperature>=now_temperature)
- {
- PWMx_SetPwmWide(PWM7_ID,249, 0x00FA); //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
- PWMx_SetPwmWide(PWM6_ID,249, 0x00FA); //輸出電壓為0
- }
- if(set_temperature<now_temperature)
- {
- signed int error=0,last_error=0,now_error=0;
- last_error=now_error; //保存上一次的誤差
- error=now_temperature-set_temperature; //計算現在的誤差
- now_error=error; //保存現在的誤差
- duty=251-((now_temperature-set_temperature)*25+(now_error-last_error)*0.8);
- PWMx_SetPwmWide(PWM7_ID,duty, 0x00FA); //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
- PWMx_SetPwmWide(PWM6_ID,249, 0x00FA); //輸出電壓為0
- }
- }
-
- if(warm_flag==1)
- {
- DisplayListChar(9, 0, table12);
- if(set_temperature<=now_temperature)
- {
- PWMx_SetPwmWide(PWM7_ID,249, 0x00FA); //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
- PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);
- }
- if(set_temperature>now_temperature)
- {
- signed int error=0,last_error=0,now_error=0;
- last_error=now_error; //保存上一次的誤差
- error=set_temperature-now_temperature; //計算現在的誤差
- now_error=error; //保存現在的誤差
- duty=251-((set_temperature-now_temperature)*25+(now_error-last_error)*0.8);
- PWMx_SetPwmWide(PWM7_ID,249, 0x00FA); //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
- PWMx_SetPwmWide(PWM6_ID,duty, 0x00FA);
- }
- }
- DisplayListChar(0, 1, table2); //從第二行第9列開始顯示內容2
- adc_handle(); //adc處理函數
- now_shi=now_temperature/10+'0';
- now_ge=now_temperature%10+'0';
- DisplayOneChar(4,1,now_shi);
- DisplayOneChar(5,1,now_ge);
- }
- int main()
- {
- lcd_init(); //液晶初始化
- key_init(); //按鍵初始化
- PWM_config(); //pwm配置
- ADC_config(); //ADC初始化
- PWMx_SetPwmWide(PWM7_ID,249, 0x00FA); //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
- PWMx_SetPwmWide(PWM6_ID,249, 0x00FA); //輸出電壓為0
- while(1)
- {
- scan_key(); //按鍵掃描
- display(); //顯示
- }
- }
復制代碼
|
-
-
15 溫度傳感器.rar
2019-11-11 11:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
119.25 KB, 下載次數: 41, 下載積分: 黑幣 -5
|