的方法
用 口驱动段式 (数码管)的方法相信大家比较清楚,但用 口直接驱动段式 的方法相对复杂一些。在网上搜了一
下单片机 口驱动段式 的方法,大部分资料讲得不够清晰、具体,而且简单问题复杂化。后来查了 的显示原理,结
合网上的相关介绍,发现 口直接驱动段式 原理比较简单,用几句话就可以描述清楚:
和 的显示原理不一样: 是加正向电压发光,而 必须交替加正、反向电压才会持续显示(可以做个实验,
如果把恒定电压加到 的一段上,该段会显示一下,但马上不能显示,而且长时间加恒定电压,会加速 的老化和损
坏)
常听说 ,,是什么意思呢?对于 ,假如 的显示电压是 ,则 是
,也就是说在 电压作用时, 有显示; 及以下的电压作用时没有显示
普通单片机 口不能直接输出半高电平(),但可以用相等的上下拉电阻实现,当 口设置为输入(高阻)时,
由于上下拉电阻的分压作用,则产生一个半高电平()
知 道 了 以 上 点 后 , 动 态 驱 动 就 不 是 难 事 了 , 对 于 段 的 ( 个 , 个 , 显 示 电 压 为
,),驱动方法如下:
、 四个 采用交替扫描的方式,每个 在相邻两次扫描时又进行电压交变的方式。
、 若扫描到某一个 时,该 输出 ()
与该 相连的 输出与 相反,,则该相连点亮;
与该 相连的 输出与 相同,,则该相连点不亮。
、其他没有扫描到的 ,单片机 口为输入,从而产生 (),不管 为何值,,故该点
不亮。
本人用 段的 自制了一个数字钟表,验证了以上方法的可行性,制作过程(包括原理图、源代码)详见 !"""
#$%&' #!%$(( )
说明:由于管脚不够用,所以时钟芯片 DS1302 的 RST 和 LCD 的一个 SEG 是复用的,只要在这个 SEG 无效的时候去读取时间就
可以了,另外,3PIN 串口是 ISP 下载程序用的。
2.备料