3.1.1 硬件电路
硬件电路如图3所示.1所示。AT89S51是MCS-一种51系列单片机使用40英尺DIP封装, 1~8脚4并行输入/输出端口(P0口、P1口、P2口、P三口之一,称为三口P-1-口,8条口线P1。0~P1。这8个引脚最多可以带20个mA灌装电流负载可直接驱动发光二极管D0~D7为8只LED,各经300Ω电阻限流后连接 5V电源与P1端口之间。图为单片机提供工作时钟。9脚所接RC电路构成单片机上电复位电路,单片机只后才能开始执行程序。
图3.1 AT89S51单片机P1口外接8只LED发光二极管
工作原理
当P1。0~P1。7中的一个端口是低电平时,相应的发光二极管是亮的,是高电平时灭的。我们只需要控制P1口你的电平状态可以控制8个LED的亮与灭。例如使(P1)=01010101B=55H, D7、D5、D3、D14只LED亮,D6、D4、D2、D04只LED灭绝,从效果上看,亮与灭是相隔的;相反,使(P1)=10101010B=AAH,则另外4只LED明亮的,如果反复从一定的时间间隔开始P1口轮流输出55H和AAH,则P1口上8只LED会呈现流水彩灯的效果。
3.1.2 控制程序
实现上述8只LED发光二极管控制程序非常简单,可以用不同的指令编程。以下是几种模式的彩灯控制程序。
1. 将立即数送P1口的程序
ORG 0000H ; 从程序存储器中定义程序H单元开始存放
LOOP: MOV P1,#55H ; 立即数55H送P1口,4只LED亮
SJMP LOOP ; 原地踏步
END ; 程序结束
第一条指示程序在程序存储中的存储位置,第二条指示将立即计算55H传送到P1口,对应的LED灯亮,第三条指令是无条件转移指令,即单片机执行上一条指令后,将反复指示该指令,直到电源关闭,第四条是程序结束指令(本程序演示效果见随书CD)。
2. 由累加器A控制P1口的程序
ORG 0000H
LOOP: MOV A,#0AAH ;将立即数AAH送累加器A
MOV P1, A ;累加器A中的数字发送P1端口
SJMP LOOP ;转移到LOOP
END
3. 流水彩灯程序
最简单的流水彩灯程序也很简单,程序流程图如图3所示.程序如下。
图3.2 流水式彩灯程序流程图最简单
ORG 0000H
LOOP: MOV P1,#55H ;将立即数55H送P1端口
LCALL TIME ;延迟子程序TIME
MOV P1,#0AAH ;将立即数AAH送P1端口
LCALL TIME ;延迟子程序TIME
SJMP LOOP ;转移到LOOP
TIME: MOV R6,#200 ;延时子程序TIME
TIME1:MOV R7,#200
TIME2:NOP
NOP
NOP
DJNZ R7,TIME2
DJNZ R6,TIME1
RET
END
4. 开幕式和闭幕式彩灯程序
ORG 0000H
LJMP MAIN ;跳转到主程序
ORG 0030H
MAIN: MOV R0,#8 ;R0送循环次数8
MOV DPTR,#TAB ;赋值数据指针
LOOP: MOV A,#00H ;
MOVC A,@ A DPTR
MOV P1,A
LCALL TIME
INC DPL
DJNZ R0,LOOP
SJMP MAIN
TIME: MOV R6,#200
TIME1: MOV R7,#200
TIME2: NOP
NOP
NOP
DJNZ R7,TIME2
DJNZ R6,TIME1
RET
TAB: DB 81H,0C3H,0E7H,0FFH,18H,3CH,7EH,0FFH
END
3.1.3 编辑、编译和下载源程序
打开“伟福”模拟仿真软件进行程序的编辑、编译。