標(biāo)題:
單片機(jī)pwm+adc+顯示程序
[打印本頁]
作者:
wangfushou
時間:
2019-11-11 11:24
標(biāo)題:
單片機(jī)pwm+adc+顯示程序
#include "lcd1602.h"
#include "key.h"
#include "pwm.h"
#include "adc.h"
#include "gpio.h"
uint8 code table1[]="set:"; //要顯示的內(nèi)容1放入數(shù)組table1 cold,warm
uint8 code table11[]="cold";
uint8 code table12[]="warm";
uint8 code table2[]="now:"; //要顯示的內(nèi)容2放入數(shù)組table2
uint8 set_temperature=20,now_temperature=0; //設(shè)定溫度默認(rèn)22度
uint8 set_shi=0,set_ge=0,now_shi=0,now_ge=0;
uint8 cold_flag=1,warm_flag=0; //默認(rèn)制熱模式
uint8 duty=0;
void adc_handle()
{
uint8 i;
now_temperature=Get_ADC10bitResult(7);//讀取p1.7口adc轉(zhuǎn)換的值
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列開始顯示內(nèi)容1
set_shi=set_temperature/10+'0'; //數(shù)字轉(zhuǎn)化為字符
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); //實(shí)際為P0.6口 輸出電壓3.3*(1-前數(shù)/后數(shù))
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; //計(jì)算現(xiàn)在的誤差
now_error=error; //保存現(xiàn)在的誤差
duty=251-((now_temperature-set_temperature)*25+(now_error-last_error)*0.8);
PWMx_SetPwmWide(PWM7_ID,duty, 0x00FA); //實(shí)際為P0.6口 輸出電壓3.3*(1-前數(shù)/后數(shù))
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); //實(shí)際為P0.6口 輸出電壓3.3*(1-前數(shù)/后數(shù))
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; //計(jì)算現(xiàn)在的誤差
now_error=error; //保存現(xiàn)在的誤差
duty=251-((set_temperature-now_temperature)*25+(now_error-last_error)*0.8);
PWMx_SetPwmWide(PWM7_ID,249, 0x00FA); //實(shí)際為P0.6口 輸出電壓3.3*(1-前數(shù)/后數(shù))
PWMx_SetPwmWide(PWM6_ID,duty, 0x00FA);
}
}
DisplayListChar(0, 1, table2); //從第二行第9列開始顯示內(nèi)容2
adc_handle(); //adc處理函數(shù)
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); //實(shí)際為P0.6口 輸出電壓3.3*(1-前數(shù)/后數(shù))
PWMx_SetPwmWide(PWM6_ID,249, 0x00FA); //輸出電壓為0
while(1)
{
scan_key(); //按鍵掃描
display(); //顯示
}
}
復(fù)制代碼
15 溫度傳感器.rar
2019-11-11 11:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
119.25 KB, 下載次數(shù): 41, 下載積分: 黑幣 -5
作者:
zyx@
時間:
2020-8-12 22:07
沒仿真,都不知都功能能不能實(shí)現(xiàn)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1