?? 12864lcdd.c
字號(hào):
/**********************************************************
*YM12864R-3 液晶驅(qū)動(dòng)(3線串行方式) LCD Module
*控制芯片:ST7920
*版本:V1.3
*日期:2007-6-6
*創(chuàng)建人:飛揚(yáng)
**********************************************************/
#include <reg51.H>
sbit B_0 = B^0;//用累加器操作速度比較快.
sbit B_7 = B^7;
/****************** 液晶模塊引腳定義 *******************/
sbit LCD_CS = P1^3;//LCD模塊片選端,高電平有效
sbit LCD_SID = P1^4;//LCD串行數(shù)據(jù)輸入端
sbit LCD_CLK = P1^2;//LCD串行同步時(shí)鐘,上升沿讀取SID數(shù)據(jù)
/**************** 常用操作命令和參數(shù)定義 *****************/
#define DisplayClear 0x01 //清屏指令(00000001)
#define ReturnHome 0x02 //光標(biāo)回到"00H"(0000001X)
#define EntryMode 0x06 //進(jìn)入點(diǎn)設(shè)定,光標(biāo)右移,AC加1(00000110)
#define DisplayOn 0x0c //整體顯示開(kāi),光標(biāo)關(guān),反白關(guān)
#define DisplayOff 0x08 //整體顯示關(guān)
#define CursorOn 0x0e //光標(biāo)顯示開(kāi)
#define Reverse 0x0d //反白顯示開(kāi)
#define Basic 0x30 //基本指令
/************************************************/
#define Extend 0x34 //擴(kuò)充指令
#define SleepOn 0x08 //進(jìn)入睡眠模式
#define SleepOff 0x0c //脫離睡眠模式
#define PlotOn 0x36 //繪圖開(kāi)
#define PlotOff 0x34 //繪圖關(guān)
#define uchar unsigned char //定義下方便使用
/**********************************************************
*函數(shù)名:SendData
*功能:發(fā)送數(shù)據(jù)
*說(shuō)明:向LCD發(fā)送一個(gè)字節(jié)數(shù)據(jù)
*輸入:ucDat
*返回:無(wú)
**********************************************************/
void SendData(uchar ucDat)
{
uchar i;
B = ucDat;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
LCD_SID = B_7;
LCD_CLK = 1;
B <<= 1;
}
}
/**********************************************************
*函數(shù)名:ReceiveData
*功能:接收數(shù)據(jù)
*說(shuō)明:接收來(lái)自LCD的一個(gè)字節(jié)的數(shù)據(jù)
*輸入:無(wú)
*返回:B
**********************************************************/
uchar ReceiveData()
{
uchar i;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
B <<= 1;
LCD_CLK = 1;
B_0 = LCD_SID;
}
return (B);
}
/**********************************************************
*函數(shù)名:ReadBusyFlag
*功能:讀忙碌標(biāo)志和AC
*說(shuō)明:
*輸入:
*返回:B
**********************************************************/
uchar ReadBusyFlag()
{
uchar ucDat1,ucDat2;
LCD_CS = 1;
SendData(0xfc); //發(fā)送讀忙碌標(biāo)志指令
ucDat1 = ReceiveData();//
ucDat2 = ReceiveData();
LCD_CS = 0;
B = (ucDat2>>4)|(ucDat1&0xf0);
return (B);
}
/**********************************************************
*函數(shù)名:LCDWriteData
*功能:寫(xiě)數(shù)據(jù)到LCD
*說(shuō)明:
*輸入: Dat
*返回: 無(wú)
**********************************************************/
void LCDWriteData(uchar Dat)
{
uchar ucDat;
LCD_CS = 0;
do {
ucDat = ReadBusyFlag(); //忙碌判斷
} while (ucDat&0x80);
LCD_CS = 1;
SendData(0xfa); //發(fā)送寫(xiě)數(shù)據(jù)指令
SendData(Dat&0xf0);//發(fā)送高4位
SendData(Dat<<4); //發(fā)送低4位
LCD_CS = 0;
}
/**********************************************************
*函數(shù)名:LCDWriteCommand
*功能:寫(xiě)指令到LCD
*說(shuō)明:
*輸入: Dat
*返回: 無(wú)
**********************************************************/
void LCDWriteCommand (uchar Dat)
{
uchar ucDat;
LCD_CS = 0;
do {
ucDat = ReadBusyFlag();//忙碌標(biāo)志
} while (ucDat&0x80);
LCD_CS = 1;
SendData(0xf8); //發(fā)送寫(xiě)指令到LCD
SendData(Dat&0xf0);//發(fā)送高4位
SendData(Dat<<4); //發(fā)送低4位
LCD_CS = 0;
}
/**********************************************************
*函數(shù)名: LCDInit
*功能:初始化
*說(shuō)明:液晶初始化函數(shù)
*輸入:無(wú)
*返回:無(wú)
**********************************************************/
void LCDInit()
{
LCDWriteCommand(Basic); //基本指令集
LCDWriteCommand(DisplayOn); //顯示開(kāi),光標(biāo)關(guān),發(fā)白關(guān)
LCDWriteCommand(DisplayClear); //清屏
LCDWriteCommand(EntryMode); //進(jìn)入點(diǎn)設(shè)定,光標(biāo)右移,AC加1
}
/**********************************************************
*函數(shù)名:
*功能:
*說(shuō)明:
*輸入:
*返回:
**********************************************************/
/**********************************************************
*函數(shù)名:
*功能:
*說(shuō)明:
*輸入:
*返回:
**********************************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -