找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于lcd1602乱码问题求解

[复制链接]
跳转到指定楼层
楼主
ID:377611 发表于 2018-11-15 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我的程序
初始接上1602显示没有问题
但是稍微一动板子
就会乱码 出现一些其他的字符,请问是什么原因
谢谢大家

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define Data  P2    //??????
  6. uchar  FirstLine[] ="123";  //?????????
  7. uchar  SecondLine[]="nihao";   //?????????
  8. sbit RW=P3^3;//?????????????lcd1602??????//
  9. sbit RS=P3^2;
  10. sbit E=P3^4;
  11. void delay(uchar ms)   // ???????ms????
  12. {
  13. uchar i,j;
  14. for(i=ms;i>0;i--)
  15. for(j=100;j>0;j--);
  16. }
  17. void DelayUs(unsigned char us)  //--???????
  18. {
  19. unsigned char uscnt;
  20. uscnt=us>>1;        /*12MHz???*/
  21. while(--uscnt);
  22. }
  23. void DelayMs(unsigned char ms)
  24. {
  25. while(--ms)
  26.    {
  27.      DelayUs(250);
  28.      DelayUs(250);
  29.   DelayUs(250);
  30.   DelayUs(250);
  31.    }
  32. }
  33. void lcd_write_com(uchar c)    //д????
  34. {
  35. DelayMs(5);//???????????????????????
  36. E=0;
  37. RS=0;
  38. RW=0;
  39. _nop_();
  40. E=1;
  41. Data=c;
  42. E=0;
  43. }
  44. void lcd_write_dat(uchar c)    //д????
  45. {
  46. DelayMs(5);  //???????????????????????
  47. E=0;
  48. RS=1;
  49. RW=0;
  50. _nop_();
  51. E=1;
  52. Data=c;
  53. E=0;
  54. RS=0;
  55. }
  56. void lcd_init()    //LCD?????
  57. {
  58. DelayMs(15);
  59. lcd_write_com(0x38); //display mode
  60. lcd_write_com(0x38); //display mode
  61. lcd_write_com(0x38); //display mode
  62. lcd_write_com(0x06); //?????????λ??
  63. lcd_write_com(0x0c); //??????????????
  64. lcd_write_com(0x01); //???????
  65. }
  66. void ShowChar(uchar pos,uchar c)  //??????????
  67. {
  68. unsigned char p;
  69. if (pos>=0x10)
  70.     p=pos+0xb0; //????????????????4λ?0xc
  71. else
  72.     p=pos+0x80; //????????????????4λ?0x8
  73. lcd_write_com(p);//д????
  74. lcd_write_dat(c);   //д????
  75. }
  76. void ShowString (uchar line,char *ptr)   //????????
  77. {
  78. unsigned char l,*p;
  79. p=ptr;
  80. l=line<<4;
  81. while((*p)!='\0')
  82.   {
  83.     ShowChar(l++,*(p));
  84. p++;
  85.   }
  86. }
  87. void disp(void)    //??????????????????
  88. {
  89. ShowString(0,FirstLine);
  90. ShowString(1,SecondLine);
  91. }
  92. void main()
  93. {

  94. lcd_init();
  95. delay(50);
  96. while(1){
  97.   disp();
  98.     }
  99. }
复制代码



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

使用道具 举报

沙发
ID:358930 发表于 2018-11-15 12:16 | 只看该作者
你这程序有数据口判忙程序吗?找个标准例程看看呗,没有判忙,一动板子并口通信时数据不得丢几个呀。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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