查看: 6737|回复: 9

[其他] QC12864B液晶显示屏学习笔记_3

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
    发表于 2016-1-18 19:41:45 | 显示全部楼层 |阅读模式
        51单片机的串行模式
    在并行模式下,我们验证了QC12864B的良好显示性能,那么如何来进行串行模式的运行呢?
    首先要进行线路的连接,在51单片机上,若以串行模式工作,它只需占用2I/O引脚即可达到显示要求,具体的连接方法是:
    1)接好电源、亮度调节及背光连线
    2)将RS+5VR/WP1.1 EP1.2PSB接地。
    打开电源,此时由于QC12864B的背光引脚已通电,应被点亮。然而,异常情况出现了,不但QC12864B没被点亮,连电源指示灯也熄灭了。
    后经不断地检查,才发现问题出在PSB引脚上,原来它在QC12864B的内部已被接到+5V,难怪打开电源后,就一切都黑了!还好电源有保护,否则一切就全完了。
    再次检查QC12864B内部的线路,发现是电阻R9PSB+5V连在一起。把R9拆下来再试,问题解决了QC12864B亮了起来。
        在串行模式下,串行数据传送共分三个字节来完成:
    第一字节:串口控制—格式 11111ABC
    A 为数据传送方向控制:H 表示数据从 LCD MCUL 表示数据从 MCU LCD
    B 为数据类型选择:H 表示数据是显示数据,L 表示数据是控制指令
    C 固定为 0
    第二字节:(并行)8 位数据的高 4 位—格式 DDDD0000
    第三字节:(并行)8 位数据的低 4 位—格式 0000DDDD
    LCD12864上以串行模式显示字符和汉字的代码如下:
    1. /***********************************************
    2. 标题:        LCD12864程序
    3. 效果:        基于51单片机STC89C52的LCD12864液晶屏
    4.            串行模式显示程序,显示内容为字符和汉字
    5. ************************************************/
    6. #include<reg51.h>
    7. #include<intrins.h>
    8. #define uchar unsigned char
    9. #define uint unsigned int
    10. sbit  SCLK = P1^2;
    11. sbit  SID  = P1^1;
    12. sbit  CS = P3^5;     // 不用接线
    13. sbit  PSB = P1^6;    // 不用接线
    14. uchar ch;
    15. uchar code hanzi1[]={"家居安防报警系统"};
    16. uchar code hanzi2[]={"                "};
    17. uchar code hanzi3[]={"    YILIKEJI    "};
    18. uchar code hanzi4[]={"  天津屹立科技  "};
    19. uchar code hanzi5[]={"安防数据实时显示"};
    20. uchar code hanzi6[]={"火焰:   限值:   "};
    21. uchar code hanzi7[]={"气体:   限值:   "};
    22. uchar code hanzi8[]={"热释:   限值:   "};
    23. void  delay(uint n)        //  延时
    24. {
    25. uint i;
    26. while(n--)
    27. {
    28. i=5000;
    29. while(i--);
    30. }
    31. }
    32. void delay_1ms(uint x)     //  延时1ms
    33. {
    34. uint j;
    35. uchar i;
    36. for(j=0;j<x;j++)
    37. {
    38. for(i=0;i<120;i++);
    39. }
    40. }
    41. void send_command(uchar command_data)    //  写命令
    42. {
    43. uchar i;
    44. uchar temp,temp1,temp2;
    45. temp=0xf8;                 //  写入命令控制字符(从MCU写命令到LCD)
    46. delay_1ms(10);
    47. CS=1;
    48. SCLK=0;
    49. for(i=0;i<8;i++)             //  将命令字写入LCD
    50. {
    51. SID=(bit)(temp&0x80);
    52. SCLK=0;
    53. SCLK=1;
    54. temp=temp<<1;
    55. }
    56. temp1=command_data;      //  把命令的高4位放入LCD
    57. temp1&=0xf0;
    58. for(i=0;i<8;i++)
    59. {
    60. SID=(bit)(temp1&0x80);
    61. SCLK=0;
    62. SCLK=1;
    63. temp1=temp1<<1;
    64. }
    65. temp2=command_data;      //  把命令的低 4位放入LCD
    66. temp2<<=4;
    67. for(i=0;i<8;i++)
    68. {
    69. SID=(bit)(temp2&0x80);
    70. SCLK=0;
    71. SCLK=1;
    72. temp2=temp2<<1;
    73. }
    74. CS=0;
    75. }
    76. void send_data(uchar command_data)   //  写数据
    77. {
    78. uchar i;
    79. uchar temp,temp1,temp2;
    80. temp=0xfa;              //  写入数据控制字符(从MCU写命令到LCD)
    81. delay_1ms(10);
    82. CS=1;
    83. for(i=0;i<8;i++)          //  把命令字符放入LCD
    84. {
    85. SID=(bit)(temp&0x80);
    86. SCLK=0;
    87. SCLK=1;
    88. temp=temp<<1;
    89. }
    90. temp1=command_data;     //  把数据高四位放入LCD
    91. temp1&=0xf0;
    92. for(i=0;i<8;i++)
    93. {
    94. SID=(bit)(temp1&0x80);
    95. SCLK=0;
    96. SCLK=1;
    97. temp1=temp1<<1;
    98. }
    99. temp2=command_data;    //  把数据的低四位放入LCD
    100. temp2<<=4;
    101. for(i=0;i<8;i++)
    102. {
    103. SID=(bit)(temp2&0x80);
    104. SCLK=0;
    105. SCLK=1;
    106. temp2=temp2<<1;
    107. }
    108. CS=0;
    109. }
    110. void lcd_init(void)        //初始化LCD12864
    111. {
    112. delay_1ms(100);
    113. send_command(0x30);    //  功能设置:一次送8位数据,,基本指令集。
    114. send_command(0x04);    //  点设定:显示字符/光标从左到右移位,DDRAM地址加1。
    115. send_command(0x0c);    //  显示设定:开显示,关光标,当前关闭反白闪动。
    116. send_command(0x01);    //  清DDRAM
    117. send_command(0x02);    //  DDRAM地址归位
    118. send_command(0x80);    //  把显示地址设为0X80,即为第一行的首位。
    119. }
    120. void display (void)
    121. {
    122. uchar n,j;
    123. send_command(0x01);      //  清屏
    124. //  显示起始页面
    125. send_command(0x80);      //  显示第一行
    126. for(n=0;n<16;n++)
    127. {
    128. send_data(hanzi1[n]);
    129. }
    130. send_command(0x90);        //  显示第二行
    131. send_command(0x88);        //  显示第三行
    132. for(j=0;j<16;j++)
    133. {
    134. send_data(hanzi3[j]);
    135. }
    136. send_command(0x98);        //  显示第四行
    137. for(j=0;j<14;j++)
    138. {
    139. send_data(hanzi4[j]);
    140. }
    141. }
    142. void main(void)
    143. {
    144. PSB = 0;
    145. lcd_init();               //  LCD初始化
    146. display();
    147. while(1);
    148. }
    复制代码
    经程序编译和下载,运行时的显示效果如下:
    在汉字输出方面,最简单的方法是采用字符串,该方式其输出内容较为直观。但在使用过程中有时会出现显示内容不正常的情况,即无法输出指定的中文信息。此时,就需要以区位码来辅助输出。通常一个字符占一个字节,而一个汉字要占二个字节。如“安”的区位为CAHFDH,其显示语句为:
    Send_data(oxca);
    Send_data(oxfd);
    为了在YL-KL26Z 开发板上实现QC12864B的显示功能,首先要验证一个问题就是3V的工作电源能否驱动QC12864B。为QC12864B的背光引脚加上3V的电源,可发现显示屏被点亮。
    再使用3VSTC12LE5A60S2单片机对串行模式的程序进行测试,会发现能显示出原输出内容,但出现的问题是颜色很浅,很难看清楚!


    我知道答案 目前已有9人回答

    串行模式的显示效果

    串行模式的显示效果

    评分

    参与人数 1NXP金币 +20 收起 理由
    小七 + 20 赞一个!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情

    2016-10-20 09:45
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    80

    主题

    1038

    帖子

    5

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2223
    最后登录
    2023-11-20
    发表于 2016-1-19 08:44:46 | 显示全部楼层
    学习一下!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2016-1-19 09:12:12 | 显示全部楼层
    谢谢分享。。。 blank.png blank1.png blank2.png blank3.png blank4.png blank5.png blank6.png blank7.png blank8.png blank9.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2016-1-19 09:39:03 | 显示全部楼层
    3.3V的电压能驱动12864,开始学习51的时候买的,后来学习32位的了,驱动可以点亮
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-1-19 11:14:47 | 显示全部楼层
    wambob 发表于 2016-1-19 09:39
    3.3V的电压能驱动12864,开始学习51的时候买的,后来学习32位的了,驱动可以点亮 ...

    32位的你是用的哪种芯片,在YL-KL26Z上暂时还出不来。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-1-19 16:41:11 | 显示全部楼层
    哥们,晕了吧。128x64并口LCD写数据和命令不需要分成高4位和低4位分写,一次8位数据或命令就写入了。好像1602之类的带字符型LCD有4位数据写的——为了省单片机的I/O口。你查看手册一下?是吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2016-1-20 12:38:20 | 显示全部楼层
    jinglixixi 发表于 2016-1-19 11:14
    32位的你是用的哪种芯片,在YL-KL26Z上暂时还出不来。

    https://www.nxpic.org.cn/module/forum/thread-598949-1-1.html
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    555

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    1343
    最后登录
    2018-10-23
    发表于 2016-1-20 12:49:32 | 显示全部楼层
    谢谢分享
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-1-20 13:31:23 | 显示全部楼层
    zhjb1 发表于 2016-1-19 16:41
    哥们,晕了吧。128x64并口LCD写数据和命令不需要分成高4位和低4位分写,一次8位数据或命令就写入了。好像16 ...

    并行模式是一次8位数据或命令,串行模式要分3次,有在第2和第3字节高4位和低4位的说法。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-1-20 13:33:50 | 显示全部楼层
    wambob 发表于 2016-1-20 12:38
    https://www.nxpic.org.cn/module/forum/thread-598949-1-1.html

    我试试,电压是使用3V的?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 15:14 , Processed in 0.117902 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表