|
- #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(); //显示
- }
- }
复制代码
|
|