简单温度控制完整程序.docx
- 文档编号:27289138
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:9
- 大小:15.84KB
简单温度控制完整程序.docx
《简单温度控制完整程序.docx》由会员分享,可在线阅读,更多相关《简单温度控制完整程序.docx(9页珍藏版)》请在冰豆网上搜索。
简单温度控制完整程序
简单温度控制完整程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P3^4;
sbitrw=P3^5;
sbitep=P3^7;
unsignedintset1=30,set2=10;
unsignedcharflag=0;
sbitDQ=P1^7;//定义通信端口
sbitfengmingqi=P1^1;
sbitjidianqi=P1^5;
codeucharmayuan[]={'0','1','2','3','4','5','6','7','8','9'};
codeucharaa[]={"wenduis:
"};
codeucharbb[]={"sheding:
"};
typedefbitBOOL;
unsignedchark,dat_wr[8],dat_rd[8];
voidputchar(ucharweizhi,ucharda);
voiddelay(uchar);
voidlcd_wcmd(uchar);
BOOLlcd_bz();
voidlcd_pos(uchar);
voidlcd_wdat(uchar);
voiddisplay(uchar,uchar*);
voidlcd_init();
voidlongdelay(uchars);
voidkeyscan(void);
BOOLlcd_bz()
{//测试LCD忙碌状态
BOOLresult;
rs=0;
rw=1;
ep=1;
result=(BOOL)(P2&0x80);
ep=0;
returnresult;
}
voidlcd_wcmd(ucharcmd)
{//写入指令数据到LCD
while(lcd_bz());
rs=0;
rw=0;
ep=0;
P2=cmd;
ep=1;
ep=0;
}
voidlcd_pos(ucharpos)
{//设定显示位置
lcd_wcmd(pos|0x80);
}
voidlcd_wdat(uchardat)
{//写入字符显示数据到LCD
while(lcd_bz());
rs=1;
rw=0;
ep=0;
P2=dat;
ep=1;
ep=0;
}
voidlcd_init()
{//LCD初始化设定
lcd_wcmd(0x38);//functionset
delay
(1);
lcd_wcmd(0x38);//functionset
delay
(1);
lcd_wcmd(0x08);//displayon/off
delay
(1);
lcd_wcmd(0x01);//清除LCD的显示内容
delay
(1);
lcd_wcmd(0x06);//entrymodeset
delay
(1);
lcd_wcmd(0x0c);//entrymodeset
delay
(1);
}
/*---------------
函数名称:
display()
功能:
在LCD上显示数组的数据
说明:
先写显示地址,后写显示数据
调用:
lcd_wcmd(),lcd_pos()
入口参数:
pos写入的位置,q指向要写入的数据所在的数组
返回值:
无
----------------*/
voiddisplay(ucharpos,uchar*q)
{
uchari;
//lcd_wcmd(0x01);//clear
//delay(10);
lcd_pos(pos);
for(i=0;i<9;i++)
{
lcd_wdat(*q);
q++;
//longdelay
(2);
}
}
voidputchar(ucharweizhi,ucharda)
{
delay
(2);
lcd_pos(weizhi);
lcd_wdat(da);
}
//延时函数
voiddelay(ucharms)//延时子程序
{uchari;
while(ms--)
{
for(i=0;i<250;i++);
}
}
voiddelay1(uchara)
{
while(a--);
}
voiddelay2(unsignedinti)//延时函数
{
while(i--);
}
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay2(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay2(80);//精确延时大于480us
DQ=1;//拉高总线
delay2(10);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay2(5);
DQ=1;
//return(x);
}
/******************************************************************************************/
//读一个字节
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=1;
delay2(5);
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay2(5);
DQ=1;
}
return(dat);
}
/************************************************************************************************/
//写一个字节
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=1;
delay2(5);
DQ=0;
DQ=dat&0x01;
delay2(5);
DQ=1;
dat>>=1;
}
delay(5);
}
/********************************/
//读取温度
unsignedintReadTemperature(void)
{
unsignedinta=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
delay2(200);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();//读低八位数据
b=ReadOneChar();//读最高四位,一共十二位
b<<=8;
//b<<=4;
//b+=(a&0xf0)>>4;//b与a组成最高的八位c,算时舍去了最低四位,只保留5到12位(c*2*2*2*2*0.0625=c*1=c),所以c的值就是实测温度
t=b+a;
return(t);
}
main()
{
uintbai,shi,ge;
floatv;
intj;
unsignedinti;
fengmingqi=1;
jidianqi=1;
delay(10);
lcd_init();//初始化LCD
display(0x00,aa);
display(0x40,bb);
while
(1)
{
i=ReadTemperature();//读温度
i=i>>4;
bai=i/100;
shi=i%100/10;
ge=i%10;
putchar(0x0b,mayuan[bai]);
putchar(0x0c,mayuan[shi]);
putchar(0x0d,mayuan[ge]);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 温度 控制 完整 程序