【C51单片机】8-温湿度监测显示系统(LCD1602、温湿度传感器、IIC、OLED)
1.LCD1602概述
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)
//硬件接线
//电源
VSS -- GND
VDD -- 5V
//对比度
VO -- GND
//控制线
RS -- P1.0
RW -- P1.1
E -- P1.4
//背光灯
A -- 5V
K -- GND
//数据
D0到D7 -- P0.到P0.7
#include "reg52.h" #include "intrins.h" #define databuffer P0 sbit RS = P1^0; sbit RW = P1^1; sbit EN = P1^4;void check_busy() {char tmp = 0x80;databuffer = 0x80;while(tmp & 0x80){RS = 0;RW = 1;EN = 0;_nop_();EN = 1;_nop_();_nop_();tmp = databuffer;EN = 0;_nop_();} }void Write_Cmd(char cmd) {check_busy();RS = 0;RW = 0;EN = 0;_nop_();databuffer = cmd;_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_();}void Write_Data(char datashow) {check_busy();RS = 1;RW = 0;EN = 0;_nop_();databuffer = datashow;_nop_();EN = 1;_nop_();_nop_();EN = 0;_nop_(); }void Delay15ms() //@11.0592MHz {unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i); } void Delay5ms() //@11.0592MHz {unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i); }void LCD1602_init() {//(1)延时 15ms Delay15ms();//(2)写指令 38H(不检测忙信号) Write_Cmd(0x38);//(3)延时 5ms Delay5ms();//(4)以后每次写指令,读/写数据操作均需要检测忙信号 //(5)写指令 38H:显示模式设置 Write_Cmd(0x38);//(6)写指令 08H:显示关闭 Write_Cmd(0x08);//(7)写指令 01H:显示清屏Write_Cmd(0x01);//(8)写指令 06H:显示光标移动设置Write_Cmd(0x06);//(9)写指令 0CH:显示开及光标设置Write_Cmd(0x0c);}void LCD1602_showLine(char row,char col, char *string) {switch(row){case 1:Write_Cmd(0x80+col);while(*string){Write_Data(*string);string++;}break;case 2:Write_Cmd(0x80+0x40+col);while(*string){Write_Data(*string);string++;}break;} }void main() {char cmd = 0x80 + 0x05;char datashow = 'C';LCD1602_init();//Write_Cmd(cmd);//Write_Data(datashow);LCD1602_showLine(1,5,"NO 2");LCD1602_showLine(2,1,"CLC homesome"); }