📄 lcd.h
字号:
#ifndef _LCD_H // 防止LCD.h被重复引用
#define _LCD_H
#include <reg52.h>
#include <intrins.h>
#include "common.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
void delay(BYTE ms)
{ // 延时子程序
BYTE i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
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;
}
lcd_pos(BYTE pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}
lcd_wdat(BYTE dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x3c); //
delay(1);
lcd_wcmd(0x0c); //
delay(1);
lcd_wcmd(0x06); //
delay(1);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(1);
}
/*----------------------------------------------------------------------------------
液晶显示函数:lcd_display()&&char_display()
----------------------------------------------------------------------------------*/
void lcd_display(uchar pos,uchar *dis)
{
uchar *p;
lcd_pos(pos);
p=dis;
while(*p!=0)
{lcd_wdat(*p);
p++;
}
}
void char_display(uchar pos,uchar val)
{
lcd_pos(pos);
lcd_wdat(val);
}
/*----------------------------------------------------------------------------------
年显示函数: year_display()
----------------------------------------------------------------------------------*/
void year_display(uchar *rbuf)
{
uchar gw,sw;
gw=(rbuf[5]&0x0f)+0x30;
sw=((rbuf[5]>>4)&0x0f)+0x30;
char_display(0x03,sw);
char_display(0x04,gw);
char_display(0x05,0x2e);
}
/*----------------------------------------------------------------------------------
月显示函数: mon_display()
----------------------------------------------------------------------------------*/
void mon_display(uchar *rbuf)
{
uchar gw,sw;
rbuf[4]=rbuf[4]&0x1f;
gw=(rbuf[4]&0x0f)+0x30;
sw=((rbuf[4]>>4)&0x0f)+0x30;
char_display(0x06,sw);
char_display(0x07,gw);
char_display(0x08,0x2e);
}
/*----------------------------------------------------------------------------------
日显示函数: day_display()
----------------------------------------------------------------------------------*/
void day_display(uchar *rbuf)
{
uchar gw,sw;
rbuf[2]=rbuf[2]&0x3f;
gw=(rbuf[2]&0x0f)+0x30;
sw=((rbuf[2]>>4)&0x0f)+0x30;
char_display(0x09,sw);
char_display(0x0a,gw);
}
/*----------------------------------------------------------------------------------
星期显示函数: week_display()
----------------------------------------------------------------------------------*/
void week_display(uchar *rbuf)
{
rbuf[3]=rbuf[3]&0x07;
switch(rbuf[3])
{
case 0x00:lcd_display(0x0c,Sun);break;
case 0x01:lcd_display(0x0c,Mon);break;
case 0x02:lcd_display(0x0c,Tue);break;
case 0x03:lcd_display(0x0c,Wed);break;
case 0x04:lcd_display(0x0c,Thu);break;
case 0x05:lcd_display(0x0c,Fri);break;
case 0x06:lcd_display(0x0c,Sat);break;
default:break;
}
}
/*----------------------------------------------------------------------------------
小时显示函数: hour_display()
----------------------------------------------------------------------------------*/
void hour_display(uchar *rbuf)
{
uchar gw,sw;
rbuf[1]=rbuf[1]&0x3f;
gw=(rbuf[1]&0x0f)+0x30;
sw=((rbuf[1]>>4)&0x0f)+0x30;
char_display(0x4a,sw);
char_display(0x4b,gw);
char_display(0x4c,0x3a);
}
/*----------------------------------------------------------------------------------
分显示函数:min_display()
----------------------------------------------------------------------------------*/
void min_display(uchar *rbuf)
{
uchar gw,sw;
rbuf[0]=rbuf[0]&0x7f;
gw=(rbuf[0]&0x0f)+0x30;
sw=((rbuf[0]>>4)&0x0f)+0x30;
char_display(0x4d,sw);
char_display(0x4e,gw);
}
/*----------------------------------------------------------------------------------
整体时间显示函数:time_display()
----------------------------------------------------------------------------------*/
void time_display(uchar *rbuf)
{
char_display(0x01,0x32);
char_display(0x02,0x30);
year_display(rbuf);
mon_display(rbuf);
week_display(rbuf);
day_display(rbuf);
hour_display(rbuf);
min_display(rbuf);
}
/*----------------------------------------------------------------------------------
报警时间显示函数:alarm_display()
----------------------------------------------------------------------------------*/
void alarm_display(uchar *abuf)
{ switch(AlarmCount)
{case 0:abuf[AlarmCount]&=0x7f;break;
case 1:abuf[AlarmCount]&=0x3f;break;
case 2:abuf[AlarmCount]&=0x3f;break;
case 3:abuf[AlarmCount]&=0x07;break;
default:break;
}
data1=(abuf[AlarmCount]&0xf0)>>4; //十位
data2=abuf[AlarmCount]&0x0f; //个位
char_display(0x42,data1+0x30);
char_display(0x43,data2+0x30);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -