标题: 数码管C语言程序在while(1)程序内部不能显示前面的位,怎么解决。 [打印本页]

作者: hongshouzhu    时间: 2020-1-5 22:08
标题: 数码管C语言程序在while(1)程序内部不能显示前面的位,怎么解决。
这个程序里面,如果数码管显示程序不在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. }
复制代码





作者: wulin    时间: 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. }
复制代码

作者: mengzhixinheng    时间: 2020-1-6 07:55
read_ok被你清零了
作者: wtmkimmy    时间: 2020-1-7 16:54
mengzhixinheng 发表于 2020-1-6 07:55
read_ok被你清零了

yes,问题所在




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1