标题:
单片机pwm+adc+显示程序
[打印本页]
作者:
wangfushou
时间:
2019-11-11 11:24
标题:
单片机pwm+adc+显示程序
#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
作者:
zyx@
时间:
2020-8-12 22:07
没仿真,都不知都功能能不能实现
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1