12864LCD上显示温湿度Word格式文档下载.docx
- 文档编号:14487248
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:20
- 大小:19.43KB
12864LCD上显示温湿度Word格式文档下载.docx
《12864LCD上显示温湿度Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《12864LCD上显示温湿度Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
voiddelay(uinta);
//延时函数
voidLCD_init();
//LCD初始化程序
voidwrite_cmd(ucharcmd);
//写指令
voidwrite_data(uchardat);
//写数据
bitcheck_busy();
//检测LCD忙信号
//voidclear_gcrom();
//清除GCROM
voiddelay1();
//10us延时
voidlcd_dis_code(uintcmd_addr,ucharnum,uchardis[]);
//显示函数
voidlcd_pos(unsignedcharX,unsignedcharY);
//LCD显示位置计算
ucharcodelcd[]={"
温湿度检测系统"
};
ucharcodelcd1[]={"
温度:
"
ucharcodelcd2[]={"
湿度:
ucharcodelcd3[]={"
℃"
ucharcodelcd4[]={"
%RH"
ucharstr1[]={"
"
ucharstr2[]={"
voidmain()
{
uchark,j;
LCD_init();
lcd_dis_code(0x80,16,lcd);
lcd_dis_code(0x88,9,lcd1);
lcd_dis_code(0x98,9,lcd2);
lcd_dis_code(0x8e,2,lcd3);
lcd_dis_code(0x9e,5,lcd4);
while
(1)
{
read_io();
//读取温湿度数据
//clear_gcrom();
//湿度
for(k=0;
k<
2;
k++)
{
lcd_pos(4,k+4);
write_data(str1[k]);
}
//温度
for(j=0;
j<
j++)
lcd_pos(3,j+4);
write_data(str2[j]);
delay(500);
}
}
voiddelay1()//延时10us
unsignedchari;
for(i=0;
i<
3;
i++);
voidlcd_pos(unsignedcharX,unsignedcharY)
{
unsignedcharpos;
if(X==1)
{pos=0x80;
}
elseif(X==2)
{pos=0x90;
elseif(X==3)
{pos=0x88;
else
{pos=0x98;
write_cmd(Y|pos);
//数据指针=80+地址变量
/**********************DHT11模块**********************/
ucharreceive_byte()//接收一个字节
uchari,temp;
i<
8;
i++)
count=2;
while((!
io)&
&
count++)//等待50us低电平结束,并防止死循环
temp=0;
delay1();
if(io==1)
{
temp=1;
count=2;
while(io&
count++);
temp=0;
data_byte<
<
=1;
data_byte|=temp;
return(data_byte);
voidread_io()//开始信号,读数据并校验
io=0;
delay(18);
//主机拉低18ms
io=1;
//DATA总线由上拉电阻拉高主机延时20us
delay1();
//主机设置为输入高电平,判断从机响应信号
if(!
io)
{
io)&
count++);
//判断DHT11发出80us低电平响应信号是否结束
while(io&
//判断DHT11拉高总线80us高电平是否结束
RH_temp=receive_byte();
RL_temp=receive_byte();
TH_temp=receive_byte();
TL_temp=receive_byte();
CK_temp=receive_byte();
io=1;
num=(RH_temp+RL_temp+TH_temp+TL_temp);
//数据校验
if(num==CK_temp)
RH_data=RH_temp;
RL_data=RL_temp;
TH_data=TH_temp;
TL_data=TL_temp;
CK_data=CK_temp;
//湿度整数部分
str1[0]=(char)(0x30+RH_data/10);
str1[1]=(char)(0x30+RH_data%10);
//温度整数部分
str2[0]=(char)(0x30+TH_data/10);
str2[1]=(char)(0x30+TH_data%10);
/**********************END**********************/
/**********************12864模块程序**********************/
/*voidclear_gcrom()
uchari,j,k;
lcd_x=0x80;
lcd_y=0x80;
write_cmd(0x34);
for(i=0;
i<
2;
i++)//上下两屏幕
for(j=0;
j<
32;
write_cmd(lcd_y+j);
write_cmd(lcd_x);
for(k=0;
k<
16;
{
write_data(0x00);
}
lcd_x=0x88;
write_cmd(0x36);
write_cmd(0x30);
}*/
voidlcd_dis_code(uintcmd_addr,ucharnum,uchardis[])
uinti;
write_cmd(cmd_addr);
num;
write_data(dis[i]);
voidLCD_init()
PSB=1;
RST=0;
delay(5);
RST=1;
//扩充指令
//基本指令
write_cmd(0x0c);
//显示开关光标
write_cmd(0x01);
//清屏
bitcheck_busy()
bittemp;
RS=0;
RW=1;
EN=1;
temp=(bit)(P0&
0x80);
//按位与操作
EN=0;
return(temp);
voidwrite_cmd(ucharcmd)
while(check_busy());
RW=0;
P0=cmd;
voidwrite_data(uchardat)
RS=1;
P0=dat;
voiddelay(uinta)
uchari;
while(a--)
for(i=0;
113;
第二种编程方式,其实大体都差不了多少
#include
intrins.h>
/********************************************************
宏定义
********************************************************/
#define
uint
unsigned
int
uchar
char
noACK
0
ACK
1
STATUS_REG_W
0x06
STATUS_REG_R
0x07
MEASURE_TEMP
0x03
MEASURE_HUMI
0x05
RESET
0x1e
enum
{TEMP,HUMI}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 LCD 显示 温湿度