打印
[DemoCode下载]

新唐M051驱动LCD12864液晶屏程序

[复制链接]
1134|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dongnanxibei|  楼主 | 2016-10-31 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
共享一个新唐M051单片机驱动带字库的LCD12864液晶屏的c语言程序:
#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<
                            else   P0_DOUT&=~(1UL<
#define LCD12864_RW(x)     {if((x))P0_DOUT|=  1UL<
                            else   P0_DOUT&=~(1UL<
#define LCD12864_EN(x)     {if((x))P0_DOUT|=  1UL<
                            else   P0_DOUT&=~(1UL<
#define LCD12864_MD(x)     {if((x))P0_DOUT|=  1UL<
                            else   P0_DOUT&=~(1UL<
#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);
}


沙发
dongnanxibei|  楼主 | 2016-10-31 23:13 | 只看该作者
主要自己弄清楚原理就搞的通了。

使用特权

评论回复
板凳
holts| | 2016-11-1 08:00 | 只看该作者
#include "SmartM_M0.h" 文件呢?

使用特权

评论回复
地板
helezh| | 2016-11-2 14:10 | 只看该作者

使用特权

评论回复
5
helezh| | 2016-11-2 14:12 | 只看该作者

使用特权

评论回复
6
gaoyang9992006| | 2016-11-4 09:45 | 只看该作者
这个头文件,貌似在哪儿见过。。

使用特权

评论回复
7
gaoyang9992006| | 2016-11-4 09:49 | 只看该作者
holts 发表于 2016-11-1 08:00
#include "SmartM_M0.h" 文件呢?

我百度云有这个资料

一会儿分享给你。

使用特权

评论回复
8
gaoyang9992006| | 2016-11-4 09:50 | 只看该作者
holts 发表于 2016-11-1 08:00
#include "SmartM_M0.h" 文件呢?

链接: http://pan.baidu.com/s/1dE4i8CT 密码: w6xy

使用特权

评论回复
9
gaoyang9992006| | 2016-11-4 09:50 | 只看该作者

使用特权

评论回复
10
holts| | 2016-11-4 13:25 | 只看该作者
gaoyang9992006 发表于 2016-11-4 09:50
链接: http://pan.baidu.com/s/1dE4i8CT 密码: w6xy

链接不存在

使用特权

评论回复
11
gaoyang9992006| | 2016-11-4 20:15 | 只看该作者
12
gaoyang9992006| | 2016-11-4 20:16 | 只看该作者

百度太猥琐了,发个资料都不行。。。

使用特权

评论回复
13
天灵灵地灵灵| | 2016-11-4 21:33 | 只看该作者
M051系列非常适合入门学习,那个楼上发的那资料,是人家经过优化后的框架。

使用特权

评论回复
14
天灵灵地灵灵| | 2016-11-4 21:34 | 只看该作者
比如初始化的代码合并成一个函数,,本质上是相同的。只不过看起来更加结构化模块化。

使用特权

评论回复
15
huangcunxiake| | 2016-11-5 18:37 | 只看该作者
所有的液晶屏接口都是这样的吗,会不会在其他屏幕上没法用

使用特权

评论回复
16
dongnanxibei|  楼主 | 2016-11-7 18:35 | 只看该作者
huangcunxiake 发表于 2016-11-5 18:37
所有的液晶屏接口都是这样的吗,会不会在其他屏幕上没法用

基本上都是这样的。

使用特权

评论回复
17
huangcunxiake| | 2016-11-9 16:10 | 只看该作者
确实是个不错的方案,可以收藏了学习

使用特权

评论回复
18
neeringstu| | 2016-11-9 19:51 | 只看该作者
现在这种程序用的不多了吧

使用特权

评论回复
19
捉虫天师| | 2016-11-9 21:14 | 只看该作者
现在都不直接用IO方式驱动了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

201

主题

3587

帖子

16

粉丝