?? lcd1602.h
字號:
#ifndef LCD1602_2009_3
#define LCD1602_2009_3
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS = P2 ^ 0;
sbit LCD_RW = P2 ^ 1;
sbit LCD_E = P2 ^ 2;
#define LCD_DATA P0
uchar code LcdBuf[]= { //自定義漢字 5X7;最大能存儲64個字節
0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00,
0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x00,
};
void delayms(uchar ms) // 延時子程序
{
uchar i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
bit lcd_busy()
{ // 測試LCD忙碌狀態
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result =(LCD_DATA & 0x80);
LCD_E = 0;
return result;
}
void WriteCommand(uchar wdata)
{
while(lcd_busy());
LCD_DATA=wdata;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delayms(5);
LCD_E=1;
}
void WriteData(uchar wdata)
{
while(lcd_busy());
LCD_DATA=wdata;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delayms(5);
LCD_E=1;
}
void lcd_init(void)
{
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x38);
delayms(5);
WriteCommand(0x08);
WriteCommand(0x01);
WriteCommand(0x06);
WriteCommand(0x0c);
}
void set_xy(uchar x,uchar y)
{
switch (x)
{
case 0: y+=0x80; break;
case 1: y+=0xc0; break;
case 2: y+=0x90; break;
case 3: y+=0xd0; break;
}
WriteCommand(y);
}
void display_onechar(uchar x,uchar y,uchar wdate)
{
set_xy(x,y);
WriteData(wdate);
}
void display_string(uchar x,uchar y,uchar *s)
{
set_xy(x,y);
while(*s)
{
WriteData(*s);
s++;
}
}
void Write_CGRAM(uchar *p)
{
uchar i,j,kk;
uchar tmp=0x40; //操作CGRAM的命令碼
kk=0;
for(j=0;j<2;j++) //64 字節存儲空間,可以生成 8 個自定義字符點陣 64X8
{
for(i=0;i<8;i++) // 8 個字節生成 1 個字符點陣
{
WriteCommand(tmp+i); //操作CGRAM的命令碼+寫入CGRAM地址.
WriteData(p[kk]); //寫入數據
kk++;
}
tmp += 8;
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -