| 
 
| 共享一个新唐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);
 }
 
 
 | 
 |