大侠们,把小弟看看这程序是怎么回事,感谢
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,shi,ge;
sbit dula=P2^0;
sbit wela=P3^7;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//…………以上延时程序…………
void main()
{
temp=12;
shi=temp/10;
ge=temp%10;
while(1)
{
wela=1;
P1=0x01;
wela=0;
dula=1;
P1=table[shi];
dula=0;
delay(100); /*为什么这里delay(100)改成delay(5)就不显示了1了,可是delay(5)的时候,temp=22,也是可以显示2的 */
//………以上要是将dula先打开送数,再打开位送,就不行…………………
wela=1;
P1=0x02;
wela=0;
dula=1;
P1=table[ge];
dula=0;
delay(5);
}
}
#define uint unsigned int
#define uchar unsigned char
uchar temp,shi,ge;
sbit dula=P2^0;
sbit wela=P3^7;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//…………以上延时程序…………
void main()
{
temp=12;
shi=temp/10;
ge=temp%10;
while(1)
{
wela=1;
P1=0x01;
wela=0;
dula=1;
P1=table[shi];
dula=0;
delay(100); /*为什么这里delay(100)改成delay(5)就不显示了1了,可是delay(5)的时候,temp=22,也是可以显示2的 */
//………以上要是将dula先打开送数,再打开位送,就不行…………………
wela=1;
P1=0x02;
wela=0;
dula=1;
P1=table[ge];
dula=0;
delay(5);
}
}
你这是要干嘛呢?
这是刚看视频教程上的学的,Proteus 软件仿真的,shi位那delay(5);时第一位数码管出现不显示1和4,其它数正常,可是将delay(60)以上又是显示的,不知道问题出在那
这个不是程序的问题,是proteus的问题,这个仿真软件在仿真是你看到的是动画,如果你的delay很小,动画的频率就需要很快,但是proteus软件好像频率有限制,跟不上这么快的频率,所以仿真就会出错。
如果下载到板子上就不会有这个问题。
嗯谢谢,是软件的问题,上午发现了,仿真软件在动态显示上有两个问题,一是、二位以上的组合管(延时很短的情况下),会出现有些字显示了(第一位1和4,第二位5和6),二是、必须是选送位选,再送段选,如果反一下就显示不了或乱码
你那个在dula=0;之前不做消影动作恩,这样跑久了会出现乱码的。建议在dula=0;之前做消影动作。
哦好的,谢谢,
应该是消影问题。如果消影了,不管延迟多短都能显示的,只不过延迟短了之后人眼分辨不了了,这就是动态显示了。
学习学习嘻嘻嘻
应该是消影的问题