[DemoCode下载] M051驱动LCD12864程序

[复制链接]
1299|5
 楼主| Rooney30 发表于 2016-1-18 20:22 | 显示全部楼层 |阅读模式
  1. #include "SmartM_M0.h"

  2. #define LCD12864_RS_PIN   0
  3. #define LCD12864_RW_PIN   1
  4. #define LCD12864_EN_PIN   2
  5. #define LCD12864_MD_PIN   3

  6. #define LCD12864_RS(x)     {if((x))P0_DOUT|=  1UL<<LCD12864_RS_PIN;\
  7.                             else   P0_DOUT&=~(1UL<<LCD12864_RS_PIN);}
  8. #define LCD12864_RW(x)     {if((x))P0_DOUT|=  1UL<<LCD12864_RW_PIN;\
  9.                             else   P0_DOUT&=~(1UL<<LCD12864_RW_PIN);}
  10. #define LCD12864_EN(x)     {if((x))P0_DOUT|=  1UL<<LCD12864_EN_PIN;\
  11.                             else   P0_DOUT&=~(1UL<<LCD12864_EN_PIN);}
  12. #define LCD12864_MD(x)     {if((x))P0_DOUT|=  1UL<<LCD12864_MD_PIN;\
  13.                             else   P0_DOUT&=~(1UL<<LCD12864_MD_PIN);}
  14. #define LCD12864_PORT(x)    LS164Send((x))                  


  15. /********************************************
  16. *函数名称:LCD12864WriteByte
  17. *输    入:ucByte 要写入的字节
  18. *输    出:无
  19. *说    明:LCD12864 写字节
  20. ********************************************/
  21. VOID LCD12864WriteByte(UINT8 ucByte)
  22. {
  23.      LCD12864_PORT(ucByte);
  24.      LCD12864_RS(HIGH);
  25.      LCD12864_RW(LOW);
  26.      LCD12864_EN(LOW);
  27.      Delayus(500);
  28.      LCD12864_EN(HIGH);
  29. }
  30. /********************************************
  31. *函数名称:LCD12864WriteCommand
  32. *输    入:ucCmd 要写入的命令
  33. *输    出:无
  34. *说    明:LCD12864 写命令
  35. ********************************************/
  36. VOID LCD12864WriteCommand(UINT8 ucCmd)
  37. {
  38.      LCD12864_PORT(ucCmd);
  39.      LCD12864_RS(LOW);
  40.      LCD12864_RW(LOW);
  41.      LCD12864_EN(LOW);
  42.      Delayus(500);
  43.      LCD12864_EN(HIGH);
  44. }
  45. /********************************************
  46. *函数名称:LCD12864SetXY
  47. *输    入:x 横坐标 y 纵坐标
  48. *输    出:无
  49. *说    明:LCD12864 设置坐标
  50. ********************************************/
  51. VOID LCD12864SetXY(UINT8 x,UINT8 y)
  52. {
  53.    switch(y)
  54.      {
  55.   case 1:
  56.         {
  57.              LCD12864WriteCommand(0x80|x);
  58.         }
  59.         break;
  60.   case 2:
  61.         {
  62.              LCD12864WriteCommand(0x90|x);
  63.         }
  64.         break;
  65.   case 3:
  66.         {
  67.              LCD12864WriteCommand(0x88|x);
  68.         }
  69.         break;
  70.   case 4:
  71.         {
  72.              LCD12864WriteCommand(0x98|x);
  73.         }
  74.         break;
  75.   default:break;
  76.      }
  77. }
  78. /********************************************
  79. *函数名称:LCD12864PrintfString
  80. *输    入:x 横坐标 y 纵坐标 s字符串
  81. *输    出:无
  82. *说    明:LCD12864 打印字符串
  83. ********************************************/
  84. VOID LCD12864PrintfString(UINT8 x,
  85.                          UINT8 y,
  86.                          UINT8 *s)
  87. {
  88.   LCD12864SetXY(x,y);    //设置显示坐标

  89.      while(s && *s)
  90.      {
  91.         LCD12864WriteByte(*s);   //显示逐个字符
  92.         s++;
  93.       
  94.      }
  95. }
 楼主| Rooney30 发表于 2016-1-18 20:22 | 显示全部楼层
  1. /********************************************
  2. *函数名称:LCD12864ClearScreen
  3. *输    入:无
  4. *输    出:无
  5. *说    明:LCD12864 清屏
  6. ********************************************/
  7. VOID LCD12864ClearScreen(VOID)
  8. {
  9.   LCD12864WriteCommand(0x01);
  10.      Delayus(500);
  11. }
  12. /********************************************
  13. *函数名称:LCD12864Init
  14. *输    入:无
  15. *输    出:无
  16. *说    明:LCD12864 初始化
  17. ********************************************/
  18. VOID LCD12864Init(VOID)
  19. {
  20.      LS164Init();
  21.   LCD12864_MD(HIGH);
  22.      LCD12864WriteCommand(0x30);//功能设置,一次送8位数据,基本指令集
  23.      LCD12864WriteCommand(0x0C);//整体显示,游标off,游标位置off
  24.      LCD12864WriteCommand(0x01);//清DDRAM   
  25.      LCD12864WriteCommand(0x02);//DDRAM地址归位
  26.      LCD12864WriteCommand(0x80);//设定DDRAM 7位地址000,0000到地址计数器AC
  27. }
  28. /****************************************
  29. *函数名称:main
  30. *输    入:无
  31. *输    出:无
  32. *功    能:函数主体
  33. ******************************************/
  34. INT32 main(VOID)
  35. {
  36.      Un_Lock_Reg();          //ISP下载时保护FLASH存储器
  37.   PWRCON |= XTL12M_EN;        //默认时钟源为外部晶振
  38.   while((CLKSTATUS & XTL12M_STB) == 0);     //等待12MHz时钟稳定

  39.   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;   //设置外部晶振为系统时钟

  40.   LCD12864Init();         //LCD12864初始化
  41.      LCD12864PrintfString(0,1,"1234567890ABCDEF");//显示第一行
  42.      LCD12864PrintfString(0,2,"Hello World!!!!!");//显示第二行
  43.      LCD12864PrintfString(0,3,"学好电子成就自己");//显示第三行
  44.      LCD12864PrintfString(0,4,"I Love You!!!!!!");//显示第四行
  45.   while(1);
  46. }
734774645 发表于 2016-1-18 22:52 | 显示全部楼层
基本参数
(1)低电源电压(VDD:+3.0--+5.5V)
(2)显示分辨率:128×64 点
(3)内置汉字字库,提供8192 个16×16 点阵汉字(简繁体可选)
(4)内置128 个16×8 点阵字符
(5)2MHZ 时钟频率
(6)显示方式:STN、半透、正显
(7)驱动方式:1/32DUTY,1/5BIAS
(8)视角方向:6 点
(9)背光方式:侧部高亮白色LED,功耗仅为普通LED 的1/5—1/10
(10)通讯方式:串行、并口可选
(11)内置DC-DC 转换电路,无需外加负压
(12)无需片选信号,简化软件设计
(13)工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃
DreamofOven 发表于 2016-1-21 09:20 | 显示全部楼层
用的是什么接口,SPI吗
huangcunxiake 发表于 2016-1-25 22:46 | 显示全部楼层
应该是SPI接口。
1)SDO – 主设备数据输出,从设备数据输入;
(2)SDI – 主设备数据输入,从设备数据输出;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS – 从设备使能信号,由主设备控制。
zhuotuzi 发表于 2016-1-25 23:24 | 显示全部楼层
LCD12864WriteCommand(0x30);//功能设置,一次送8位数据,基本指令集
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

117

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部