找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动lcd12864显示一直在闪

[复制链接]
跳转到指定楼层
楼主
写了一个12864的显示程序;但是发现从第三行开始显示出错,而且12864显示一直在闪:本人学渣,实在不知道问题出在哪,希望各位大神帮我看看。谢谢啦。程序如下:


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. sbit SID=P0^3;
  4. sbit SCK=P0^5;
  5. uchar  table[]="37654321";
  6. uchar  table1[]="2017 04 11";
  7. uchar  table2[]="456461";
  8. uchar  table3[]="1231484";
  9. void delay(uchar z)
  10. {
  11.         uchar x,y;
  12.         for(x=0;x<z;x++)
  13.         for(y=0;y<110;y++);
  14. }
  15. void sentbyte(uchar byte)
  16. {
  17.         uchar i;
  18.         for(i=0;i<8;i++)
  19.         {
  20.                 if(byte<<i&0x80)SID=1;
  21.                 else SID=0;
  22.                 SCK=0;
  23.                 SCK=1;
  24.         };
  25. }
  26. void write_cmd(uchar ccmd)
  27. {
  28.         sentbyte(0xf8);
  29.         sentbyte(ccmd&0xf0);
  30.         sentbyte((ccmd<<4)&0xf0);
  31.         delay(20);
  32. }
  33. void write_data(uchar i_data)
  34. {
  35.         sentbyte(0xfa);
  36.         sentbyte(i_data&0xf0);
  37.         sentbyte((i_data<<4)&0xf0);
  38.         delay(20);
  39. }
  40. void lcd_init()
  41. {
  42.         write_cmd(0x30);
  43.         delay(5);
  44.         write_cmd(0x02);
  45.         delay(5);
  46.         write_cmd(0x06);
  47.         delay(5);
  48.         write_cmd(0x0c);
  49.         delay(5);
  50.         write_cmd(0x01);
  51.         delay(5);
  52. }
  53. void main()
  54. {
  55.         uchar i,y;
  56.         lcd_init();
  57.         write_cmd(0x80);
  58.         while(table[i]!='\0')
  59.         {write_data(table[i]);
  60.                 i++;
  61.                 delay(10);
  62.         };
  63.         write_cmd(0x90);
  64.         for(y=0;y<10;y++)
  65.         {
  66.                 write_data(table1[y]);
  67.         };
  68.         delay(10);
  69.         write_cmd(0x88);
  70.         while(table2[i]!='\0')
  71.         {write_data(table2[i]);
  72.                 i++;
  73.                 delay(10);
  74.         };
  75.         write_cmd(0x98);
  76.         while(table3[i]!='\0')
  77.         {write_data(table3[i]);
  78.                 i++;
  79.                 delay(10);
  80.         };
  81. }
复制代码


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

使用道具 举报

沙发
ID:7485 发表于 2017-4-13 20:11 | 只看该作者
闪,是因为刷新频率低。
回复

使用道具 举报

板凳
ID:148552 发表于 2017-4-14 07:53 | 只看该作者
程序的最后一句加上while(1);
回复

使用道具 举报

地板
ID:187493 发表于 2017-4-14 09:36 | 只看该作者
ahshmj 发表于 2017-4-13 20:11
闪,是因为刷新频率低。

额,那显示错误问题是什么?
回复

使用道具 举报

5#
ID:187493 发表于 2017-4-15 16:55 | 只看该作者
ahshmj 发表于 2017-4-13 20:11
闪,是因为刷新频率低。

不闪了,但是显示还是错的
回复

使用道具 举报

6#
ID:187493 发表于 2017-4-15 16:56 | 只看该作者
你像风儿来了 发表于 2017-4-14 07:53
程序的最后一句加上while(1);

谢谢,加上去不闪了,但是显示是错的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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