标题:
单片机8只数码管滚动显示16个数字的程序 亮度太低,速度太快 请高手支支招
[打印本页]
作者:
renwxzy
时间:
2021-4-30 21:11
标题:
单片机8只数码管滚动显示16个数字的程序 亮度太低,速度太快 请高手支支招
想写个滚动显示数字的程序,8个数码管滚动显示16个数字,虽然程序可以实现,但是亮度太低,速度太快,该怎么修改呢,请高手支支招
单片机源程序如下:
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00};
uchar code wei[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
void delay(uint x)
{
uchar j;
uint i;
for( i = 0; i < x; i++ )
for( j = 0; j < 111; j++ );
}
void main(void)
{
uchar i;
uint j;
P1 =P0 = 0x00;
while(1){
for( i = 0; i < 16; i++ ){
for( j = 0; j < 8; j++ ){
delay(1);
P1 = table[(i+j)%16];
P0 = wei[j];
delay(20);
}
delay(200);
}
}
}
作者:
人人学会单片机
时间:
2021-5-1 09:36
https://www.bilibili.com/video/BV1Jx411Z7yC?p=1
作者:
wulin
时间:
2021-5-1 10:47
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<111;j++);
}
void main(void)
{
uchar i,k;
uint j;
while(1)
{
P1=0x00;//段消隐
P0=wei[i];//送位码
P1=table[i];//送段码
i=++i%8;//8位动态显示计数
if(++j>=1000)//约1秒
{
j=0;
table[16]=table[0];
for(k=0;k<16;k++)//数组循环排序
table[k]=table[k+1];
}
delay(1);
}
}
复制代码
作者:
mengzhixinheng
时间:
2021-5-1 11:48
程序逻辑没错,但是不能那样延时,需要用时时扫描来做延时替换掉delay(200)
作者:
renwxzy
时间:
2021-5-1 16:30
明白了 多谢两位总工 受教了
作者:
renwxzy
时间:
2021-5-1 16:36
wulin 发表于 2021-5-1 10:47
多谢多谢 明白了 当时也想给每个数字延时 但是延时一长 就变成一个数字了 就是没想到每轮多次扫描
作者:
renwxzy
时间:
2021-5-1 16:37
mengzhixinheng 发表于 2021-5-1 11:48
程序逻辑没错,但是不能那样延时,需要用时时扫描来做延时替换掉delay(200)
多谢多谢 明白了
作者:
MOVEORDIE
时间:
2021-5-1 18:44
亮度低改小限流电阻仍不能满足要求的话,不要用空操作延时。可以把显示放中断,每次中断显示一位,显示完后不要关闭。等到下次进入中断刷新前再关闭显示,然后再显示下一位,这样的亮度很高,每次中断处理的时间也不长。我的中断时间是2.5ms,你可以根据自己的情况调整中断时间。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1