- #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);
- }
|