共享一个新唐M051单片机驱动带字库的LCD12864液晶屏的c语言程序:#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))
/********************************************
*函数名称:LCD12864WriteByte
*输 入:ucByte 要写入的字节
*输 出:无
*说 明:LCD12864 写字节
********************************************/
VOID LCD12864WriteByte(UINT8 ucByte)
{
LCD12864_PORT(ucByte);
LCD12864_RS(HIGH);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
Delayus(500);
LCD12864_EN(HIGH);
}
/********************************************
*函数名称:LCD12864WriteCommand
*输 入:ucCmd 要写入的命令
*输 出:无
*说 明:LCD12864 写命令
********************************************/
VOID LCD12864WriteCommand(UINT8 ucCmd)
{
LCD12864_PORT(ucCmd);
LCD12864_RS(LOW);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
Delayus(500);
LCD12864_EN(HIGH);
}
/********************************************
*函数名称:LCD12864SetXY
*输 入:x 横坐标 y 纵坐标
*输 出:无
*说 明:LCD12864 设置坐标
********************************************/
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;
}
}
/********************************************
*函数名称:LCD12864PrintfString
*输 入:x 横坐标 y 纵坐标 s字符串
*输 出:无
*说 明:LCD12864 打印字符串
********************************************/
VOID LCD12864PrintfString(UINT8 x,
UINT8 y,
UINT8 *s)
{
LCD12864SetXY(x,y); //设置显示坐标
while(s && *s)
{
LCD12864WriteByte(*s); //显示逐个字符
s++;
}
}
/********************************************
*函数名称:LCD12864ClearScreen
*输 入:无
*输 出:无
*说 明:LCD12864 清屏
********************************************/
VOID LCD12864ClearScreen(VOID)
{
LCD12864WriteCommand(0x01);
Delayus(500);
}
/********************************************
*函数名称:LCD12864Init
*输 入:无
*输 出:无
*说 明:LCD12864 初始化
********************************************/
VOID LCD12864Init(VOID)
{
LS164Init();
LCD12864_MD(HIGH);
LCD12864WriteCommand(0x30);//功能设置,一次送8位数据,基本指令集
LCD12864WriteCommand(0x0C);//整体显示,游标off,游标位置off
LCD12864WriteCommand(0x01);//清DDRAM
LCD12864WriteCommand(0x02);//DDRAM地址归位
LCD12864WriteCommand(0x80);//设定DDRAM 7位地址000,0000到地址计数器AC
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
Un_Lock_Reg(); //ISP下载时保护FLASH存储器
PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
LCD12864Init(); //LCD12864初始化
LCD12864PrintfString(0,1,"1234567890ABCDEF");//显示第一行
LCD12864PrintfString(0,2,"Hello World!!!!!");//显示第二行
LCD12864PrintfString(0,3,"学好电子成就自己");//显示第三行
LCD12864PrintfString(0,4,"I Love You!!!!!!");//显示第四行
while(1);
}
|