📄 lcd.c
字号:
#include <at89x52.h>
#include "lcd.h"
sbit dc = 0x96; //P1.6 LCD的RS pin7
sbit rw = 0x95; //P1.5 LCD的R/W pin6
sbit cs = 0x94; //P1.4 LCD的E pin5
sfr lcdbus = 0x80; //P0 LCD的数据 D0 = P0.0
unsigned char displayPosition = 0;
unsigned char DDRAMAddress = 0;
void softNop(void){}
bit lcd_checkBusy(void)
{
unsigned char lcdstate;
dc = 0;
rw = 1;
cs = 1;
softNop();
lcdstate = lcdbus;
cs = 0;
return((bit)(lcdstate & 0x80));
}
void lcd_WCmd(unsigned char lcdCmd) //write LCD command
{
while(lcd_checkBusy());
lcdbus = lcdCmd;
dc = 0;
rw = 0;
cs = 1;
softNop();
cs = 0;
lcdbus = 0xff;
}
void lcd_WData(unsigned char lcddata)
{
while(lcd_checkBusy());
lcdbus = lcddata;
dc = 1; //dc = 1 为数据,=0 为命令
rw = 0; //rw = 1 为读,=0 为写
cs = 1; //cs = 1 选通
softNop();
cs = 0;
lcdbus = 0xff;
}
//---------------------------------------------------------
void lcd_setDDRAMAddress(unsigned char DDRAMaddr)
{
DDRAMAddress = DDRAMaddr;
lcd_WCmd(DDRAMaddr | 0x80);
}
void lcd_cls(void)
{
lcd_WCmd(0x01);
}
void lcd_string16(unsigned char position,unsigned char *str)
{
unsigned char i = 0;
if(position >= 16) position = 0;
if(position < 8)
{
lcd_setDDRAMAddress(position);
}
if(position >=8)
{
position = position - 8;
position = position + 0x40;
lcd_setDDRAMAddress(position);
}
DDRAMAddress = position;
while (str[i] !=0)
{
if(DDRAMAddress == 8) lcd_setDDRAMAddress(0x40);
if(DDRAMAddress == 0x48)
{
lcd_setDDRAMAddress(0);
DDRAMAddress = 0;
}
DDRAMAddress ++;
lcd_WData(str[i]);
i ++;
}
}
void lcd_init(void)
{
lcd_WCmd(0x38); //8 bit,2 line 5*7
lcd_WCmd(0x0c); //
lcd_WCmd(0x01); //clear display
displayPosition = 0;
DDRAMAddress = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -