部上拉电阻,那些被外部拉低的引脚会输出一个电流。P1口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。此外,P1.0和P1.1是多功能的。P1.0还可以作为定时器/计数器2的外部输入端T2。P1.1还可以作为定时器/计数器2的外部控制端T2EX。
P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动4个TTL负载。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。P3口除作为一般I/O口外,还有其他一些复用功能如下:
P3.0---RXD,串行输入口。 P3.1---TXD,串行输出口。 P3.2---INT0,外部中断0的请求。 P3.3---INT1,外部中断1的请求。
P3.4---T0,定时器/计数器0外部计数脉冲。 P3.5---T1,定时器/计数器,1外部计数脉冲。 P3.6---WR,外部数据存储器写选通。 P3.7---RD,外部数据存储器读选通。
RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。
ALE(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
XTAL1(19引脚)):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。
3.3 总电路图
在总电路图中,复位电路与晶振电路是单片机最小系统中包括的电路,复位连在AT89C52的9引脚,而晶振电路的两条接线分别与18、19引脚相连。对于本次设计,还需要将8个LED灯接入电阻中,并且分别与8个限流电阻相连保护发光二极管,与单片机的P1口相连。4个按键S0、S1、S2、S3分别连单片机的P3.4、P3.5、P3.3和P3.1由这四个按键来控制灯的启动、停止、由上而下、由下而上。
由按键控制功能的LED工作的方式,其中的LED采取共阳极接法,通过依次向连接LED的I/O口送出低电平,可实现题目要求的功能。
4
节日彩灯控制器的总电路图如图3-5所示。
图3-3 总电路图
第4章 软件设计
4.1 主程序设计
节日彩灯控制器设计的功能是:当在没有任何按键按下时,8个LED灯均呈现灭灯的状态,并一直在等待按键的按下。当按下开始键S0键后,8个LED灯自上而下循环流动,检测有没有按下停止键即S1,若按下停止键S1则立即停止流动,否则检测是否按下按键S2或者按键S3,若都没有按下则灯继续保持原先的状态流动。当按键S3被按下,灯自下而上流动,同样也要检测是否按下停止键S1,按下则停止,否则灯将继续自下而上流动。同理,当按键S2被按下时,灯自上而下流动,如果按下停止键S1,按下则停止,否则灯将继续自上而下流动。当既按下S2又按下S3时,灯将先自上而下流动,后自下而上流动。通过四个键S1、S2、S3、S4的控制,实现彩灯的亮、灭和彩灯的流动显示,以及在不同情况下的彩灯的流动变换。这是整个节日彩灯的完整控制与流动过程。
5
节日彩灯控制器的主程序流程图如图4-1所示
图4-1 主程序流程图
开始 N 键1接下? Y 调用san子程序 N 键2接下? Y 灯灭 N 键3接下? Y 调用san子程序 键4接下? Y 调用wu子程序 6
4.2 LED灯子程序设计
在本设计中的LED灯的流动有两个方向,分别为自上而下和自下而上,无论是哪种方式,其LED灯的子程序都是一样的过程。
首先赋初值,取表中的数,将数值给P1口,然后判断LED灯是否循环完了8次。如果循环完8次则对应LED灯亮,并延时输出。如果没有循环完8次,将返回原处重新开始。因而得到流程图为图4-2所示。
开始 初始化 8次是否循环完? 给P1赋值对应灯亮 延时
图4-2 LED灯子程序流程图
返回 4.2 延时子程序设计
对于LED灯循环显示程序来说,由于单片机运行速度非常快,以至于当灯亮时人眼看不见,不方便检测与监控,因此在程序中需要添加延时子程序。同时延时子程序还可以有效的防止抖动。延时子程序运用了两个for循环嵌套,外循环执行一次,内循环执行z次,因此延时时间为100z。
7
延时子程序的流程图如图4-3所示。
x>0? 给x赋初值 为100 开始 定义无符号整型数x、y 给y赋初值为z
结束 y>0? x自减一 y自减一
图4-3 子程序流程图
4.3 源程序
#include
#define uint unsigned int #define uchar unsigned char void san(); void wu();
void delay(uint);
8