//51 单片机控制温湿度传感器DHT11然后在LCD1602 上显示当前的温湿度及单位其中湿度在第一行显示温度在第二行显示。单片机为 YL-9 最小系统。 # include # include typedef unsigned char BYTE; typedef unsigned int WORD; #define uint unsigned int #define uchar unsigned char sbit io=P1^0;//dht11data 端接单片机的P1^0 口// sbit rw=P2^1;//一下三行是设置 lcd1602 的使能端// sbit rs=P2^0; sbit ep=P2^2; typedef bit BOOL;//此声明一个布尔型变量即真或假// uchar data_byte; uchar RH,RL,TH,TL; //***************延时函数************************************* void delay(uchar ms) //延时模块// { uchar i; while(ms--) for(i=0;i<100;i++); } void delay1()//一个 for 循环大概需要 8 个多机器周期一个机器周期为 1us晶振为 12MHz也就是说本函数延时 8us 多此延时函数必须德稍微精确一点 { uchar i; for(i=0;i<1;i++); } //*************************************************************** //lcd 模块// BOOL lcd_bz()//测试lcd 忙碌状态返回值为布尔型数值真或假'1'.'0' { BOOL result; rs=0; // 读忙信号 rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P2&0x80); ep=0; result ; } void write_cmd(uchar cmd)//写指令// { while (lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd ; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; } void write_addr(uchar addr)//写地址// { write_cmd(addr|0x80);//LCD 第一行的首地址为 0x80第二行的首地址为 0x80+0x40=0xc0 } void write_byte(uchar dat) //写字节// { while (lcd_bz()); rs=1; rw=0; ep=0; _nop_(); _nop_(); P0=dat ; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; } void lcd_init() //lcd 初始化// { write_cmd(0x38);//设置LCD 两行显示一个数据由 5*7 点阵表示,数据由 8 跟线传输 delay(1); write_cmd(0x0c);//清除屏幕显示 delay(1); write_cmd(0x06);//设定输入方式增量不移位 delay(1); write_cmd(0x01);//开整体显示关光标不闪烁 delay(1...