ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM8] STM8驱动矩形LED灯亮度问题

[复制链接]
263|9
 楼主 | 2018-6-14 11:13 | 显示全部楼层 |阅读模式
六行三列LED灯,通过三极管接到9个IO口上,静态的时候亮度很足,。现在要让LED灯闪动,把闪动的函数放在中断里,亮度就很低。。
R代表行,L代表列,ON点亮,OFF灭
void fun1(void)          
{
        R1_ON;  
        L1_ON;L1_OFF;
        L2_ON;L2_OFF;
        L3_ON;L3_OFF;
        R1_OFF;
        switch(sta)
                {       
                        case 1:  
                          //ROW2
                      R2_ON;
                      L1_ON;     
                      L1_OFF;
                      R2_OFF;
                      break;
                    case 2:
                      //ROW2
                      R2_ON;
                      L1_ON;     
                      L1_OFF;
                      R2_OFF;   
                     
                      //ROW3
                      R3_ON;
                      L1_ON;     
                      L1_OFF;
                      R3_OFF;  
                      break;
                    case 3:
                      //ROW2
                      R2_ON;
                      L1_ON;     
                      L1_OFF;
                      R2_OFF;   
                     
                      //ROW3
                      R3_ON;
                      L1_ON;     
                      L1_OFF;
                      R3_OFF;   
                     
                      //ROW4
                      R4_ON;
                      L1_ON;     
                      L1_OFF;
                      R4_OFF;
                      break;
                    case 4:
                      //ROW2
                      R2_ON;
                      L1_ON;     
                      L1_OFF;
                      R2_OFF;   
                     
                      //ROW3
                      R3_ON;
                      L1_ON;     
                      L1_OFF;
                      R3_OFF;   
                     
                      //ROW4
                      R4_ON;
                      L1_ON;     
                      L1_OFF;
                      R4_OFF;
                     
                      //ROW5
                      R5_ON;
                      L1_ON;     
                      L1_OFF;
                      R5_OFF;
                      break;
                    case 5:   
                      //ROW1
                      R1_ON;
                      L1_ON;   
                      L1_OFF;
                      R1_OFF;     
                      //ROW3
                      R3_ON;
                      L1_ON;     
                      L1_OFF;
                      R3_OFF;                            
                      //ROW4
                      R4_ON;
                      L1_ON;     
                      L1_OFF;
                      R4_OFF;
                     
                      //ROW5
                      R5_ON;
                      L1_ON;     
                      L1_OFF;
                      R5_OFF;
                      break;  
                    case 6:
                      //ROW1
                      R1_ON;
                      L1_ON;   
                      L1_OFF;
                      R1_OFF;                                    
                      //ROW5
                      R5_ON;
                      L1_ON;     
                      L1_OFF;
                      R5_OFF;
                      break;  
                    case 7:
                      //ROW2
                      R2_ON;
                      L2_ON;L3_ON;     
                      L2_OFF;L3_OFF;
                      R2_OFF;
                      break;
                    case 8:
                      //ROW2
                      R2_ON;
                      L3_ON;     
                      L3_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L3_ON;     
                      L3_OFF;
                      R3_OFF;
                      break;
                    case 9:
                      //ROW2
                      R2_ON;
                      L3_ON;     
                      L3_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L3_ON;     
                      L3_OFF;
                      R3_OFF;  
                     
                      //ROW4
                      R4_ON;
                      L3_ON;     
                      L3_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L2_ON;     
                      L2_OFF;
                      R5_OFF;  
                      break;                    
                    case 10:
                      //ROW2
                      R2_ON;
                      L3_ON;     
                      L3_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L3_ON;     
                      L3_OFF;
                      R3_OFF;  
                     
                      //ROW4
                      R4_ON;
                      L3_ON;     
                      L3_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L2_ON;     
                      L2_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L3_ON;     
                      L3_OFF;
                      R6_OFF;
                      break;
                    case 11:
                      //ROW1
                      R1_ON;
                      L3_ON;     
                      L3_OFF;
                      R1_OFF;
                     
                      //ROW3
                      R3_ON;
                      L3_ON;     
                      L3_OFF;
                      R3_OFF;  
                     
                      //ROW4
                      R4_ON;
                      L3_ON;     
                      L3_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L2_ON;     
                      L2_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L3_ON;     
                      L3_OFF;
                      R6_OFF;
                      break;
                    case 12:                        
                      //ROW5
                      R5_ON;
                      L2_ON;     
                      L2_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L3_ON;     
                      L3_OFF;
                      R6_OFF;
                      break;
                    case 13:                                              
                      //ROW6
                      R6_ON;
                      L3_ON;     
                      L3_OFF;
                      R6_OFF;
                      break;
                    case 14:                                              
                      //ROW2
                      R2_ON;
                      L2_ON;     
                      L2_OFF;
                      R2_OFF;
                      break;
                    case 15:                                              
                      //ROW2
                      R2_ON;
                      L2_ON;     
                      L2_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L2_ON;     
                      L2_OFF;
                      R3_OFF;
                      break;  
                    case 16:                                              
                      //ROW2
                      R2_ON;
                      L2_ON;     
                      L2_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L2_ON;     
                      L2_OFF;
                      R3_OFF;
                     
                      //ROW4
                      R4_ON;
                      L2_ON;     
                      L2_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L3_ON;     
                      L3_OFF;
                      R5_OFF;
                      break;
                    case 17:                                              
                      //ROW2
                      R2_ON;
                      L2_ON;     
                      L2_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L2_ON;     
                      L2_OFF;
                      R3_OFF;
                     
                      //ROW4
                      R4_ON;
                      L2_ON;     
                      L2_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L3_ON;     
                      L3_OFF;
                      R5_OFF;   
                     
                      //ROW6
                      R6_ON;
                      L2_ON;L1_ON;   
                      L2_OFF;L1_OFF;
                      R6_OFF;
                      break;  
                    case 18:                                              
                      //ROW1
                      R1_ON;
                      L2_ON;     
                      L2_OFF;
                      R1_OFF;
                     
                      //ROW3
                      R3_ON;
                      L2_ON;     
                      L2_OFF;
                      R3_OFF;
                     
                      //ROW4
                      R4_ON;
                      L2_ON;     
                      L2_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L3_ON;     
                      L3_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L2_ON;   
                      L2_OFF;
                      R6_OFF;
                      break;
                    case 19:                                                                    
                      //ROW4
                      R4_ON;
                      L2_ON;     
                      L2_OFF;
                      R4_OFF;  
                     
                      //ROW5
                      R5_ON;
                      L3_ON;     
                      L3_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L2_ON;   
                      L2_OFF;
                      R6_OFF;
                      break;  
                    case 20:                                                                                          
                      //ROW5
                      R5_ON;
                      L3_ON;     
                      L3_OFF;
                      R5_OFF;  
                     
                      //ROW6
                      R6_ON;
                      L2_ON;   
                      L2_OFF;
                      R6_OFF;
                      break;
                    case 21:                                                                                                                
                      //ROW6
                      R6_ON;
                      L2_ON;   
                      L2_OFF;
                      R6_OFF;
                      break;
                    case 22:                                                                                                                
                      //ROW2
                      R2_ON;
                      L1_ON;   
                      L1_OFF;
                      R2_OFF;
                      break;
                    case 23:                                                                                                                
                      //ROW2
                      R2_ON;
                      L1_ON;   
                      L1_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L1_ON;   
                      L1_OFF;
                      R3_OFF;
                      break;
                    case 24:                                                                                                                
                      //ROW2
                      R2_ON;
                      L3_ON;   
                      L3_OFF;
                      R2_OFF;
                      break;
                    case 25:                                                                                                                
                      //ROW2
                      R2_ON;
                      L3_ON;   
                      L3_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L3_ON;   
                      L3_OFF;
                      R3_OFF;
                      break;  
                    case 26:                                                                                                                
                      //ROW2
                      R2_ON;
                      L2_ON;   
                      L2_OFF;
                      R2_OFF;
                      break;
                    case 27:                                                                                                                
                      //ROW2
                      R2_ON;
                      L2_ON;   
                      L2_OFF;
                      R2_OFF;
                     
                      //ROW3
                      R3_ON;
                      L2_ON;   
                      L2_OFF;
                      R3_OFF;
                      break;
                     case 28:
                             sta=1;
                     break;
                        default:
                                sta=1;
                                break;   

                }          
}
是我函数有问题还是???求指教
| 2018-6-14 13:39 | 显示全部楼层
算一算闪烁的时间,和这个有关了。
| 2018-6-14 15:11 | 显示全部楼层
fun1是中断执行的函数么?到长时间执行一次?
sta是什么?什么情况下会被改变?
你的总体逻辑有点问题啊。
应该是中断来了,关闭上次打开的LED,然后打开这次需要点亮的LED,然后中断的间隔时间才是LED点亮的时间,用扫描的方式可以控制单独点亮甚至单独闪烁。
| 2018-6-14 15:25 | 显示全部楼层
你的程序好长呀!
6行3列,1-28 case,如果更多,怎么办呀。
控制亮度,不控制时间长短的吗?
原理和思路搞清楚,亮度调整不是难事呀。
| 2018-6-14 15:32 | 显示全部楼层
什么中断里?定时器还是Io
 楼主 | 2018-6-15 08:27 | 显示全部楼层
fengfeng的恒 发表于 2018-6-14 15:11
fun1是中断执行的函数么?到长时间执行一次?
sta是什么?什么情况下会被改变?
你的总体逻辑有点问题啊。

我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。
| 2018-6-15 09:03 | 显示全部楼层
小S咯 发表于 2018-6-15 08:27
我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。

中断里面不应该加延时,重新规格一下程序结构更好。
| 2018-6-15 09:17 | 显示全部楼层
本帖最后由 toofree 于 2018-6-15 09:19 编辑
小S咯 发表于 2018-6-15 08:27
我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。

那就是刷新的太快了吧。一直在那开关开关,但就是开启后没有保持时间。你给出的程序的确是看不出问题的。主循环中没加延时吗?
 楼主 | 2018-6-15 15:28 | 显示全部楼层
toofree 发表于 2018-6-15 09:17
那就是刷新的太快了吧。一直在那开关开关,但就是开启后没有保持时间。你给出的程序的确是看不出问题的。 ...

我放中断执行的,主循环没有延时。。。
 楼主 | 2018-6-15 15:28 | 显示全部楼层
fengfeng的恒 发表于 2018-6-15 09:03
中断里面不应该加延时,重新规格一下程序结构更好。

我想过放主循环,但是还是速率不行。。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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