共享一個(gè)新唐M051單片機(jī)驅(qū)動(dòng)帶字庫(kù)的LCD12864液晶屏的c語(yǔ)言程序:
#include "SmartM_M0.h"
#define LCD12864_RS_PIN 0
#define LCD12864_RW_PIN 1
#define LCD12864_EN_PIN 2
#define LCD12864_MD_PIN 3
#define LCD12864_RS(x) {if((x))P0_DOUT|= 1UL<<LCD12864_RS_PIN;\
else P0_DOUT&=~(1UL<<LCD12864_RS_PIN);}
#define LCD12864_RW(x) {if((x))P0_DOUT|= 1UL<<LCD12864_RW_PIN;\
else P0_DOUT&=~(1UL<<LCD12864_RW_PIN);}
#define LCD12864_EN(x) {if((x))P0_DOUT|= 1UL<<LCD12864_EN_PIN;\
else P0_DOUT&=~(1UL<<LCD12864_EN_PIN);}
#define LCD12864_MD(x) {if((x))P0_DOUT|= 1UL<<LCD12864_MD_PIN;\
else P0_DOUT&=~(1UL<<LCD12864_MD_PIN);}
#define LCD12864_PORT(x) LS164Send((x))
/********************************************
*函數(shù)名稱:LCD12864WriteByte
*輸 入:ucByte 要寫入的字節(jié)
*輸 出:無(wú)
*說(shuō) 明:LCD12864 寫字節(jié)
********************************************/
VOID LCD12864WriteByte(UINT8 ucByte)
{
LCD12864_PORT(ucByte);
LCD12864_RS(HIGH);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
Delayus(500);
LCD12864_EN(HIGH);
}
/********************************************
*函數(shù)名稱:LCD12864WriteCommand
*輸 入:ucCmd 要寫入的命令
*輸 出:無(wú)
*說(shuō) 明:LCD12864 寫命令
********************************************/
VOID LCD12864WriteCommand(UINT8 ucCmd)
{
LCD12864_PORT(ucCmd);
LCD12864_RS(LOW);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
Delayus(500);
LCD12864_EN(HIGH);
}
/********************************************
*函數(shù)名稱:LCD12864SetXY
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo)
*輸 出:無(wú)
*說(shuō) 明:LCD12864 設(shè)置坐標(biāo)
********************************************/
VOID LCD12864SetXY(UINT8 x,UINT8 y)
{
switch(y)
{
case 1:
{
LCD12864WriteCommand(0x80|x);
}
break;
case 2:
{
LCD12864WriteCommand(0x90|x);
}
break;
case 3:
{
LCD12864WriteCommand(0x88|x);
}
break;
case 4:
{
LCD12864WriteCommand(0x98|x);
}
break;
default:break;
}
}
/********************************************
*函數(shù)名稱:LCD12864PrintfString
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo) s字符串
*輸 出:無(wú)
*說(shuō) 明:LCD12864 打印字符串
********************************************/
VOID LCD12864PrintfString(UINT8 x,
UINT8 y,
UINT8 *s)
{
LCD12864SetXY(x,y); //設(shè)置顯示坐標(biāo)
while(s && *s)
{
LCD12864WriteByte(*s); //顯示逐個(gè)字符
s++;
}
}
/********************************************
*函數(shù)名稱:LCD12864ClearScreen
*輸 入:無(wú)
*輸 出:無(wú)
*說(shuō) 明:LCD12864 清屏
********************************************/
VOID LCD12864ClearScreen(VOID)
{
LCD12864WriteCommand(0x01);
Delayus(500);
}
/********************************************
*函數(shù)名稱:LCD12864Init
*輸 入:無(wú)
*輸 出:無(wú)
*說(shuō) 明:LCD12864 初始化
********************************************/
VOID LCD12864Init(VOID)
{
LS164Init();
LCD12864_MD(HIGH);
LCD12864WriteCommand(0x30);//功能設(shè)置,一次送8位數(shù)據(jù),基本指令集
LCD12864WriteCommand(0x0C);//整體顯示,游標(biāo)off,游標(biāo)位置off
LCD12864WriteCommand(0x01);//清DDRAM
LCD12864WriteCommand(0x02);//DDRAM地址歸位
LCD12864WriteCommand(0x80);//設(shè)定DDRAM 7位地址000,0000到地址計(jì)數(shù)器AC
}
/****************************************
*函數(shù)名稱:main
*輸 入:無(wú)
*輸 出:無(wú)
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
Un_Lock_Reg(); //ISP下載時(shí)保護(hù)FLASH存儲(chǔ)器
PWRCON |= XTL12M_EN; //默認(rèn)時(shí)鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時(shí)鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設(shè)置外部晶振為系統(tǒng)時(shí)鐘
LCD12864Init(); //LCD12864初始化
LCD12864PrintfString(0,1,"1234567890ABCDEF");//顯示第一行
LCD12864PrintfString(0,2,"Hello World!!!!!");//顯示第二行
LCD12864PrintfString(0,3,"學(xué)好電子成就自己");//顯示第三行
LCD12864PrintfString(0,4,"I Love You!!!!!!");//顯示第四行
while(1);
}