电容加的少了吧 |
第50行挪到第68行后面试试 |
第57行 P11=0;//P12=1;P13=1; P10=1; "//"为何要注释掉这样会导致P11和P10都是0,显示会乱的 |
原因估计是三个数码管模块是一起显示的,做扫描显示时是三个数码管模块单独控制的,应该把三个数码管模块当作一个整体来考虑 |
hjx5548 发表于 2024-1-21 21:47 不说一下原因是啥? |
加电源,独立供电。 |
wulin 发表于 2024-1-18 15:38 找到原因了。非常感谢 |
hjx5548 发表于 2024-1-17 21:31 STC实验箱有好几款,你参照的是哪款。最好把你制作PCB的原理图贴出来,图片中有两处笔段只隐约显示一半,确实匪夷所思。 ![]() |
hjx5548 发表于 2024-1-18 09:47 延时肯定是要去掉的了,可以把三个显示函数放在同一个中断,反正定时时间一样,没必要搞三个定时器。然后定义个全局变量来替代延时,每进一次中断就+1,在中断里判断这个全局变量,判断到比之前大1说明就延时1毫秒,用这个逻辑来替代之前用的延时函数,其他也没什么了 |
qq475878026 发表于 2024-1-18 09:23 显示逻辑应该怎么修改? |
可以看出都是数码管最后一位比较亮,因为最后一位亮的时间最长,前一二位是亮2毫秒,最后一位是等所有程序执行一轮后才开始继续亮,估计得亮十几个毫秒。软件需要改动,把延时去掉,显示逻辑改一下 |
hjx5548 发表于 2024-1-18 05:02 消影顺序问题 第1,2,3位数码管的亮光时间都是2ms 但第4位数码管的亮光时间都是2+6+6=14ms 另外两组数码管同上 你把关灯代码放到延时后试试 如 ![]() 另外 中断里不要用延时! 中断里不要用延时!中断里不要用延时! |
lkc8210 发表于 2024-1-17 22:13 我不用定时器,把三个显示放在主函数的大循环里面,也是这个情况。 |
hjx5548 发表于 2024-1-17 20:54 你定时1ms 但Led_adc耗时8ms Led_On和Led_Off各耗时6ms ???????? |
wulin 发表于 2024-1-17 20:38 STC实验箱的原理图就是这样 |
lkc8210 发表于 2024-1-17 17:17 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; } 忘记贴上了 |
如果硬件没问题数码管亮度不一致通常是显示函数中各数码管点亮时间不均衡所致。从贴图和代码看,硬件和软件设计都不合理。STC8H的IO可以直接驱动数码管,根本用不着加三极管放大。 |
可能同消隐有些关联 |
Timer0_init(); Timer2_init(); Timer3_init(); 这三个函数呢? |