资源描述:
《单片机驱动数码管动态扫描的优化方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单片机驱动数码管动态扫描的优化方法/*单片机驱动数码管动态扫描方式的优化适用于驱动能力受限且对显示效果要求不很严格的情况假定单片机引脚输入和输出电流的能力均为20mA,若引脚直接驱动数码管,常规动态扫描方式当某位的8个灯全亮时每个灯只能分配2.5mA电流。本文介绍的方法将要显示的数字作为一个整体进行计算拆分,逐次显示,每次显示两个数上的2或4个灯,或一个数上的1或2个灯。这样每个数上每次最多显示2个灯,则通过每个灯的电流可设计为10mA。以显示4位不带点的数字为例,统计分析表明,平均扫描一遍需显示8.8次,而
2、传统方法为4次,传统方法的亮度系数为2.5/4=0.625,本文优化方法的亮度系数为10/8.8=1.136,表明本文方法可将平均亮度提高接近一倍本文优化方法缺点:1.需多占用些代码空间2.不同数字亮度会稍有差别,幸好人眼对亮度变化不很敏感主函数每隔一段时间调用js_sc()函数,将计算出的输出序列shuchu[i][j]逐次显示,shuchu[][0]、shuchu[][2]为位选,shuchu[][1]、shuchu[][3]为片选,shuchu[i][0]==0xff结尾推荐使用定时器中断扫描输出显示,
3、因调用js_sc()函数更新shuchu[i][j]时在后台进行,数字显示无缝更替本程序代码尚存在进一步优化的空间*/unsignedcharseg[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x80,0x61,0x10,0x00};//点,c,-,空//共阴数码管字模unsignedcharheng_seg[23]={0x06,0x02,0x
4、05,0x05,0x04,0x05,0x06,0x03,0x07,0x06,0x07,0x03,0x06,0x06,0x05,0x06,0x07,0x04,0x08,0x07,0x01,0x03,0x01,0x00};//灯数volatileunsignedcharshuchu[16][4];//输出序列volatileuint8_tzuhe_n_count=0,s=0;volatileuint16_tt0cnt=0,DATA_seg_show_T0=0xff;//T0中断扫描volatileunsigned
5、charshuchu_i=0;//#ifdefSEG_interrupt//uint8_tshuchu_i=0;//#endif;voidjs_zuhe_min_t(uint8_tm1,uint8_tm2,uint8_tzuhe_n[4][8],uint8_t*zuhe_min,uint8_tflag)//flag:横竖方向标志,取固定值4或2{zuhe_min[0]=0xff;//初始值为0//=============================if(flag!=4){for(uint8_ti=0;i
6、7、====================for(uint8_ti=0;i8、0xff&&(zuhe_n[i][j]+zuhe_n[i][k]+zuhe_n[u][j]+zuhe_n[u][k]