找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4089|回复: 14
打印 上一主题 下一主题
收起左侧

求助万能的网友,单片机+12864不能显示

[复制链接]
跳转到指定楼层
#
50黑币
按照开发板做个带12864的最小系统板,接口和开发板一样,可是烧录一样的程序就是显示不了,求点解决方案

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <stdlib.h>        
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. /* 端口定义*/
  7. #define LCD_data  P0            //数据口
  8. sbit LCD_RS  =  P2^6;            //寄存器选择输入
  9. sbit LCD_RW  =  P2^5;            //液晶读/写控制
  10. sbit LCD_EN  =  P2^7;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //液晶使能控制
  11. sbit LCD_PSB =  P3^4;            //串/并方式控制
  12. sbit LCD_RST =  P3^2;

  13. uchar code dis1[] = {"  123456  "};
  14. uchar code dis2[] = {"    0123456789 "};

  15. void delay_1ms(uint x)
  16. {
  17. uint i,j;
  18. for(j=0;j<x;j++)  
  19.         for(i=0;i<110;i++);
  20. }

  21. /*******************************************************************/
  22. /*                                                                 */
  23. /*写指令数据到LCD                                                  */
  24. /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  25. /*                                                                 */
  26. /*******************************************************************/
  27. void write_cmd(uchar cmd)
  28. {                          
  29.     LCD_RS = 0;
  30.     LCD_RW = 0;
  31.     LCD_EN = 0;

  32.         P0 =cmd;
  33.         delay_1ms(5);
  34.     LCD_EN = 1;
  35.         delay_1ms(5);
  36.     LCD_EN = 0;  
  37. }

  38. /*******************************************************************/
  39. /*                                                                 */
  40. /*写显示数据到LCD                                                  */
  41. /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void write_dat(uchar dat)
  45. {                          
  46.     LCD_RS = 1;
  47.     LCD_RW = 0;
  48.     LCD_EN = 0;

  49.         P0=dat;
  50.         delay_1ms(5);
  51.     LCD_EN = 1;
  52.         delay_1ms(5);
  53.     LCD_EN = 0;  
  54. }

  55. /*********************************************************/
  56. /*                                                       */
  57. /* 设定显示位置                                          */
  58. /*                                                       */
  59. /*********************************************************/
  60. void lcd_pos(uchar X,uchar Y)
  61. {                          
  62.    uchar  pos;
  63.    if (X==0)
  64.      {X=0x80;}
  65.    else if (X==1)
  66.      {X=0x90;}
  67.    else if (X==2)
  68.      {X=0x88;}
  69.    else if (X==3)
  70.      {X=0x98;}
  71.    pos = X+Y ;  
  72.    write_cmd(pos);     //显示地址
  73. }

  74. /*******************************************************************/
  75. /*                                                                 */
  76. /*  LCD初始化设定                                                  */
  77. /*                                                                 */
  78. /*******************************************************************/
  79. void lcd_init()
  80. {
  81.     LCD_PSB = 1;         //并口方式  
  82.     write_cmd(0x30);      //基本指令操作
  83.     delay_1ms(5);
  84.     write_cmd(0x0C);      //显示开,关光标
  85.     delay_1ms(5);
  86.     write_cmd(0x01);      //清除LCD的显示内容
  87.     delay_1ms(5);
  88. }

  89. /*********************************************************/
  90. /*                                                                                                                 */
  91. /* 主程序                                                                                    */
  92. /*                                                       */
  93. /*********************************************************/
  94. main()
  95. {
  96.     uchar i,j;

  97.     delay_1ms(10);                 //延时
  98.     lcd_init();                 //初始化LCD
  99.         
  100.          
  101.     lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
  102.     i = 0;
  103.          while(dis1[i]!= '\0')
  104.     {
  105.        write_dat(dis1[i]);      //显示字符
  106.          i++;
  107.     }

  108.     lcd_pos(1,0);  
  109.         j=0;
  110.         
  111.                    while(dis2[j]!= '\0')
  112.     {
  113.        write_dat(dis2[j]);      //显示字符
  114.          j++;
  115.     }
  116.         while(1);



  117. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

14#
ID:420031 发表于 2018-12-24 23:49 | 只看该作者
C语言还没学会。如果要汇编的可以转发一个给你试试。我测试过是可以的
回复

使用道具 举报

13#
ID:449525 发表于 2018-12-24 22:26 来自手机 | 只看该作者
你单独做的话,自己焊接线,初始化部分需要延时,查下线别接错了,应该没有其它问题了
回复

使用道具 举报

12#
ID:451718 发表于 2018-12-24 19:55 | 只看该作者
我也和你一样碰到了同样的情况, 但是,我的现象是恰恰相反,自己做的板子上有显示,但有时会花屏,开发板上就完全没有显示,就是两条横岗。持续关注你,一起学习哈。
回复

使用道具 举报

11#
ID:303383 发表于 2018-12-24 14:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

10#
ID:213280 发表于 2018-12-23 15:12 | 只看该作者
yangcong1314 发表于 2018-12-23 14:22
两个芯片的型号是不是一样的?晶振是不是一样的?

都一样
回复

使用道具 举报

9#
ID:452561 发表于 2018-12-23 14:22 | 只看该作者
两个芯片的型号是不是一样的?晶振是不是一样的?
回复

使用道具 举报

8#
ID:213280 发表于 2018-12-23 12:45 | 只看该作者
yaoji123 发表于 2018-12-23 10:08
对比度调节不正确,调节R7,另连接也检查一下。

可以调,线也没错,但是换个串行程序又可以显示
回复

使用道具 举报

7#
ID:425222 发表于 2018-12-23 11:50 | 只看该作者
两个芯片的型号是否完全一样,晶振是否一样,如果不一样那就该延时,如果一样那上网找12864硬件的接线资料
回复

使用道具 举报

6#
ID:432823 发表于 2018-12-23 10:14 | 只看该作者
写命令、数据前检查LCD忙,写命令、数据中设好RS等加一点延时NOP();
回复

使用道具 举报

5#
ID:432823 发表于 2018-12-23 10:08 | 只看该作者
对比度调节不正确,调节R7,另连接也检查一下。
回复

使用道具 举报

地板
ID:213280 发表于 2018-12-23 09:54 | 只看该作者

换了个串行程序可以显示了,可是并行的为啥不行呢
回复

使用道具 举报

板凳
ID:213280 发表于 2018-12-23 08:25 来自手机 | 只看该作者
海盗船 发表于 2018-12-22 20:22
对比度没有调节好

调了,也显示不了
回复

使用道具 举报

沙发
ID:403593 发表于 2018-12-23 07:51 | 只看该作者
硬件问题居多
回复

使用道具 举报

楼主
ID:282519 发表于 2018-12-22 20:22 | 只看该作者
对比度没有调节好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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