在学习动态显示时,发现有一个问题,数字是正常显示了,但是好几个数字上面,某些不应该亮的地方,有一些微微亮,导致数字显示不是很清楚,代码如下(说明:数码管可以显示8个数字,共阳,P3用于选择亮哪一个,P0用于输出数字):
#include
#define uchar unsigned char
//随手抄来的,虽然我只显示0-7
uchar code table[] = {
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};
uchar i;
void main()
{
P3 = 0xFF;
P0 = 0xFF;
while(1)
{
for(i=0;i<8;i++)
{
//共阳,P3用于选择亮哪一个,P0用于输出数字,不同开发板不一样
P3 = 0xFF & (~( 1 << (i%8) ));//选择使用哪一个数码管
P0 = table[i];//数码管代码
}
}
}
后来仔细看了代码,才发现书上有延时的代码,也就是设置完成后,延时1到2毫秒,本来以为没什么用,没想到 一加上,效果立杆见影啊,修改后如下:
#include
#define uchar unsigned char
void delay1ms()
{
uchar j;
for(j=110;j>0;j--)
;
}
//随手抄来的,虽然我只显示0-7
uchar code table[] = {
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};
uchar i;
void main()
{
P3 = 0xFF;
P0 = 0xFF;
while(1)
{
for(i=0;i<8;i++)
{
//共阳,P3用于选择亮哪一个,P0用于输出数字,不同开发板不一样
P3 = 0xFF & (~( 1 << (i%8) ));//选择使用哪一个数码管
P0 = table[i];//数码管代码
/************加上延时后,数码管马上变清晰了**************/
delay1ms();
delay1ms();//试了下,2毫秒效果比较好
}
}
}
关键字:多位数码管 动态显示 虚影消除
引用地址:
多位数码管动态显示中的虚影消除
推荐阅读最新更新时间:2024-03-16 15:29
基于80C51单片机的LED动态显示实例
单片机80c51接线图如图1所示。图1中,4位显示管用共阳极。运用动态显示,采用循环导通或循环截止各位显示器的做法。当循环显示时间间隔较小时,由于人眼的暂留特性,就将看不出数码管的闪烁现象。 图1 单片机80c51接线图 控制系统设计 程序框图 图2 程序框图 程序清单 程序写入80c51芯片,如下 #include /*---------------------定义变量----------------------------------*/ sbit p1_0=P1^0; sbit p1_1=P1^1; sbit p1_2=P1^2; sbit p
[单片机]
多位共阴共阳数码管
多位数码管和单个数码管的区别就在于:数量 (说了跟没说一样) 单个数码管使用时,只要将八位显示接到单片机的 I/O 口(如 P1)就可以了,多个数码管就要考虑管脚的 复用 问题了。因为多位数码管不仅要在单个数码管显示某种字符,还要指定哪一个数码管显示。以 8 位数码管为例,就需要 16 根线控制,8 个控制段码显示,8 个控制位码显示,这样单片机还可以承受。要是 16 位数码管呢,那就是 8+16=24 位了,再多了呢 想想大街上的霓虹灯广告牌,博主倒是不知道那是个什么原理,不过如果是用单片机实现,使用上述方法的话,单片机引脚肯定不够用! 因此,对于多数码管,需要使用 锁存器 ,达到 引脚复用 的目的。
[单片机]
1602液晶动态显示
学了一段时间的51单片机,自己编了一些简单的程序,实现了一些比较简单的功能,我会把这些程序在后面几篇博客中贴上,供需要的人参考。 这些程序都是我调试好的,都能正常使用只是可能有些功能我没有写完,不过我都加了注释提醒,也比较简单,有时间的话,我会补全的。 有些地方写的不妥或不简洁,是因为能力所致,知识欠缺,现在正在恶补 下面的程序是控制1602液晶上下两行分别显示JUST DO IT !和DO YOUR BEST!两句话,并整屏左右移动三次,最后静态显示出来 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar c
[单片机]
单片机左右流水灯与数码管动态显示C程序
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略.以下是通过测试的源代码: /* *功能:用定时器0实现定时200毫秒流水灯, * 同时用定时器1实现动态显示654321, * 且蜂鸣器发声; *日期:2014-03-24 *作者:徐冉 *注意事项:若打开两个定时器时,必须使用两个定时器, * 否则两个定时器都不工作!!! **/ /**********AT89C52-RC 51hei单片机实验板**************/ /*************51hei-开发板*********************/ #include reg52
[单片机]
51单片机实现数码管动态显示60~0
硬件电路原理图 元件清单 C语言程序 #include reg51.h unsigned char table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管字符码 void show(unsigned char n); void delay(unsigned int k); void main() { unsigned char i; int j; while(1) { for(i=60;j=60,i 0;i--) while(j--) show(i); } } void show(unsigned char n) { P0=table ; P1
[单片机]
51单片机小白零基础教程——数码管的动态显示
数码管的动态显示 数码管的动态显示:数码管的动态显示又叫做数码管的动态扫描。动态显示的特点是:将所有位数码管段选线并联在一起,,由位选控制是哪一位数码管有效。所谓动态扫描显示即轮流向各位数码管送出字型码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度比较快,人眼已经无法分辨出来。 关于数码管以及74HC573锁存器的分析放在这,有详细的分析过程,请自行查看https://blog.csdn.net/chrisbum/article/details/115583779?spm=1001.2014.3001.5502 设计要求:在实验板
[单片机]
任务11:“数码管”的静态显示和动态显示
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍“数码管”的静态显示和动态显示。 一、人眼的视觉暂留效应 二、数码管的静态显示 三、74HC138内部工作原理 四、数码管的动态显示 #ifndef NIXIETUBE_CONFIG_H_ #define NIXIETUBE_CONFIG_H_ #define NIXIETUBE_PORT PORTB #define NIXIETUBE_DDR DDRB #define NIXIETUBE_HC595_CLOCK BIT1 #def
[单片机]