标题:
数码管C语言程序在while(1)程序内部不能显示前面的位,怎么解决。
[打印本页]
作者:
hongshouzhu
时间:
2020-1-5 22:08
标题:
数码管C语言程序在while(1)程序内部不能显示前面的位,怎么解决。
这个程序里面,如果数码管显示程序不在WHILE(1)的内部,58就可以显示在数码管上,如果把它放在WHILE(1)里面,如上面的程序那样,只能读出来
最后一位8,前一位5闪一下就没了。这是为什么?如果必须有WHILE(1)的话,请大师傅帮解决一下。谢谢
include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 ,0x71};
void delay(uchar a)
{
uchar x,y;
for(x=a;x>0;x--)
for( y=109;y>0;y--);
}
void main()
{
uchar read=0x58;
bit read_ok=1;
while(1)
{
if(read_ok)
{
read_ok=0;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[read/16];
dula=0;
delay(5);
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[read%16];
dula=0;
delay(5);
}
}
}
复制代码
作者:
wulin
时间:
2020-1-6 07:12
因为
if(read_ok)
{
read_ok=0;
就只能执行一次后再也进不了if(read_ok)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 ,0x71};void delay(uint a)
{
uint x,y;
for(x=a;x>0;x--)
for( y=110;y>0;y--);
}
void main()
{
uchar read=0x58;
bit read_ok=1;
while(1)
{
P0=0x00;//消隐
dula=1;
dula=0;
if(read_ok)
{
P0=0xfe;
wela=1;
wela=0;
P0=table[read/16];
dula=1;
dula=0;
read_ok=~read_ok;
}
else
{
P0=0xfd;
wela=1;
wela=0;
P0=table[read%16];
dula=1;
dula=0;
read_ok=~read_ok;
}
delay(5);
}
}
复制代码
作者:
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