闪烁LED灯的设计---单片机课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

闪烁LED灯的设计

本设计的闪烁小灯控制器,可使小灯轮流点亮、逐个点亮、间隔闪亮。如果要控制交流彩灯,可在P1端口加接继电器或可控硅接口电路。本设计可应用在广告彩灯控制器和舞台灯光控制器等领域。

一、系统硬件电路的设计

图1为闪烁小灯控制器的电路原理图,其中:单片机采用AT89C2051,P1口作LED发光管输出控制用,P3.0-P3.2口为闪烁方式控制开关K1、K2、K3按键接口,P3.3口的按键作备用,限流电阻为510Ω,发光管工作电流约10mA,采用12MHz晶振。

图1 闪烁小灯电路原理图

二、系统主要程序的设计

1、主程序

通过扫描P3.0-P3.2口,判断是否有按键按下,然后在20H内存单元的低3

位的对应位置1标志,确定应执行的闪烁功能。当20H.0为1时,发光管轮流点亮;当20H.1为1时,发光管逐点点亮;当20H.2为1时,发光管间隔闪亮。在主程序对20H的低3位进行位值判定后,转入相应的闪烁控制程序。上电初始化时,对20H的最低位置1,系统进入轮流点亮方式。主程序流程图如图2所示。

2、键扫描子程序

因按键较少,采用直接端口扫描键开关,用软件延时消抖确认后,对20H 内存单元相应的位置1,并把其余位清0。

图2 主程序流程图

3、闪烁控制程序

闪烁控制程序用来控制P1口的发光管发光变化方式,其中:

执行功能程序0(FUN0)时的P1口输出值变化为11111110→延时→11111101→延时→11111011→延时→11110111→延时→11101111→延时→11011111→延时→10111111→延时→01111111→延时→结束转主程序。

执行功能程序1(FUN1)时的P1口输出变化为11111110→延时→11111100

→延时→11111000→延时→11110000→延时→11100000→延时→11000000→延时→10000000→延时→00000000→延时→结束转主程序。

执行功能程序2(FUN2)时的P1口输出变化为10101010→延时→01010101→延时→结束转主程序。

4、延时子程序

延时子程序有10ms和0.5s两个,用作键扫描消抖及发光管闪烁延时。发光管闪烁的快慢可由R4寄存器内的初值进行改变。

本控制器在使用中,如果要改变闪烁的方式,可按下相应的功能按键。当一个完整的闪烁循环结束后,即可转入新的闪烁方式。由于键扫描是在闪烁循环结束时进行,因此,功能开关按下的时间应较长才能被读入。改进的方法是把DL05S 延时子程序用键扫描子程序来代替,这样,只要按下按键即可被键扫描程序读入。

三、汇编语言

以下是闪烁LED小灯控制器完整的汇编程序清单:

小灯控制程序

中断入口程序

ORG 0000H ;程序执行开始地址

LJMP START ;跳到START执行

ORG 0003H ;外中断0中断入口地址

RETI ;中断返回(不开中断)

ORG 000BH ;定时器T0中断入口地址

RETI ;中断返回(不开中断)

ORG 0013H ;外中断1中断入口地址

RETI ;中断返回(不开中断)

ORG 001BH ;定时器T1中断入口地址

RETI ;中断返回(不开中断)

ORG 0023H ;串行口中断入口地址

RETI ;中断返回(不开中断)

初始化程序

CLEAR: MOV 20H,#00H ;20H单元内存清0(闪烁标志清0) SETB 00H ;20H.0位置1(上电时自动执行闪烁

功能1)

RET ;子程序返回

主程序

START: ACALL CLEAR ;调用初始化子程序

MAIN: LCALL KEYWORK ;调用键扫描子程序

JB 00H,FUN0 ;20H.0位为1时执行FUN0

JB 01H,FUN1 ;20H.1位为1时执行FUN1

JB 02H,FUN2 ;20H.2位为1时执行FUN2

JB 03H,MAIN ;备用

AJMP MAIN ;返回主程序MAIN

功能程序

第1种闪烁功能程序

FUN0: MOV A,#0FEH ;累加器赋初值

FUN00: MOV P1,A ;累加器值送至P1口

LCALL DL05S ;延时

JNB ACC.7,MAIN ;累加器最高位为0时转MAIN

RL A ;累加器A中数据循环左移1位

AJMP FUN00 ;转FUN00循环

第2种闪烁功能程序

FUN1: MOV A,#0FEH ;累加器赋初值

FUN11: MOV P1,A ;累加器值送至P1口

LCALL DL05S ;延时

JZ MAIN ;A为0转MAIN

RL A ;累加器A中数据循环左移1位

ANL A,P1 ;A同P1口值相“与”

AJMP FUN11 ;转FUN11循环

第3种闪烁功能程序

FUN2: MOV A,#0AAH ;累加器赋初值

MOV P1,A ;累加器值送至P1口

LCALL DL05S ;延时

CPL A ;A中各位取“反”

MOV P1,A ;累加器值送至P1口

LCALL DL05S ;延时

AJMP MAIN ;转MAIN

扫描程序

KEYWORK:MOV P3,#0FFH ;置P3口为输入状态

JNB P3.0,KEY0 ;读P3.0口,若为0转KEY0

JNB P3.1,KEY1 ;读P3.1口,若为0转KEY1

JNB P3.2,KEY2 ;读P3.2口,若为0转KEY2

JNB P3.3,KEY3 ;读P3.3口,若为0转KEY3

RET ;子程序返回

闪烁功能0键处理程序

KEY0: LCALL DL10MS ;延时10ms消抖

JB P3.0,OUT0 ;P3.0为1,子程序返回(干扰)

SETB 00H ;20H.0位置1(执行闪烁功能1标志) CLR 01H ;20H.1位清0

CLR 02H ;20H.2清0

CLR 03H ;20H.3位清0

OUT0: RET ;子程序返回

闪烁功能1键处理程序

相关文档
最新文档