?? test_lcd12864.h
字號:
#ifndef LCD_12864_2008_02_17
#define LCD_12864_2008_02_17
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P1^2; //數據/命令選擇
sbit LCD_RW=P1^1; //讀寫控制
sbit LCD_EN=P1^0; //片選信號
#define LCD_DATA P0 //8 bit數據線
#define LOW 0
#define HIGH 1
//CGRAM地址
#define CGRAM_ADDR_0 0x40
#define CGRAM_ADDR_1 0x50
#define CGRAM_ADDR_2 0x60
#define CGRAM_ADDR_3 0x70
//初始化指令
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值為00H
#define AC_INIT 0x02 //將AC設置為00H。且游標移到原點位置
#define CURSE_ADD 0x06 //設定游標移到方向及圖像整體移動方向(默認游標右移,圖像整體不動)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //顯示開,顯示游標,且游標位置反白
#define DISPLAY_OFF 0x08 //顯示關
#define CURSE_DIR 0x14 //游標向右移動:AC=AC+1
#define SET_CG_AC 0x40 //設置AC,范圍為:00H~3FH
#define SET_DD_AC 0x80
/*******************************************************
函數名稱:delay(uint t)延時函數。對于12M晶振大約延時1ms
入口參數:t
出口參數:無
*******************************************************/
void delay(uint t)
{
uint i;
while(t--)
{
for(i=0;i<125;i++)
;
}
}
/*********************************
函數名稱:write_cmd(uint lcd_cmd)寫指令
入口參數:lcd_cmd
返回參數:無
*********************************/
void WriteCmd12864(uchar lcd_cmd)
{
LCD_RS=LOW;
LCD_RW=LOW;
LCD_EN=HIGH;
LCD_DATA=lcd_cmd;
LCD_EN=LOW;
}
/********************************
函數名稱:write_data(uint lcd_data)寫數據
入口參數:current_data
返回參數:無
********************************/
void WriteData12864(uchar lcd_data)
{
LCD_RS=HIGH;
LCD_RW=LOW;
LCD_EN=HIGH;
LCD_DATA=lcd_data;
LCD_EN=LOW;
}
/********************************
函數名稱:ReadBusy()判忙
入口參數:無
返回參數:"1"忙;"0"不忙
********************************/
void ReadBusy(void)
{
uchar i=5;
while(i--);
}
/********************************
函數名稱:Write12864(uint)寫數據
入口參數:cmd,data
返回參數:無
********************************/
void Write12864(uchar lcd_cmd,uchar lcd_data)
{
WriteCmd12864(lcd_cmd);
WriteData12864(lcd_data);
}
/********************************
函數名稱:WriteCgram(uchar lcd_addr,uchar lcd_data)寫CGRAM
入口參數:地址:lcd_addr,數據:lcd_data
返回參數:無
********************************/
void WriteCgram(uchar lcd_addr,uchar *lcd_data)
{
uchar j;
ReadBusy();
WriteCmd12864(lcd_addr);
for(j=0;j<=31;j++)
{
ReadBusy();
WriteData12864(*lcd_data);
lcd_data++;
}
}
/********************************
函數名稱:WriteDdram(uchar lcd_addr,uchar lcd_data)寫CGRAM
入口參數:地址:lcd_addr,數據:lcd_data
返回參數:無
********************************/
void WriteDdram(uchar lcd_addr,uchar lcd_data)
{
ReadBusy();
WriteCmd12864(lcd_addr);
ReadBusy();
WriteData12864(0x00);
ReadBusy();
WriteData12864(lcd_data);
}
/***************************************************
函數名稱:SetCurse(uchar x,uchar y)設置數據指針
入口參數:x,y
出口參數:無
***************************************************/
//void SetCurse(uchar x,uchar y)
//{
//}
/********************************
函數名稱:LcdInit()初始化
入口參數:無
返回參數:無
********************************/
void LcdInit()
{
delay(50);
WriteCmd12864(FUN_MODE);
delay(1);
WriteCmd12864(FUN_MODE);
delay(1);
WriteCmd12864(DISPLAY_ON);
delay(1);
WriteCmd12864(CLEAR_SCREEN);
delay(20);
// WriteCmd12864(CURSE_ADD);
}
/********************************
函數名稱:LcdClear()清屏
入口參數:無
返回參數:無
********************************/
void LcdClear(void)
{
ReadBusy();
WriteCmd12864(CLEAR_SCREEN);
delay(3);
}
/********************************
函數名稱:DisplayCgrom(uchar hz)顯示CGROM里的漢字
入口參數:無
返回參數:無
********************************/
void DisplayCgrom(uchar addr,uchar *hz)
{
ReadBusy();
WriteCmd12864(addr);
ReadBusy();
while(*hz != '\0')
{
WriteData12864(*hz);
hz++;
ReadBusy();
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -