初学者模式下的12864液晶(一)

欢迎来围观小白讲知识,作为硬件中的小白一枚,对于很多大神讲得东西总是摸不透,恕小白直言,大神研究得太深入,小白还依然在表面,所以小白还是看小白写得东西能懂许多。最后还是那一句 大神勿喷
接下来进入主题教你在12864液晶上显示一些简单的文字,这仅仅是显示文字哦,对于要显示图啊什么的,我们还有后续继续说。
</br>

12864液晶

虽然很简单,但对于初学者来说,找不到路就很难了,很可能你把代码烧录了进去但没有显示,这就很尴尬了。所以今天带大家来学学入何简单地让显示屏显示你要显示的文字。


液晶基本特征

1. 低电源电压(VDD:+3V 或+5V),DM12864-A 为 5V,
    DM12864-L 为 3.3, 驱动芯片:ST7920
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℃

并行模式下的引脚定义

并行引脚

控制界面的4种模式

4种模式

由于我们并不需要从液晶中读出数据,因为没什么可读出来的,所以我们只需向液晶写入数据和写入命令,因此R/W=0

控制液晶的指令

![ ![](http://upload-images.jianshu.io/upload_images/6472160-3ecc42ecf8253020.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)![一些基本指令和扩充指令](http://upload-images.jianshu.io/upload_images/6472160-317e494438e7e146.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](http://upload-images.jianshu.io/upload_images/6472160-8e933c0c8f89cc36.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

对于这些指令,当我们要用时,刻意去查找就行了,指令中的X表示可以为任何的值,即1或0 。

液晶的时序图

液晶时序图

对于要做的任意模块来说,看懂时序图是非常重要的,时序图就是让你知道何时写数据、指令。之前我们说了,我们只需写入就行,不需要读所以,把R/W置0。

当我们要写代码时,先把端口定义好先,然后在写。写指令把RS置0,按照时序图延时一下,然后把使能E置0,也延时一下,把指令写入指令口,即赋值,也要延时一下,再把使能端E拉高,即把E置1,再延时一下,这样就把指令发送给了液晶了。
</br>

void write_com(uchar cmdcode)
 {
    chk_busy();
    LCM_RS=0; 
    LCM_RW=0; 
    LCM_EN=1;
    Lcd_Bus=cmdcode;
    LCM_EN=0;
}

写数据,写数据时,我们要把RS拉低,即置0,按照时序图延时一下,然后把使能E置0,也延时一下,把数据写入数据口,即赋值,也要延时一下,再把使能端E拉高,即把E置1,再延时一下,这样就把数据发送给了液晶了
</br>

void write_data(uchar Dispdata)
{    
    chk_busy();
    LCM_RS=1; 
    LCM_RW=0; 
    LCM_EN=1;
    Lcd_Bus=Dispdata;
    LCM_EN=0;
}

只有使能端E处于高电平时,数据才是稳定的,所以我们发完数据或指令要稍微延时一下的原因。接下来我们就要在屏幕上指定我们要显示的地方显示了,即定位我们文字的位置。

</br>

void lcd_pos(uchar X,uchar Y)
 {                          
        uchar  pos;
        if (X==0)
             {X=0x80;}
        else if (X==1)
             {X=0x90;}
        else if (X==2)
             {X=0x88;}
        else if (X==3)
             {X=0x98;}
        pos = X+Y ;  
        write_com(pos);     //设置地址
}

在发送数据或指令时,我们得检查一下,是否液晶已经处理完数据或指令了,所以我们得忙位检查一下

void chk_busy()
{
      LCM_RS=0; 
      LCM_RW=1; 
      LCM_EN=1;
      Lcd_Bus=0xff;
      while((Lcd_Bus&0x80)==0x80);
      LCM_EN=0;
}

当我们要显示第二主页面时,我们要清理一下屏幕上的文字,即清屏。
清屏很简单,只需发送指令0x01即可。

  void lcm_clr(void)
  {
        write_com(0x01);    
 }

当然我们显示之前得初始化一下液晶,即要是液晶如何显示,有无光标等

void lcm_init()     //初始化液晶函数
{  
    write_com(0x30);  //选择8bit数据流
    write_com(0x0c);  //开显示(无游标、不反白)
    lcm_clr();        //清除显示,并且设定地址指针为00H
    write_com(0x06);  //光标右移,DDRAM位址计数器(AC)加1,不整屏    移动
}

好了,有了这些函数,显示文字也就很容易了

 #inclue<reg52.h>
 #define uchar unsigned char
 #define uint  unsigned int
 #define Lcd_Bus P0             //数据口   
 sbit LCM_EN  = P1^0;            //液晶使能控制
 sbit LCM_RW  = P1^1;            //液晶读/写控制
 sbit LCM_RS  = P1^2;            //寄存器选择输入 
sbit LCM_PSB = P1^3;            //串/并方式控制   0时为串,1时为并
uchar code dis1[] = {"欢迎关注"};
uchar code dis3[] = {"五分钱特效"};
uchar code dis4[] = {"不定期更新"};

void  main()
{
    void lcm_init();
    void lcm_clr(void);
    uchar i;
    Delay(10);                 //延时

     lcd_pos(0,1);             //设置显示位置为第一行的第1位开始显示
     i = 0;
    while(dis1[i] != '\0')
   {                         //显示字符
      write_data(dis1[i]);
       i++;
   }

   lcd_pos(1,1);             //设置显示位置为第三行的第1位开始显示
     i = 0;
   while(dis3[i] != '\0')
   {
        write_data(dis3[i]);      //显示字符
        i++;
   }
    lcd_pos(2,1);             //设置显示位置为第三行的第1个字符  
    i = 0;
   while(dis4[i] != '\0')
   {
       write_data(dis4[i]);      //显示字符
       i++;
    } 
   while(1);




}
这样就能显示想要显示的文字了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,865评论 6 13
  • 1. 下列叙述错误的是()。 (2.0 分) A. 质量管理包括QA和QC一切活动的全部过程 B. 影像质量是指对...
    我们村我最帅阅读 3,769评论 0 8
  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,110评论 8 114
  • 系统的原理 这套系统是由各个模块来组成,它们分别是51单片机(这里用集成开发板)、12864液晶显示模块,WiFi...
    guanalex阅读 5,307评论 0 2
  • 1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本...
    荣卓然阅读 1,795评论 0 5