?? lcd1602.h
字號:
#ifndef __LCD_1602_H__
#define __LCD_1602_H__
#define uchar unsigned char
#define uint unsigned int
/*LCD1602接口定義*/
uchar xdata M51_LCD1602_CW _at_ 0xfceb;
uchar xdata M51_LCD1602_CR _at_ 0xfeeb;
uchar xdata M51_LCD1602_DW _at_ 0xfdeb;
uchar xdata M51_LCD1602_DR _at_ 0xffeb;
//以下常數定義來自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 //地址計數器自動+1
#define LCD_AC_DOWN 0x04 //地址計數器自動-1,default
#define LCD_MOVE 0x05 //畫面可平移
#define LCD_NO_MOVE 0x04 //畫面不可平移,default
#define LCD_SHOW 0x0c //顯示開
#define LCD_HIDE 0x08 //顯示關
#define LCD_CURSOR_NO_FLASH 0x0e //顯示光標不閃爍
#define LCD_CURSOR_FLASH 0x0f //顯示光標不閃爍
#define LCD_NO_CURSOR 0x0c //無光標
#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字符
//LCD1602_CW等在Mini51BH中定義
#define LCD_CW M51_LCD1602_CW //定義液晶的寫命令地址
#define LCD_CR M51_LCD1602_CR //定義液晶的判斷忙標志位
#define LCD_DW M51_LCD1602_DW //單片機向LCD寫數據
#define LCD_DR M51_LCD1602_DR //讀數據 一般情況用的很少
#define LCD_CGRAM_ADDR(addr) (0x40|addr)
#define LCD_DDRAM_ADDR(addr) (0x80|addr)
//LCD狀態檢測,根據最高位判斷LCD是否忙
void loop_lcd1602_is_busy(void)
{
uchar temp=0;
while((bit)(LCD_CR & 0x80)) //讀數據口的最高位,判斷液晶是否忙
if(temp++>10) break; //超時跳出
}
//LCD初始化
void lcd1602_init(void)
{
loop_lcd1602_is_busy(); //同上
LCD_CW = LCD_SET_7;
loop_lcd1602_is_busy(); //同上
LCD_CW = LCD_SHOW;
loop_lcd1602_is_busy(); //同上
LCD_CW = LCD_AC_UP;
}
void lcd_goto_xy(uchar x,uchar y)
{
loop_lcd1602_is_busy();
switch(y)
{
case 1:
LCD_CW = LCD_DDRAM_ADDR(LCD_LINE_1+x-1);//定位從那個位置開始顯示
break;
case 2:
LCD_CW = LCD_DDRAM_ADDR(LCD_LINE_2+x-1);//定位從那個位置開始顯示
break;
case 3:
LCD_CW = LCD_DDRAM_ADDR(LCD_LINE_3+x-1);//定位從那個位置開始顯示
break;
case 4:
LCD_CW = LCD_DDRAM_ADDR(LCD_LINE_4+x-1);//定位從那個位置開始顯示
break;
default:
break;
}
}
//帶定位參數的字符寫函數
void lcd_put_xys(uchar x,uchar y,uchar *str)
{
lcd_goto_xy(x,y);
while(*str)
{
loop_lcd1602_is_busy();
LCD_DW = *str;
str++;
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -