新手数码管0-16显示问题

li_rui_1220 2012-03-24 03:25:35
#include<reg52.h>
#define ui unsigned int
#define uc unsigned char
uc code tab[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x3e,0x31,0x6e,0xff};
sbit d=P2^6;
sbit w=P2^7;
void d1()
{
ui a = 55000;
while(a--);
}
void main()
{ui i;

w=1;
P0=0xc0;
w=0;//位选
/*d=1;
P0=0x7d;
d=0;
while(1);//观察是不是能显示6
d=1;
P0=0x7f;
d=0;
while(1);*///观察能不能正确显示8
while(1)
{
for(i=0;i<16;i++)
{
d=1;
P0=tab[i];
d=0;
d1();
}
}
}小弟写的这段代码6不能显示,8显示不正常。可是我只显示6或8没问题。求大侠们帮帮我吧!灰常感谢!
...全文
403 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshi_ziyu 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bjtea 的回复:]

使用这样的永远为真的语句:
while(1); //观察是不是能显示6
之后,陷入无限等待,已经不能往下走了。所以,如果能够将这两段话拼接在一起后,只能显示前一个字符了。
要想先后同时显示两个字符,可以在中间插入一个延时程序:
for(i=0; i<10000; i++);
然后转入下一个显示。
[/Quote]
++
yoveldf 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bjtea 的回复:]

使用这样的永远为真的语句:
while(1); //观察是不是能显示6
之后,陷入无限等待,已经不能往下走了。所以,如果能够将这两段话拼接在一起后,只能显示前一个字符了。
要想先后同时显示两个字符,可以在中间插入一个延时程序:
for(i=0; i<10000; i++);
然后转入下一个显示。
[/Quote]++
hugang1984 2012-03-25
  • 打赏
  • 举报
回复
这个给你参考:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,t;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
t=0;num=0;
TMOD=0x01;
THO=(65536-5000)/256;
TLO=(65536-5000)%256;
EA=1;//开总中断
ET0=1;
TR0=1;
wela=1;//11101010
P0=0xea;
wela=0;
dula=1;
P0=0x3f;
dula=0
while(1)
{
if(t==20)
{
num++;
if(num==16)
num=0;
d1=1;
dula=1;
P0=table[num];
dula=0;
delay(1000);
}
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 1
{
TMOD=0x01;
THO=(65536-5000)/256;
TLO=(65536-5000)%256;
t++;
}
nandou 2012-03-25
  • 打赏
  • 举报
回复
没看懂你说的:这段代码6不能显示,8显示不正常。可是我只显示6或8没问题。是怎么回事??
如果你在观察同时显示6、8的时候去除了下面2句:
while(1);//观察是不是能显示6
while(1);//观察是不是能显示8
那么是因为2个显示的中间没加延时,你眼睛看不出来。
另外你的D1()延时是多久?估计也就10-20ms吧,你要拿个高速摄像机来录下后放慢了速度再看,估计就能看到你想要的东西了。 :)

你要把你的现象说清楚些,最好配上你的电路图。
bjtea 2012-03-24
  • 打赏
  • 举报
回复
使用这样的永远为真的语句:
while(1); //观察是不是能显示6
之后,陷入无限等待,已经不能往下走了。所以,如果能够将这两段话拼接在一起后,只能显示前一个字符了。
要想先后同时显示两个字符,可以在中间插入一个延时程序:
for(i=0; i<10000; i++);
然后转入下一个显示。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧