动态显示程序,必须不停的、反复的调用。
稍有停顿,就只能看见最后显示的一位字符。
解决方法,可以参考我以前回答的问题:
>
你这个程序,数码管显示效果怎样啊。是不是很闪的?
这个程序,我觉得那是相当的烂,相当啊,相当,相当!那个中断这样用有意思吗
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
以上就是关于(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教全部的内容,包括:(单片机)数码管程序单独运行可以正常显示,加了扫描程序后就只能显示一位了求大神指教、单片机程序中如何做到延时不影响数码管扫描显示、看下面一个程序:用中断扫描显示函数,然后用数码管显示出来。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)