一、常用模块设计方法:
1、采用定时中断的动态LED显示
一般注意以下问题:
1)对LED的驱动必须周期性地进行,一般一个扫描周期
可取20毫秒;以四只共阴LED为例,其驱动信号波形如下:
第一只
第二只
第三只
第四只
扫描周期
2)为保证CPU用于其它工作的时间,中断服务程序执
行的时间应尽量段,每进入一次中断程序,只驱动LED
的一位;
t
中断服务
CPU执行其它任务
不
好
的
结
构
t
中断服务
较
好
的
结
构
3)扫描周期一般取20mS;如LED的只数为n,则定时
器定时应为20/n (Ms);
4)为保证单片机的单片应用,显示部分要尽量少占用
I/O口,也不要占用串行口,故一般用模拟串行方式驱
动LED,芯片可用74HC595(优于164)。由于HC芯片
的特性,可以不用限流电阻而直接驱动。74HC595内部
为双锁存器,信号移入后须再加一锁存信号,祥见实例
程序;
5)在具体程序设计上,可在RAM中设一显示缓冲区,
存放待显示的数据,大小与显示的位数相适应,一般在
主程序中调用数据处理程序产生数据,将其放入显示缓
冲区,中断程序从缓冲区中取要显示的数据,通过模拟
串行口将数据移入移位寄存器中从而驱动LED显示;
6)中断程序中使用一个称为“段控码”的变量和一个“指
针”对显示缓冲区操作。
7)汇编语言的示例电路及程序,驱动8只LED,用2片
74HC595;
单
片
机
595
595
STR
SCLK
DATA
SysDisp SEGMENT CODE
Strob bit P2.7
Sclk bit P2.6
Sin bit P2.5
extrn data (DigNum)
extrn data (SegCode)
extrn idata (DispBuf) ;显示缓冲区
;************************************************
;这里是T0定时中断服务子程序,显示位数为8位
;扫描频率由定时常数决定。在主程序中应事先设定T0的工
作方式
;并打开中断
CSEG AT 0bh ;地址定位
ljmp Disp
rseg SysDisp
using 1