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

[复制链接]
 楼主| dongnanxibei 发表于 2016-10-31 23:12 | 显示全部楼层 |阅读模式
共享一个新唐M051单片机驱动带字库的LCD12864液晶屏的c语言程序:
  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<
  7.                             else   P0_DOUT&=~(1UL<
  8. #define LCD12864_RW(x)     {if((x))P0_DOUT|=  1UL<
  9.                             else   P0_DOUT&=~(1UL<
  10. #define LCD12864_EN(x)     {if((x))P0_DOUT|=  1UL<
  11.                             else   P0_DOUT&=~(1UL<
  12. #define LCD12864_MD(x)     {if((x))P0_DOUT|=  1UL<
  13.                             else   P0_DOUT&=~(1UL<
  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. }


 楼主| dongnanxibei 发表于 2016-10-31 23:13 | 显示全部楼层
主要自己弄清楚原理就搞的通了。
holts 发表于 2016-11-1 08:00 | 显示全部楼层
#include "SmartM_M0.h" 文件呢?
helezh 发表于 2016-11-2 14:10 | 显示全部楼层
helezh 发表于 2016-11-2 14:12 | 显示全部楼层
gaoyang9992006 发表于 2016-11-4 09:45 | 显示全部楼层
这个头文件,貌似在哪儿见过。。
gaoyang9992006 发表于 2016-11-4 09:49 | 显示全部楼层
holts 发表于 2016-11-1 08:00
#include "SmartM_M0.h" 文件呢?

我百度云有这个资料

一会儿分享给你。

gaoyang9992006 发表于 2016-11-4 09:50 | 显示全部楼层
holts 发表于 2016-11-1 08:00
#include "SmartM_M0.h" 文件呢?

链接: http://pan.baidu.com/s/1dE4i8CT 密码: w6xy
gaoyang9992006 发表于 2016-11-4 09:50 | 显示全部楼层
holts 发表于 2016-11-4 13:25 | 显示全部楼层
gaoyang9992006 发表于 2016-11-4 09:50
链接: http://pan.baidu.com/s/1dE4i8CT 密码: w6xy

链接不存在
gaoyang9992006 发表于 2016-11-4 20:15 | 显示全部楼层
gaoyang9992006 发表于 2016-11-4 20:16 | 显示全部楼层

百度太猥琐了,发个资料都不行。。。
天灵灵地灵灵 发表于 2016-11-4 21:33 | 显示全部楼层
M051系列非常适合入门学习,那个楼上发的那资料,是人家经过优化后的框架。
天灵灵地灵灵 发表于 2016-11-4 21:34 | 显示全部楼层
比如初始化的代码合并成一个函数,,本质上是相同的。只不过看起来更加结构化模块化。
huangcunxiake 发表于 2016-11-5 18:37 | 显示全部楼层
所有的液晶屏接口都是这样的吗,会不会在其他屏幕上没法用
 楼主| dongnanxibei 发表于 2016-11-7 18:35 | 显示全部楼层
huangcunxiake 发表于 2016-11-5 18:37
所有的液晶屏接口都是这样的吗,会不会在其他屏幕上没法用

基本上都是这样的。
huangcunxiake 发表于 2016-11-9 16:10 | 显示全部楼层
确实是个不错的方案,可以收藏了学习
neeringstu 发表于 2016-11-9 19:51 | 显示全部楼层
现在这种程序用的不多了吧
捉虫天师 发表于 2016-11-9 21:14 | 显示全部楼层
现在都不直接用IO方式驱动了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3840

帖子

18

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