(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教

(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教,第1张

动态显示程序,必须不停的、反复的调用。

稍有停顿,就只能看见最后显示的一位字符。

解决方法,可以参考我以前回答的问题:

>

你这个程序,数码管显示效果怎样啊。是不是很闪的?

这个程序,我觉得那是相当的烂,相当啊,相当,相当!那个中断这样用有意思吗

void time0() interrupt 1//中断动态扫描显示函数

{

tflag++;

if(tflag==10)

{

tflag=0;

display(ad)//显示函数

dspflag++;

if(dspflag==3)

dspflag=0;

}

}

这样写倒还凑合,这样的话

for(a=10;a>0;a--)

display(ad);//显示测试电压值

这个也就不需要了

52单片机控制数码管的显示需要通过按位控制数码管的各个段。共阴数码管的每一个数字都是由若干个线段组成的,每一线段由阴极引出。当某个数字需要显示时,只需将其对应的阴极接地,同时将该数字所对应的线段即可发亮。

以下是一个简单程序,可以在52单片机上实现数码管共阴显示0到9:

```

#include <reg52h>

#define uint unsigned int

#define uchar unsigned char

// 数码管位选信号对应端口

sbit dula = P2^6;

sbit wela = P2^7;

// 七段数码管显示0~9

uchar code table[]={

0x3f, //0

0x06, //1

0x5b, //2

0x4f, //3

0x66, //4

0x6d, //5

0x7d, //6

0x07, //7

0x7f, //8

0x6f //9

};

void main()

{

uint i=0;

while(1)

{

for(i=0; i<10; i++)

{

wela=1; //打开位选锁存器使能端口

P1=table[i]; //写入要显示的数据

wela=0;

dula=1; //打开段选锁存器使能端口

dula=0;

for(uint j=0; j<10000; j++);

}

}

}

```

程序中使用的 table 数组对应了数码管共阴模式下显示 0 到 9 所需控制的各个线段。通过 for 循环遍历每一个数字,将其对应的位选信号和数据写入 P1 端口,同时在段选锁存器使能端口 DULA 上产生低电平脉冲,控制七段数码管相应位置发亮。

需要注意的是,程序中为了能够看到数码管显示效果,使用了一个简单的延时函数。如果需要实现更多功能或更复杂的显示效果,还需要根据实际需求进行相应的修改和完善。

解释:k=65; a2=k/10=65/10=6; a1=k-a210=65-610=5;

补充:把一个整数的各个位求出来的算法

a=12345,c,d,e,f,g;

c=a%10;个位d=a/10%10;十位e=a/100%10;百位

f=a/1000%10;千位g=c/10000;或者g=c/10000%10;万位

2(10) high=mid (11)low=mid

解释:折半法的思想,如果中间的数比现在的大,就找前面的,小就找后面的

3 (12) 5,25

解释:extern外部变量,不要内部的定义,直接用外部的

4 (13) 7,9,11

解释:static定义静态变量,除开定义那次,后面不会初始化自己

5 (14) 8,17

解释:static定义静态变量,除开定义那次,后面不会初始化自己

6 -125=-555

以上就是关于(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教全部的内容,包括:(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教、单片机程序中如何做到延时不影响数码管扫描显示、看下面一个程序:用中断扫描显示函数,然后用数码管显示出来。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9349284.html

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

发表评论

登录后才能评论

评论列表(0条)

保存