找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管C语言程序在while(1)程序内部不能显示前面的位,怎么解决。

[复制链接]
跳转到指定楼层
楼主
ID:626699 发表于 2020-1-5 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序里面,如果数码管显示程序不在WHILE(1)的内部,58就可以显示在数码管上,如果把它放在WHILE(1)里面,如上面的程序那样,只能读出来
最后一位8,前一位5闪一下就没了。这是为什么?如果必须有WHILE(1)的话,请大师傅帮解决一下。谢谢
  1. include<reg52.h>

  2. sbit dula=P2^6;
  3. sbit wela=P2^7;

  4. #define uchar unsigned char
  5. #define uint unsigned int



  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 ,0x71};
  7. void delay(uchar a)
  8. {
  9.          uchar x,y;
  10.         for(x=a;x>0;x--)
  11.         for( y=109;y>0;y--);
  12. }
  13. void main()
  14. {
  15.     uchar read=0x58;
  16.         bit read_ok=1;
  17.    while(1)
  18.    {
  19.           if(read_ok)
  20.                  {         
  21.                          read_ok=0;
  22.         
  23.                            wela=1;
  24.                            P0=0xfe;
  25.                            wela=0;
  26.                            dula=1;
  27.                            P0=table[read/16];
  28.                            dula=0;
  29.                            delay(5);
  30.                            wela=1;
  31.                            P0=0xfd;
  32.                            wela=0;
  33.                            dula=1;
  34.                            P0=table[read%16];
  35.                            dula=0;
  36.                           delay(5);
  37.         
  38.                      }
  39.                                 
  40.                                 
  41.                 }
  42. }
复制代码




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

使用道具 举报

沙发
ID:213173 发表于 2020-1-6 07:12 | 只看该作者
因为
if(read_ok)
{         
     read_ok=0;
就只能执行一次后再也进不了if(read_ok)

  1. #include<reg52.h>

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

  4. sbit dula=P2^6;
  5. sbit wela=P2^7;

  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 ,0x71};void delay(uint a)
  7. {
  8.         uint x,y;
  9.         for(x=a;x>0;x--)
  10.                 for( y=110;y>0;y--);
  11. }
  12. void main()
  13. {
  14.         uchar read=0x58;
  15.         bit read_ok=1;
  16.    while(1)
  17.    {
  18.                 P0=0x00;//消隐
  19.                 dula=1;
  20.                 dula=0;
  21.                 if(read_ok)
  22.                 {                        
  23.                         P0=0xfe;
  24.                         wela=1;
  25.                         wela=0;
  26.                         P0=table[read/16];
  27.                         dula=1;
  28.                         dula=0;
  29.                         read_ok=~read_ok;
  30.                 }
  31.                 else
  32.                 {
  33.                         P0=0xfd;
  34.                         wela=1;
  35.                         wela=0;
  36.                         P0=table[read%16];
  37.                         dula=1;
  38.                         dula=0;
  39.                         read_ok=~read_ok;       
  40.                 }
  41.                 delay(5);
  42.         }
  43. }
复制代码
回复

使用道具 举报

板凳
ID:89515 发表于 2020-1-6 07:55 来自手机 | 只看该作者
read_ok被你清零了
回复

使用道具 举报

地板
ID:497656 发表于 2020-1-7 16:54 | 只看该作者

yes,问题所在
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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