怎么才能使十位数码管不闪烁,个位自加一;下面程序怎么改正?谢谢大神!!!

怎么才能使十位数码管不闪烁,个位自加一;下面程序怎么改正?谢谢大神!!!,第1张

#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
uchar i,j,huan;
sbit P35=P3^5;
sbit P33=P3^3;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
P2=0xe0;
i=0;
j=0 ;
while(1)
{
if(P35==0)
{
i++;
delay(250);
if(i>=10)
{
j++;
i=0;
if(j>=10)
j=0;
}
}
P0=table1[i];
P2=0xfb;

delay(10);
P0=table1[j];
P2=0xfd;
delay(10);
}

这个程序就是按一下按键个位自动加1,十位不变的,但是个位到9时,在按键十位就会加一,你看看程序,很简单,都是if判断,也就是计数器了(0--99)

我写过点亮8位的,一点也不闪烁。你把延时调短点就行了。全部位扫描下来,时间控制在100毫秒以下就行了。人眼反应是01秒。
数码管8位共用一个公共端,LED的压降是固定的,总电压减去LED压降,就是电阻上的电压,公共端上的电流等于电阻上的电压除以电阻阻值。可以得出,不过点亮多少段,流过公共端的电流基本上是固定的。当然,分到一段上和分到8段上不一样了。你尽量把串的电阻值减小试试吧。再就是,可以增加显示段数多时的扫描时间。
你说别人也写过,我不赞同,把电阻接在公共端上我也做过,就是为了调试方便,正常情况下,只点亮一段和同时点亮8段,公共端上的电流相差太大了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13401516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存