找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

STC单片机动态显示数码管程序显示亮度不一致原因是什么?

查看数: 2822 | 评论数: 19 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-1-17 16:41

正文摘要:

单片机源程序如下: #include "STC8H.h" #include "intrins.h" unsigned char NixieTable[]={ 0x03,/*0*/         0x9F,/*1*/        &nbs ...

回复

ID:111875 发表于 2024-2-11 14:55
电容加的少了吧
ID:1109793 发表于 2024-2-10 19:00
第50行挪到第68行后面试试
ID:849913 发表于 2024-2-9 22:45
第57行 P11=0;//P12=1;P13=1; P10=1; "//"为何要注释掉这样会导致P11和P10都是0,显示会乱的
ID:384109 发表于 2024-1-22 11:10
原因估计是三个数码管模块是一起显示的,做扫描显示时是三个数码管模块单独控制的,应该把三个数码管模块当作一个整体来考虑
ID:161164 发表于 2024-1-22 09:04
hjx5548 发表于 2024-1-21 21:47
找到原因了。非常感谢

不说一下原因是啥?
ID:1102070 发表于 2024-1-22 08:25
加电源,独立供电。
ID:72649 发表于 2024-1-21 21:47
wulin 发表于 2024-1-18 15:38
STC实验箱有好几款,你参照的是哪款。最好把你制作PCB的原理图贴出来,图片中有两处笔段只隐约显示一半, ...

找到原因了。非常感谢
ID:213173 发表于 2024-1-18 15:38
hjx5548 发表于 2024-1-17 21:31
STC实验箱的原理图就是这样

STC实验箱有好几款,你参照的是哪款。最好把你制作PCB的原理图贴出来,图片中有两处笔段只隐约显示一半,确实匪夷所思。

ID:192020 发表于 2024-1-18 10:01
hjx5548 发表于 2024-1-18 09:47
显示逻辑应该怎么修改?

延时肯定是要去掉的了,可以把三个显示函数放在同一个中断,反正定时时间一样,没必要搞三个定时器。然后定义个全局变量来替代延时,每进一次中断就+1,在中断里判断这个全局变量,判断到比之前大1说明就延时1毫秒,用这个逻辑来替代之前用的延时函数,其他也没什么了
ID:72649 发表于 2024-1-18 09:47
qq475878026 发表于 2024-1-18 09:23
可以看出都是数码管最后一位比较亮,因为最后一位亮的时间最长,前一二位是亮2毫秒,最后一位是等所有程序 ...

显示逻辑应该怎么修改?
ID:192020 发表于 2024-1-18 09:23
可以看出都是数码管最后一位比较亮,因为最后一位亮的时间最长,前一二位是亮2毫秒,最后一位是等所有程序执行一轮后才开始继续亮,估计得亮十几个毫秒。软件需要改动,把延时去掉,显示逻辑改一下
ID:161164 发表于 2024-1-18 09:21
hjx5548 发表于 2024-1-18 05:02
我不用定时器,把三个显示放在主函数的大循环里面,也是这个情况。

消影顺序问题
第1,2,3位数码管的亮光时间都是2ms
但第4位数码管的亮光时间都是2+6+6=14ms
另外两组数码管同上
你把关灯代码放到延时后试试



另外
中断里不要用延时!
中断里不要用延时!中断里不要用延时!
ID:72649 发表于 2024-1-18 05:02
lkc8210 发表于 2024-1-17 22:13
你定时1ms
但Led_adc耗时8ms
Led_On和Led_Off各耗时6ms

我不用定时器,把三个显示放在主函数的大循环里面,也是这个情况。
ID:161164 发表于 2024-1-17 22:13
hjx5548 发表于 2024-1-17 20:54
void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定时器时钟12T模式

你定时1ms
但Led_adc耗时8ms
Led_On和Led_Off各耗时6ms
????????
ID:72649 发表于 2024-1-17 21:31
wulin 发表于 2024-1-17 20:38
如果硬件没问题数码管亮度不一致通常是显示函数中各数码管点亮时间不均衡所致。从贴图和代码看,硬件和软件 ...

STC实验箱的原理图就是这样
ID:72649 发表于 2024-1-17 20:54
lkc8210 发表于 2024-1-17 17:17
Timer0_init();
        Timer2_init();
        Timer3_init();

void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
                                TL0 = 0xCD;                                //设置定时初始值
                                TH0 = 0xD4;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;      //开T0中断
        EA=1;       
}

void Timer2_init()  //1ms
{
        AUXR &= 0xFB;                        //定时器时钟12T模式
        T2L = 0x66;                                //设置定时初始值
        T2H = 0xFC;                                //设置定时初始值
        AUXR |= 0x10;                        //定时器2开始计时
    IE2 =  0x04;                                  //使能定时器中断
    EA = 1;
}

void Timer3_init()  //1ms
{
        T4T3M &= 0xFD;                        //定时器时钟12T模式
        T3L = 0x66;                                //设置定时初始值
        T3H = 0xFC;                                //设置定时初始值
        T4T3M |= 0x08;                        //定时器3开始计时                              
        IE2 = 0x20;         //使能定时器中断
    EA = 1;
}
忘记贴上了
ID:213173 发表于 2024-1-17 20:38
如果硬件没问题数码管亮度不一致通常是显示函数中各数码管点亮时间不均衡所致。从贴图和代码看,硬件和软件设计都不合理。STC8H的IO可以直接驱动数码管,根本用不着加三极管放大。
ID:332444 发表于 2024-1-17 19:12
可能同消隐有些关联
ID:161164 发表于 2024-1-17 17:17
        Timer0_init();
        Timer2_init();
        Timer3_init();
这三个函数呢?

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表