?? 51blcd.h
字號:
#ifndef __51BLCD_H__
#define __51BLCD_H__
#define uchar unsigned char
#define uint unsigned int
//以下常數定義來自LCD數據手冊
#define LCD_line_1 0x00
#define LCD_line_2 0x40
#define LCD_line_3 0x14
#define LCD_line_4 0x54
#define LCD_CLEAR_SCREEN 0x01 //清屏
#define LCD_HOMING 0x02 //光標返回原點
#define LCD_AC_UP 0x06
#define LCD_AC_DOWN 0x04 //default
#define LCD_MOVE 0x05 //畫面可平移
#define LCD_NO_MOVE 0x04 //default
#define LCD_SHOW 0x0c //顯示開
#define LCD_HIDE 0x08 //顯示關
#define LCD_CURSOR 0x0a //顯示光標
#define LCD_NO_CURSOR 0x08 //無光標
#define LCD_FLASH 0x09 //光標閃動
#define LCD_NO_FLASH 0x08 //光標不閃動
#define LCD_PIC_MOVE 0x18 //畫面平移一個字符
#define LCD_CURSOR_MOVE 0x10 //光標平移一個字符
#define LCD_RIGHT_MOVE 0x14 //右移
#define LCD_LEFT_MOVE 0x10 //左移
#define LCD_SET_7 0x38 //8位接口,雙行顯示,5*7字符
#define LCD_SET_10 0x3c //8位接口,雙行顯示,5*10字符
#define LCD_CGRAM_ADDR(addr) (0x40|addr) //cgaddr 0~3fH
#define LCD_DDRAM_ADDR(addr) (0x80|addr) //ddaddr
uchar code CGRAM[8][8] = {{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x11,0x0A,0x04,0x1F,0x04,0x1F,0x04,0x00},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02}};
#define CW_add XBYTE[0x87ff] // 1000 0111
#define CR_add XBYTE[0xA7ff] // 1010 0111
#define DW_add XBYTE[0x97ff] // 1001 0111
#define DR_add XBYTE[0xB7ff] // 1011 0111
//8us延時
void delay_lcd(uchar i)
{
while(i--);
}
//LCD狀態檢測
uchar LCD_r_state(uchar *addr)
{
uchar temp1,temp2;
temp1 = CR_add;//讀LCD狀態
temp2 = temp1 & 0x7f;
*addr = temp2;
//根據最高位判斷LCD是否忙
if((bit)(temp1 & 0x80)) return (1);
else return (0);
}
//將要顯示的字符寫入LCD
void Print(uchar *str)
{
while(*str!='\0')
{
DW_add = *str;//直接針對外部地址些 movx指令
str++;
delay_lcd(10);
}
}
//帶定位參數的字符寫函數
void LCD_w_data(uchar line,uchar column,uchar *p_data)
{
switch(line)
{
case 1:
CW_add = LCD_DDRAM_ADDR(LCD_line_1+column-1);//光標定位
delay_lcd(10);
Print(p_data);
break;
case 2:
CW_add = LCD_DDRAM_ADDR(LCD_line_2+column-1);
delay_lcd(10);
Print(p_data);
break;
case 3:
CW_add = LCD_DDRAM_ADDR(LCD_line_3+column-1);
delay_lcd(10);
Print(p_data);
break;
case 4:
CW_add = LCD_DDRAM_ADDR(LCD_line_4+column-1);
delay_lcd(10);
Print(p_data);
break;
default:
break;
}
}
//LCD初始化
void LCD_init(void)
{
uchar *p,temp1;
p = &temp1;
while(LCD_r_state(p));
CW_add = LCD_SET_7;
delay_lcd(10);
CW_add = LCD_SHOW;
delay_lcd(10);
CW_add = LCD_CLEAR_SCREEN;
delay_lcd(205);
CW_add = LCD_AC_UP;
delay_lcd(10);
CW_add = LCD_CURSOR;
delay_lcd(10);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -