打印
[STM8]

STM8驱动矩形LED灯亮度问题

[复制链接]
1127|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小S咯|  楼主 | 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;   

                }          
}
是我函数有问题还是???求指教
沙发
xyz549040622| | 2018-6-14 13:39 | 只看该作者
算一算闪烁的时间,和这个有关了。

使用特权

评论回复
板凳
fengfeng的恒| | 2018-6-14 15:11 | 只看该作者
fun1是中断执行的函数么?到长时间执行一次?
sta是什么?什么情况下会被改变?
你的总体逻辑有点问题啊。
应该是中断来了,关闭上次打开的LED,然后打开这次需要点亮的LED,然后中断的间隔时间才是LED点亮的时间,用扫描的方式可以控制单独点亮甚至单独闪烁。

使用特权

评论回复
地板
gx_huang| | 2018-6-14 15:25 | 只看该作者
你的程序好长呀!
6行3列,1-28 case,如果更多,怎么办呀。
控制亮度,不控制时间长短的吗?
原理和思路搞清楚,亮度调整不是难事呀。

使用特权

评论回复
5
幸福小强| | 2018-6-14 15:32 | 只看该作者
什么中断里?定时器还是Io

使用特权

评论回复
6
小S咯|  楼主 | 2018-6-15 08:27 | 只看该作者
fengfeng的恒 发表于 2018-6-14 15:11
fun1是中断执行的函数么?到长时间执行一次?
sta是什么?什么情况下会被改变?
你的总体逻辑有点问题啊。

我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。

使用特权

评论回复
7
fengfeng的恒| | 2018-6-15 09:03 | 只看该作者
小S咯 发表于 2018-6-15 08:27
我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。

中断里面不应该加延时,重新规格一下程序结构更好。

使用特权

评论回复
8
toofree| | 2018-6-15 09:17 | 只看该作者
本帖最后由 toofree 于 2018-6-15 09:19 编辑
小S咯 发表于 2018-6-15 08:27
我找到原因了,OFF之前延时一小段时间就好了,应该是关闭的太快了。。

那就是刷新的太快了吧。一直在那开关开关,但就是开启后没有保持时间。你给出的程序的确是看不出问题的。主循环中没加延时吗?

使用特权

评论回复
9
小S咯|  楼主 | 2018-6-15 15:28 | 只看该作者
toofree 发表于 2018-6-15 09:17
那就是刷新的太快了吧。一直在那开关开关,但就是开启后没有保持时间。你给出的程序的确是看不出问题的。 ...

我放中断执行的,主循环没有延时。。。

使用特权

评论回复
10
小S咯|  楼主 | 2018-6-15 15:28 | 只看该作者
fengfeng的恒 发表于 2018-6-15 09:03
中断里面不应该加延时,重新规格一下程序结构更好。

我想过放主循环,但是还是速率不行。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

178

帖子

4

粉丝