資源簡(jiǎn)介
這筆?者?的?一?個(gè)?課?程?設(shè)?計(jì)?,?該?作?品?是?基?于?5?1?單?片?機(jī)?的?P?I?D?調(diào)?溫?系?統(tǒng)?,?使?用?熱?得?快?作?為?加?熱?器?,?采?用?防?水?1?8?B?2?0?作?為?水?溫?檢?測(cè)?器?,?移?植?了?P?I?D?算?法?。壓縮包是完整的工程,包括源代碼、論文、原理圖(AD14)。

代碼片段和文件信息
#include“l(fā)cd.h“
/*******************************************************************************
*?函數(shù)名?????????:?Delay1us
*?函數(shù)功能 ???:?延時(shí)函數(shù),延時(shí)1us
*?輸入???????????:?a
*?輸出????????? ?:?無(wú)
*******************************************************************************/
float?realtmp=0;
void?Delay1us(unsigned?int?a)
{
unsigned?int?bc;
for(c=a;c>0;c--)
for(b=110;b>0;b--);
}
/*******************************************************************************
*?函數(shù)名?????????:?LcdWriteCom
*?函數(shù)功能 ???:?向LCD寫入一個(gè)字節(jié)的命令
*?輸入???????????:?com
*?輸出????????? ?:?無(wú)
*******************************************************************************/
void?LcdWriteCom(unsigned?char?com) ??//寫入命令
{
RS=0;
RW=0;
GPIO_LCD=com;
Delay1us(10);
LCDE=1;
Delay1us(10);
LCDE=0;
}
/*******************************************************************************
*?函數(shù)名?????????:?LcdWriteData
*?函數(shù)功能 ???:?向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
*?輸入???????????:?dat
*?輸出????????? ?:?無(wú)
*******************************************************************************/ ???
???
void?LcdWriteData(unsigned?char?dat) //寫入數(shù)據(jù)
{
RS=1;
RW=0;
GPIO_LCD=dat;
Delay1us(10);
LCDE=1;
Delay1us(10);
LCDE=0;
}
/*******************************************************************************
*?函數(shù)名?????????:?LcdInit()
*?函數(shù)功能 ???:?初始化LCD屏
*?輸入???????????:?無(wú)
*?輸出????????? ?:?無(wú)
*******************************************************************************/ ???
void?LcdInit() ??//LCD初始化子程序
{
? LcdWriteCom(0x38);??//開(kāi)顯示
LcdWriteCom(0x0c);??//開(kāi)顯示不顯示光標(biāo)
LcdWriteCom(0x06);??//寫一個(gè)指針加1
LcdWriteCom(0x01);??//清屏
LcdWriteCom(0x80);??//設(shè)置數(shù)據(jù)指針起點(diǎn)
}
void?LcdDisplay(int?temp)? ?//lcd顯示
{
????
??unsigned?char?datas[]?=?{0?0?0?0?0};?//定義數(shù)組
float?tp;
?//初始化LCD
if(temp0) //當(dāng)溫度值為負(fù)數(shù)
??{
?? LcdWriteCom(0x80); //寫地址?80表示初始地址
????LcdWriteData(‘-‘);?? //顯示負(fù)
//因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
//后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
//算加上0.5,還是在小數(shù)點(diǎn)后面。
?
??}
??else
??{
?? LcdWriteCom(0x80); //寫地址?80表示初始地址
????LcdWriteData(‘+‘);? //顯示正
tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
//如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
temp=tp*0.0625*100+0.5;
//留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
//后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
//算加上0.5,還是在小數(shù)點(diǎn)后面。
realtmp=(float)temp/100;
??}
datas[0]?=?temp?/?10000;
??datas[1]?=?temp?%?10000?/?1000;
??datas[2]?=?temp?%?1000?/?100;
??datas[3]?=?temp?%?100?/?10;
??datas[4]?=?temp?%?10;
?
LcdWriteCom(0x82); ??//寫地址?80表示初始地址
??LcdWriteData(‘0‘+datas[0]);?//百位?
??LcdWriteCom(0x83); ?//寫地址?80表示初始地址
??LcdWriteData(‘0‘+datas[1]);?//十位
LcdWriteCom(0x84); //寫地址?80表示初始地址
??LcdWriteData(‘0‘+datas[2]);?//個(gè)位?
LcdWriteCom(0x85); //寫地址?80表示初始地址
??LcdWriteData(‘.‘);? //顯示?‘.’
LcdWriteCom(0x86); ?//寫地址?80表示初始地址
??LcdWriteData(‘0‘+datas[3]);?//顯示小數(shù)點(diǎn)??
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????402??2016-01-07?02:30??pid-temper\code\header\lcd.h
?????文件????????687??2016-01-07?02:13??pid-temper\code\header\PID.H
?????文件????????314??2016-01-06?23:24??pid-temper\code\header\temp.h
?????文件??????11458??2016-01-07?02:41??pid-temper\code\output\lcd.obj
?????文件???????9204??2016-01-07?02:41??pid-temper\code\output\main.obj
?????文件??????10786??2016-01-07?02:41??pid-temper\code\output\pid.obj
?????文件??????33876??2016-01-07?02:41??pid-temper\code\output\pro
?????文件??????11866??2016-01-07?02:41??pid-temper\code\output\pro.hex
?????文件????????155??2016-01-07?02:41??pid-temper\code\output\pro.lnp
?????文件????????185??2016-01-08?12:00??pid-temper\code\output\pro.plg
?????文件????????789??2016-01-07?02:41??pid-temper\code\output\STARTUP.obj
?????文件???????5751??2016-01-07?02:41??pid-temper\code\output\temp.obj
?????文件???????6027??2016-01-07?02:31??pid-temper\code\prj\lcd.c
?????文件??????11430??2016-01-07?02:41??pid-temper\code\prj\lcd.LST
?????文件??????11422??2016-01-07?02:41??pid-temper\code\prj\lcd.OBJ
?????文件???????3130??2016-01-08?02:43??pid-temper\code\prj\main.c
?????文件???????7488??2016-01-07?02:41??pid-temper\code\prj\main.LST
?????文件???????9167??2016-01-07?02:41??pid-temper\code\prj\main.OBJ
?????文件???????2870??2016-01-07?02:39??pid-temper\code\prj\pid.c
?????文件???????5975??2016-01-07?02:41??pid-temper\code\prj\pid.LST
?????文件??????10750??2016-01-07?02:41??pid-temper\code\prj\pid.OBJ
?????文件??????33610??2016-01-07?02:41??pid-temper\code\prj\pro
?????文件??????11866??2016-01-07?02:41??pid-temper\code\prj\pro.hex
?????文件?????????77??2016-01-07?02:41??pid-temper\code\prj\pro.lnp
?????文件??????32607??2016-01-07?02:41??pid-temper\code\prj\pro.M51
?????文件????????917??2016-01-07?02:44??pid-temper\code\prj\pro.plg
?????文件??????72899??2016-01-06?02:45??pid-temper\code\prj\pro.uvgui.Administrator
?????文件??????72899??2016-01-06?02:00??pid-temper\code\prj\pro.uvgui_Administrator.bak
????.......?????58714??2016-01-08?12:04??pid-temper\code\prj\pro.uvopt
????.......?????13893??2016-01-07?02:44??pid-temper\code\prj\pro.uvproj
............此處省略46個(gè)文件信息
評(píng)論
共有 條評(píng)論