bbandpp 发表于 2009-6-3 11:08:21

STLed316应用不完全手册

STLED316是ST公司最近推出的数码管按键驱动芯片,具有较高的性价比,但在使用中也发现不少bug。
        1.使用按键中断的时候,按键有可能出现一直低电平的情况。
          解决方法:在主程序中,查询中断应该是否处在低电平,如果是,延迟一会然后读取按键值。即可解决。
        2.如果同时驱动按键和数码管的时候,在快速按动按键会出现数码管闪烁的情况。
          该情况出现原因是在读取按键值时,单片机需要先发送0x49指令给芯片,如果芯片正处于点亮数码管指令中,就将该指令认为是数码管的数值导致了数码管某一位闪烁。
          解决方法:在数码管点亮开始时置标志位,但数码管指令结束时才允许读取按键。
        注意事项:
         1.在读取按键值时需要一次读取两次,否则可能出现情况1的情况,中断线一直处于低电平的情况。
         2.STLED316的通信频率为1M。
         3.数码管的编码需要自己编写,不像Max7219那样可选择内部编码。
    上面即为我在使用该芯片过程所出现的问题及解决方法,上次出现的该芯片的某位消隐的情况,只在一块板子中出现,其他的没出现,估计是板子的问题。
    希望大家一起探讨解决在该芯片使用中出现的情况和问题。
    不过这芯片采购不大方便,现在据我所知只有力源有卖。但性价比还是比较高的。       
          我编写的基于STM32的程序:STLED316驱动 ourdev_450348.txt(文件大小:5K) (原文件名:STLED316.txt)           
          数据手册,里面有比较详细的电路图:STLED316手册 ourdev_450347.pdf(文件大小:439K) (原文件名:STled316.pdf)           
          网上找到的驱动:点击此处下载 ourdev_450349.txt(文件大小:4K) (原文件名:StLed316_DriverC.txt)
                            点击此处下载 ourdev_450350.txt(文件大小:2K) (原文件名:StLed316_driverH.txt)

             STLed316特点:

1、8段/7位,共阳极LED驱动输出
    其中一位可驱动 8个分离的LED
2、每段驱动电流高达40mA
3、仅需一个外接电阻,即可设置输出电流
4、8级亮度调节
5、支持 8X2矩阵键盘扫描
6、三线串行接口
7、支持低功耗待机模式
8、带施密特触发的输入端口可抑制噪声
9、内置上电复位和软启动电路
10、SO-24封装
11、工作电压:4.5~5.5V
12、工作温度:-40C~85C
13、力源零售价:3.33元

dragonwww 发表于 2009-6-23 22:10:13

你好,按你的思路,中断处理后我的程序中也检测了中断脚,如果为低则再读一遍,可是发现还是低电平呢?!邪门了,大侠请再指点一下啊!

bbandpp 发表于 2009-6-24 09:28:50

一般我在中断中读取几测,比较读取的值。
然后在main程序中再读取是否为低电平,如果是低就去读取。但这次读取的值不要。

wuzhanguo 发表于 2009-9-9 16:53:11

你好,我仿照您给的文件写了STLED316的程序,可是读取按键值的时候出现了问题,总是读不回键值。我用的微控制器是AT89S52。
附件中是我关于读取键值的程序代码。
麻烦高手们帮我看看!谢谢!!!
程序代码ourdev_479257.txt(文件大小:922字节) (原文件名:新建 文本文档 (2).txt)

pb486 发表于 2009-9-12 21:52:46

看看

xiaobin7578357 发表于 2009-11-17 15:45:52

学习学习,等待有关AT89S52应用的方案。

leezgnj 发表于 2009-12-27 03:51:14

我用了一下这个片子,其他问题倒是没有,只是SEG1-SEG8 电平拉不下去,只能低到4伏左右,根本无法点亮,只能用示波器看看,哪里出错了??

xingliu 发表于 2011-12-28 09:56:00

第2点应该不能说是BUG吧。
因为读取按键值应该是中断发生以后才去读。
你可能是用中断处理函数直接调用的这个读取按键值的方法。
那么就可能发生这种情况。因为这时主程序有可能正在刷新数码管显示。

这个多线程程序需要互斥是一个道理。

像你现在这样。一旦   “if(bitSend==0)   //查询数码管指令是否已结束 ”
这条语句发现bitsend不等于0.程序就跳出去了。
那么就没有读取按键值。那当然你的中断引脚总是在低电平啦。
所以第1点的BUG应该也是不存在的了。

像这样的程序我感觉应该这样处理。
发生按键中断,只应该置一个标志。然后就中断返回。这样中断处理程序非常迅速。
而主程序只有在扫描数码管结束之后或开始之前去查询这个中断标志,然后读取键值。

多线程程序中若按键读取是一个线程、扫描数码管是一个线程。那么就应该设置一个互斥量。
中断程序激活按键读取线程。按键读取线程工作之前检查下互斥量。若不满足条件则等待互斥量满足条件再读。
而扫描数码管线程每次开始扫描数码管之前置位互斥量。

nome2 发表于 2014-9-23 11:42:44

STLed316的三线串行接口是标准的接口协议吗?
页: [1]
查看完整版本: STLed316应用不完全手册