找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1657|回复: 3
收起左侧

头大的问题!单片机程序把 while(1) 去掉,就正常显示了

[复制链接]
ID:299872 发表于 2019-7-4 18:12 | 显示全部楼层 |阅读模式
这个程序是不能显示,
把 while(1) 去掉,就正常显示了!!!!!
问题在哪里??????头都 大 了!!!!!!!

研究半天,还有就是 位置控制命令不能用 0x80命令不能用。

单片机源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit lcdrs= P2^1;
  5. sbit lcdrw= P2^2;
  6. sbit lcden= P2^3;

  7. void delay(uint m)
  8.   {while(--m);}
  9.   
  10. void write(uchar com,uchar date)
  11. {

  12.         lcdrs=com;
  13.         
  14.         P1=(date&0xf0)>>4;
  15.         delay(3);
  16.         lcden=1;
  17.         delay(3);
  18.         lcden=0;

  19.         P1=(date&0x0f);
  20.         delay(3);
  21.         lcden=1;
  22.         delay(3);
  23.         lcden=0;
  24.         delay(20);
  25. }

  26. void init()
  27. {
  28.         lcdrw=0;
  29.         lcden=0;
  30.         delay(5);

  31.         write(0,0x28);
  32.         write(0,0x0c);
  33.         write(0,0x01);
  34.         write(0,0x80);
  35.         delay(255);

  36. }

  37. void main()
  38. {
  39.         
  40.         init();

  41.         while(1)
  42.                         {
  43.                         write(1,'a');write(1,'b');delay(65255);delay(65255);
  44.                         }
  45. }
复制代码

回复

使用道具 举报

ID:190832 发表于 2019-7-4 20:24 | 显示全部楼层
不如你试试把init()函数放while(1)里面
回复

使用道具 举报

ID:299872 发表于 2019-7-5 02:05 来自手机 | 显示全部楼层
hange_v 发表于 2019-7-4 20:24
不如你试试把init()函数放while(1)里面

对,你确实发现了问题!!!!!
不需要全部
write(0,0x28);
write(0,0x0c);
放着二句就没有了。

什么问题呀??
回复

使用道具 举报

ID:155507 发表于 2019-7-5 18:51 | 显示全部楼层

给你改了一下试试。


1602-4Bit.jpg

  1. #include <reg51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit lcdrs = P2^1;   //LCD寄存器选择
  5. sbit lcdrw = P2^2;   //LCD读写控制
  6. sbit lcden = P2^3;   //LCD使能控制

  7. void delay(uint m) //延时函数
  8. {while(--m);}

  9. void write(uchar com, uchar lcddata) //LCD1602写入8位命令/数据子函数
  10. {

  11.         lcdrs=com;   //写入命令   0 选择发送命令    1 选择输入数据
  12.        
  13.         //P1=(lcddata);        //由于4位的接线是接到P1口的高四位,所以传送高四位不用改
  14.         P1=(lcddata&0xf0)>>4; //由于4位的接线是接到P1口的低四位,接到LCD高四位
  15.         delay(200);
  16.         lcden=1;     //写入时序
  17.         delay(300);  //保持时间
  18.         lcden=0;     //使能清零

  19.         //P1=(lcddata & 0x0f)<< 4;   //发送低四位
  20.         P1=(lcddata&0x0f);  //发送高四位
  21.         delay(200);
  22.         lcden=1;     //写入时序
  23.         delay(300);  //保持时间
  24.         lcden=0;     //使能清零
  25.         delay(20);
  26. }

  27. void init()   //LCD初始化子函数
  28. {
  29.         lcdrw=0;   //选择写入
  30.         lcden=0;   //使能
  31.         delay(5);

  32.         write(0,0x32);         //将8位总线转为4位总线
  33.         write(0,0x28);         //在四位线下的初始化
  34.         write(0,0x0c);   //开显示不显示光标
  35.         write(0,0x06);   // 读入后AC(指针)加1,向右写
  36.         write(0,0x01);   //清屏
  37.         write(0,0x80);   //设置数据指针起点
  38.         delay(255);

  39. }

  40. void main()
  41. {
  42.        
  43.         init(); //LCD初始化

  44.         while(1)
  45.         {
  46.                 write(1,'a');write(1,'b');delay(65255);delay(65255);
  47.         }
  48. }


复制代码



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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