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

[复制链接]
 楼主| C洛达尔多 发表于 2015-9-10 21:44 | 显示全部楼层 |阅读模式
  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. }
  107. /********************************************
  108. *函数名称:LCD12864Init
  109. *输    入:无
  110. *输    出:无
  111. *说    明:LCD12864 初始化
  112. ********************************************/
  113. VOID LCD12864Init(VOID)
  114. {
  115.      LS164Init();
  116.   LCD12864_MD(HIGH);
  117.      LCD12864WriteCommand(0x30);//功能设置,一次送8位数据,基本指令集
  118.      LCD12864WriteCommand(0x0C);//整体显示,游标off,游标位置off
  119.      LCD12864WriteCommand(0x01);//清DDRAM   
  120.      LCD12864WriteCommand(0x02);//DDRAM地址归位
  121.      LCD12864WriteCommand(0x80);//设定DDRAM 7位地址000,0000到地址计数器AC
  122. }
  123. /****************************************
  124. *函数名称:main
  125. *输    入:无
  126. *输    出:无
  127. *功    能:函数主体
  128. ******************************************/
  129. INT32 main(VOID)
  130. {
  131.      Un_Lock_Reg();          //ISP下载时保护FLASH存储器
  132.   PWRCON |= XTL12M_EN;        //默认时钟源为外部晶振
  133.   while((CLKSTATUS & XTL12M_STB) == 0);     //等待12MHz时钟稳定

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

  135.   LCD12864Init();         //LCD12864初始化
  136.      LCD12864PrintfString(0,1,"1234567890ABCDEF");//显示第一行
  137.      LCD12864PrintfString(0,2,"Hello World!!!!!");//显示第二行
  138.      LCD12864PrintfString(0,3,"学好电子成就自己");//显示第三行
  139.      LCD12864PrintfString(0,4,"I Love You!!!!!!");//显示第四行
  140.   while(1);
  141. }


玛尼玛尼哄 发表于 2015-9-11 11:00 | 显示全部楼层
这个是什么型号的LCD啊?给个通信接口看看。
huangcunxiake 发表于 2015-9-11 15:13 | 显示全部楼层
SmartM_M0.h这个头文件是什么内容啊
mintspring 发表于 2015-9-11 21:36 | 显示全部楼层
头文件里面定义的东西不知道是什么。
598330983 发表于 2015-9-11 21:57 | 显示全部楼层
这个是按照坐标显示,那个字形是如何写入呢
mintspring 发表于 2015-9-13 10:40 | 显示全部楼层
这个通信接口没有讲啊。不懂如何跟单片机链接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

236

帖子

0

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

28

主题

236

帖子

0

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