[DemoCode下载] M051驱动LCD12864液晶屏程序

[复制链接]
1083|4
 楼主| 侣行天下 发表于 2016-2-22 19:32 | 显示全部楼层 |阅读模式
  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. }
  96. /********************************************
  97. *函数名称:LCD12864ClearScreen
  98. *输    入:无
  99. *输    出:无
  100. *说    明:LCD12864 清屏
  101. ********************************************/
  102. VOID LCD12864ClearScreen(VOID)
  103. {
  104.   LCD12864WriteCommand(0x01);
  105.      Delayus(500);
  106. }


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

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

  29.   LCD12864Init();         //LCD12864初始化
  30.      LCD12864PrintfString(0,1,"1234567890ABCDEF");//显示第一行
  31.      LCD12864PrintfString(0,2,"Hello World!!!!!");//显示第二行
  32.      LCD12864PrintfString(0,3,"学好电子成就自己");//显示第三行
  33.      LCD12864PrintfString(0,4,"I Love You!!!!!!");//显示第四行
  34.   while(1);
  35. }
neeringstu 发表于 2016-2-23 23:10 | 显示全部楼层
这个128X64用的是串行的吧
ideafor 发表于 2016-2-24 22:42 | 显示全部楼层

一共可以显示5行吧,不过分辨率不高
Jessicakjdsl 发表于 2016-2-26 09:00 | 显示全部楼层
12864的分辨率有些低啊,换个大的试试吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

265

帖子

0

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