智能时控开关设计

智能时控开关设计

摘要

本系统通过单片机的定时器功能,利用8279键盘及显示功能,实现了5路开关的时控功能。通过8279控制的键盘0-9输入调节时间的数字键,A为启动定时器,B设置时间,C时间清零,D停止,E通过外部干预停止提示,F设置开关通道和开关时间。通过设置定点时间的子程序中添加判断语句实现开关选中有LED亮灯提示;定点到达通过显示程序添加判断语句实现LED闪烁提示,使得程序简洁。合理利用定时中断T0中断程序控制P1.5输出1kHz方波控制蜂鸣器鸣叫提示。外部干预后LED灭,蜂鸣器停止鸣叫。

关键字:定时器 失控开关 8279 键盘 显示

引言

随着科学技术和社会经济的迅猛发展,人类社会中自动控制,智能控制越来越普及,而单片机正是这种技术普及的基础。顺着单片机的生产技术和其本身的性能的快速提高,以及单片机的价格便宜等因素,单片机被应用于非常广泛的领域。本文中的智能时控开关就是应用单片机来实现的。主要应用到了单片机的定时器模块,输入输出模块结合8279的键盘输入和显示功能来实现了对外部5路开关的实时控制。

同时,近年来顺着声控开关的广泛应用,其方便人们的同时,缺点也是逐渐被人们发现。例如外部噪音的存在也会使声控开关点亮电灯,那样会使得开关的节能性能不是很好。所以人们希望通过实时控制开关来控制电灯。顺着单片机的功能不断完善和其价格的大众化,使得智能时控开关得到广泛的应用。与此同时,智能时控开关还能运用于其他很多的领域,所以本文所研究的智能失控开关具有重要的意义。

本文所应用的基本程序来之实验室的实验系统的帮助文档中的8279显示实验中的时钟功能实验。在基础程序之上进行改进添加自己的元素实现实验的基本功能。

李晶 2010-6-7

目录

摘要 ....................................................................................................................... I 引言 ...................................................................................................................... II 1功能要求 ............................................................................................................ 1

1.1主要内容 ........................................................................................................................... 1 1.2基本要求 ........................................................................................................................... 1 1.3提高部分 ........................................................................................................................... 1

2准备知识 ............................................................................................................ 2 3系统设计 ............................................................................................................ 2

3.1控制端口分配及开关状态定义 ........................................................................................ 2 3.2控制键的分配和主要寄存器功能 .................................................................................... 3 3.21按键分配 ........................................................... 3 3.22寄存功能 ........................................................... 3 3.3程序设计 .................................................................................................................................. 3 3.31主程序的设计........................................................ 3 3.32设置时间的设计 ...................................................... 4 3.33键盘输入设计........................................................ 5 3.34读键盘子程序........................................................ 6 3.35设置开关时间........................................................ 7 3.36时钟T1中断服务程序 ................................................. 8 3.37 显示的实现 ......................................................... 8 3.38开关时间到达判断和蜂鸣器 ............................................ 9 3.39开关通道置位和灯的闪烁控制 .......................................... 9

4主要参数的计算 .............................................................................................. 10 5实验仿真 .......................................................................................................... 10 6实验程序 .......................................................................................................... 11 6 功能扩展 ......................................................................................................... 23 7参考文献 .......................................................................................................... 23 8附录 ............................................................................................................... 24

1功能要求

1.1主要内容

利用单片机中的定时器、IO接口、中断系统等资源,设计一智能时控开关系统,能根据时刻信息或倒计时信息对多路开关进行控制。

1.2基本要求

系统含24小时时钟,用数码管可显示小时、分钟及秒时间信息;可通过按键对时钟进行校准,可对定时时刻或倒计时时间进行设置;定时时间到时,用发光二极管闪烁及蜂鸣器发声提示。人工干预后停止闪烁及发声,并用发光管指示开关状态。

1.3提高部分

可对多路(3~5路) 开关进行定时控制;可对每路按多个时间顺序设置开关控制。(如:8:00开,12:00关,14:00开,16:00关;尝试为系统设置语音提示功能。

2准备知识

试验箱内部理解图如图1所示

图1 8279键盘显示电路

在程序中需要用到8279的键盘显示功能,那么在做实验之前必须先弄清楚8279的基本功能,8279的基本功能表见附录1。通过控制8279可以很方便的实现键盘的输入和LED的显示功能。

3系统设计

3.1控制端口分配及开关状态定义

根据题目的要求,需要实现(3-5)路开关的控制,那么需要用到单片机的输出口,由于实验电路板上面只有p1和p3口可以外接,其次可以用p0口通过数据锁存器输出控制LED灯来表示开关的状态,但是p0口的控制需要每次选通74LS373再输出数据,而且访问外部数据存储器只能用寄存器A,不方便操作,所以在这里不选用p0口;因为p3口做一般的输入输出不常用,所以这里也不选。那么本文用p1口的p1.0-p1.4四个口实验控制四路开关的状态。用p1.5输出方波来控制蜂鸣器的鸣叫。具体分配如表1所示

表1 控制端口分配

选择LED的亮表示开关的开,LED灯的灭来表示开关的关,因为p1.1在单片机

复位之后是高电平状态,那么可以再程序的初始化时给p1口输出低电平即可方便实现开关状态的控制。

3.2控制键的分配和主要寄存器功能 3.21按键分配

在与8279相连的键盘上,除了基本的0-9十个数字键之外,还有A-F六个键,那么可以通过这六个按键来实现所需要的控制,因为键盘上有0-9数字键,在设置时间时候就可以直接通过按键来设置,不需要用加1、减1的方式来控制了。通过分析可以知道,实现智能开关的控制,首先需要实现数字时钟的显示控制功能。那么这里需要的控制键有,时钟起动、设置时间、清零、停止四个键,需要实现开关的控制,那么开关状态改变时间设置需要一个键,再次外部干涉需要一个键。所以按键的功能分配如表2所示

寄存器的分配在整个程序的设计过程中式非常重要的,如果不能分配好寄存器作用,在整个程序的设计工程中需要在很多的地方用到堆栈保护,那样不但增加工作量,也使得程序变得冗长,可读性变差。所以,在程序设计之前应该对程序中用到的主要功能的寄存器进行分配处理。表3是本文中的主要的寄存器的功能分配,在一些小程序中用到的功能这里不列出

表3 主要寄存器功能

3.3程序设计

主要的程序是由主程序、定时中断程序、设置时间子程序、设置开关时间子程序、键盘输入子程序、显示子程序等部分组成,下面分别就这几个部分的设计过程详细介绍 3.31主程序的设计

主程序主要实现主程序的初始化,8279的初始化(调用子程序实现),设置定时模式和状态,实现显示(调用显示子程序),开定时中断T1,定时器开始工作。读键盘的状态(通过子程序调用实现),通过查询的方式判断键盘值来实现键盘功能的子程序调用。主程序流程图如图2所示

图2 主程序流程图

3.32设置时间的设计

因为设计时间许要通过键盘来设置,那么就需要调用读键盘子程序来实现输入的功能,为了能够判断输入的数值是否合法,在键盘输入之程序中都给了标志位赋值为0FFH,那么可以通过标志位来判断输入是否合法。因为需要分别输入时、分、秒的数值,所以需要在每次输入之前判断输入的合法性,如何判断将在键盘输入子程序里叙述。设置时间子程序流程图如图3所示。

图3 设置时间子程序流程图

3.33键盘输入设计

时间的时、分、秒均是由两位数组成,所以在键盘输入子程序中需要实现键盘输入,为了响应调用程序,需要在键盘输入完成之前置标志位,如果输入合法标志位置为:0FFH,如果输入不合法置标志位为00H,判断输入是否合法可以通过判断输入的键值是否在需要的数值范围内,键盘输入的之程序流程图如图4所示。

图4 读键盘子程序流程图

3.34读键盘子程序

键盘输入子程序流程图如图5所示

图5 读键盘子程序流程图

3.35设置开关时间

由于开关时间的设置不需要很高的精度,这里在设置开关的时间时就不需要设置秒钟的数值了,那么可以把秒钟的位来显示开关的通道数值,当开关通道被选中时相应的LED灯就被点亮,表示现在控制的开关是这个通道,当时间到达时LED灯闪烁提示开关状态改变。设置开关时间的子程序流程图如图6所示

图6 设置开关时间子程序流程图

3.36时钟T1中断服务程序

定时器时钟T1用于实现数值时钟,参考单片机课本的时钟的流程图,得到时钟流程图如图7所示

图7 中断服务程序

3.37 显示的实现

实现显示功能不需要判断,直接从高位到低位的一次进行显示即可,在程序设计的过程中主要注意设置显示的位置来控制不同的数值显示的位置,单个键的显示通过调用子程序来实现。显示子程序流程图如图8所示

图8 显示子程序流程图

3.38开关时间到达判断和蜂鸣器

当某个开关的定时时间到达时需要进行处理,那么开关当时时刻是否达到需要在哪里判断才能满足每次循环都能对定时时间进行判断。因为定时器的时间是通过定时器T1的中断程序完成的,那就说,没秒钟中断程序都需要执行20次,所以把开关时间判断放在T1的中断服务子程序中是最合适的,即能实现实时监控,当有需要控制的开关的定时时间达到时候能够迅速判断到。

本文通过定时中断T0实现蜂鸣器鸣叫控制。在中断服务程序中对P1.5的电平进行反转,使其鸣叫。只有在开关定时时间到时才开中断,从而实现时间到达蜂鸣器鸣叫的功能。

3.39开关通道置位和灯的闪烁控制

为了指示被控制的开关序号,在设置定时时间时就可以设置使相应的LED灯变成高电平,表示现在控制的是这个开关。

时间达到时,为了表示开关的状态变化,通过控制LED灯的闪烁来表示,那么在什么地方来控制相应的P1口的状态周期性变化。考虑到显示时间子程序每秒钟要显示20次,那么这里把控制p1口状态周期性变化的程序放在显示子程序中能够方便的实现,只需要用一个CPL指令就可以实现状态口的周期性变化来控制LED灯的状态。这里通过控制相应的标志位,如果定时时间到,则设置相应的标志位,实现闪亮LED灯控制。

当有外部干预时,不但需要清除LED灯的状态,还要清除控制LED灯闪烁的标志,同时还要时定时中断T0停止,是蜂鸣器停止鸣叫。

4主要参数的计算

在整个实验的过程中,由于需要用到两个定时器,其中T1用来产生定时时钟,T0用来产生控制蜂蜜器的方波。因为实验箱上的C51单片机的工作频率是11.0592MHz,用来做定时时钟时,最大定时时间是定时器工作在方式1时

12

(2160)0.071s 6

11.059210

不能满足1s的时间要求,所以只能用循环的方式来实现一秒钟,选择定时器定时时间为50ms,中断20次为1s,那么定时器的初值应该为

12

(216X1)50ms

11.0592106解得X1=19456,转化为十六进制等于4C00H。

同理,定时器T0用来产生1KHz的方波使蜂鸣器鸣叫,那么应该让定时器T0 5ms溢出一次,所以有

12

(216X0)5ms

11.0592106解得X0=60928,转化为十六进制等于FC8FH。

5实验仿真

为了更好实现实验功能,对实验电路进行了仿真,通过对仿真电路图的调试,得到比较好的实验结果,仿真电路图如图9所示

图9 实验仿真电路图

6实验程序

程序中的具体功能在程序的注释中给出,实验程序如下

;系统晶振是 11.0592 MHz Z8279 EQU 0FF82H ;8279 状态/命令口地址 D8279 EQU 0FF80H ;8279 数据口地址

LEDMOD EQU 00H ;左边输入 八位字符显示

;外部译码键扫描方式,双键互锁 LEDFEQ EQU 2FH ;扫描速率

LEDCLS EQU 0C1H ;清除显示 RAM

LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址 READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字 SIGN EQU 08H ;00H设置为输入合法标志位 FLAG EQU 09H KEY0 EQU 00H ;开关1状态 KEY1 EQU 01H ;开关2状态 KEY2 EQU 02H ;开关3状态 KEY3 EQU 03H ;开关4状态 KEY4 EQU 04H ;开关5状态

ORG 0000H

AJMP START

ORG 000BH ;T0中断程序入口地址 LJMP INT_T0

ORG 001BH ;T1 中断程序入口地址 LJMP INT_T1 ORG 0040H START:

MOV SP,#60H

LCALL INIT8279 ;初始化8279 MOV MOV MOV MOV MOV MOV CLR CLR CLR CLR CLR LOOP: MOV INC DJNZ MOV SETB MOV MOV MOV MOV MOV SETB SETB SETB SETB WAIT: LCALL CJNE MOV CJNE LCALL KEY_A: CJNE LCALL KEY_D: CJNE LCALL KEY_B: CJNE R4,#12H ;时 R3,#33H ;分 R2,#54H ;秒 R1,#20 ;秒

R0 ,#30H ;开关定时时间存储器其始地址 R7 ,#10

KEY0 ;清楚开关状态标志 KEY1 KEY2 KEY3 KEY4

R0

R7 ,LOOP P1,#00H

SIGN ;标志 TMOD,#11H

TL1,#00H TH1,#4CH TL0,#8FH TH0,#0FCH

ET0 ;中断允许 PT1 ET1

EA ;允许断 GETKEY ;读键盘

A,#0FFH,CONT ;判断是否有键输入 A,B ;有键输入

A,#3CH,KEY_A ;输入键是'C',转CLEAR_T CLEAR_T

A,#3AH,KEY_D ;输入键是'A',转START_T START_T

A,#3DH,KEY_B ;输入键是'D',转STOP_T STOP_T

A,#3BH,KEY_F ;输入键是'B',转SET_T

@R0,#0FFH

LCALL SET_T

KEY_F: CJNE A,#3FH,KEY_E ;输入键是'F',转DINGSHI_T LCALL DINGSHI_T

KEY_E: CJNE A,#3EH,CONT ;输入键是'E',转MONITOR LCALL MONITOR

CONT: JNB SIGN,WAIT ;若无秒标志则循环 LCALL DISPLAY ;显示时间 CLR SIGN ;清标志 SJMP WAIT ;循环

;实现外部干预子程序

MONITOR:NOP JNB KEY0,L77 CLR P1.0 CLR KEY0 L77: JNB KEY1,L80 CLR P1.1 CLR KEY1 L80: JNB KEY2,L83 CLR P1.2 CLR KEY2 L83: JNB KEY3,L86 CLR P1.3 CLR KEY3 L86: JNB KEY4,L91 CLR P1.4 CLR KEY4 L91: CLR TR0 CLR P1.5 RET SJMP $

;时间清零子程序

CLEAR_T:CLR TR1 MOV R4,#0H MOV R3,#0H MOV R2,#0H SETB SIGN RET

;电子钟计时子程序

START_T:SETB TR1 RET

;关计数器 ;小时清零 ;分钟清零 ;秒清零 ;置秒标志 ;开计时中断

;电子钟停止计时子程序

STOP_T: CLR TR1 ;关计时中断 RET ;设置初值子程序

SET_T: CLR TR1 ;关计数器 MOV R5,#7

LCALL GETWORD ;读小时数 CJNE A,#0FFH,INVALID ;判断输入合法性 MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV LCALL CJNE MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV LCALL CJNE MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV A,B A,#232

INVALID ;判断输入小时值

R4,A ;保存输入的值 R5,#4 ;读分钟数 GETWORD

A,#0FFH,INVALID ;判断输入合法性 A,B A,#196

INVALID ;判断输入分钟数

R3,A ;保存输入的值 R5,#1 ;读秒数 GETWORD

A,#0FFH,INVALID ;判断输入合法性 A,B A,#196

INVALID ;判断输入分钟值

R2,A ;保存输入的值 R5,#1 ;读秒数

AJMP SET_TOK

INVALID:LCALL CLEAR_T ;不合法则时间清零 SET_TOK:LCALL DISPLAY ;显示时间 SETB TR1 RET

;设置定时时间子程序 DINGSHI_T:

SETB FLAG MOV R0,#30H MOV DPTR ,#Z8279

MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A

MOV R5,#1

LCALL GETWORD ;选择设置定时开关通道 CJNE A,#0FFH,DINGSHI_T ;判断输入合法性 MOV A,B ADD A,#251

JC DINGSHI_T ;判断输入小时值

LCALL GETWORD

CJNE A,#0FFH,DINGSHI_T ;判断输入合法性 MOV A,B ADD A,#232

JC DINGSHI_T ;判断输入分钟数

MOV @R0,A ;保存输入的值 INC R0

MOV R5,#4 ;读秒数 LCALL GETWORD

CJNE A,#0FFH,DINGSHI_T ;判断输入合法性

MOV A,B ADD A,#196

JC DINGSHI_T ;判断输入分钟值

MOV @R0,A ;当通道选中时,LED亮提示通道被

;中

MOV A,30H CJNE A,#0FFH,L196 CLR P1.0 ;如果开关0选中则LED0亮 AJMP L198 L196: SETB P1.0 L198: MOV A,32H CJNE A,#0FFH,L199 CLR P1.1 AJMP L203

L199: SETB P1.1 ; 如果开关1选中则LED1亮 L203: MOV A,34H CJNE A,#0FFH,L202 CLR P1.2 AJMP L207

L202: SETB P1.2 ;如果开关2选中则LED2亮 L207: MOV A,36H CJNE A,#0FFH,L205 CLR P1.3 AJMP L213

L205: SETB P1.3 ;如果开关3选中则LED3亮 L213: MOV A,38H CJNE A,#0FFH,L208 CLR P1.4 AJMP SET_TOKD

L208: SETB P1.4 ;如果开关4选中则LED4亮 SET_TOKD: CLR FLAG RET ;读数子程序

GETWORD:

WKEY1: LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY1 ;无键输入,则再读 MOV A,B

ADD A,#0C6H

JC ERROR1 ;判断输入是否大于9 MOV A,B SUBB A,#30H

JC ERROR1 ;判断输入是否小于0 MOV R6,A

LCALL DISLED ;显示输入的字符 MOV B,#10 MUL AB

PUSH ACC ;保存输入的值 WKEY2: LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY2 ;无键输入则再读 MOV A,B

ADD A,#0C6H ;判断输入是否大于9 JC ERROR2 MOV A,B

SUBB A,#30H ;判断输入是否小于0 JC ERROR2 DEC R5 MOV R6,A

LCALL DISLED ;显示输入的字符 MOV B,A POP ACC ADD A,B

MOV B,A ;把得到的值存在B MOV A,#0FFH ;置合法输入标志 AJMP KEYOK ERROR2: POP ACC

ERROR1: MOV A,#0 ;置非法输入标志 KEYOK: RET

;8279初始化子程序

INIT8279:

PUSH DPH ;保存现场 PUSH DPL PUSH ACC

LCALL DELAY ;延时 MOV DPTR ,#Z8279

MOV A,#LEDMOD ;置8279工作方式 MOVX @DPTR,A

MOV A,#LEDFEQ ;置键盘扫描速率 MOVX @DPTR,A

MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A

POP DPL POP DPH RET

;读取键盘子程序

;有输入则输出: B: 读到的键码 A: 按键的标志0FFH GETKEY: PUSH DPH ;保存现场 PUSH DPL PUSH PSW

MOV DPTR,#Z8279

MOVX A,@DPTR ;读8279状态 ANL A,#07H ;屏蔽D7-D3

JNZ GETVAL ;判断是否有键输入 MOV A,#0H ;置标志(无键输入) SJMP NKBHIT

GETVAL: MOV A,#READKB ;读 FIFO RAM 命令 MOVX @DPTR,A MOV DPTR,#D8279

MOVX A,@DPTR ;读键

ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE ;键码表起始地址 MOVC A,@A+DPTR ;查表 MOV B,A ;置返回键值

MOV A,#0FFH ;置标志(有键输入) NKBHIT: POP PSW ;恢复现场 POP DPL POP DPH RET

;显示字符子程序 ;输入: R5,位置 R6,值

DISLED: PUSH DPH ;保存现场 PUSH DPL PUSH ACC

MOV A,#LEDWR0 ;置显示起始地址 ADD A,R5 ;加位置偏移量 MOV DPTR,#Z8279

MOVX @DPTR,A ;设定显示位置

MOV DPTR,#LEDSEG ;置显示常数表起始位置 MOV A,R6

MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279

MOVX @DPTR,A ;显示数据

POP DPL POP DPH RET

;延时子程序

DELAY: PUSH 7 ;保存现场 PUSH 1

MOV R7,#0H DELAY1: MOV R1,#0H DJNZ R1,$

DJNZ R7,DELAY1

POP 1 POP 7 RET

;定时器中断服务子程序

INT_T1: PUSH PSW PUSH ACC PUSH DPL PUSH DPH

CLR TR1 MOV TMOD,#11H

MOV TL1,#00H MOV TH1,#4CH DJNZ R1,JUDGE MOV R1,#20 CJNE R2,#59H,SEC CJNE R3,#59H,MIN CJNE R4,#23H,HOUR MOV R2,#00 MOV R3,#00 MOV R4,#00 AJMP JUDGE

SEC: MOV A,R2 ADD A,#1 DA A MOV R2,A AJMP JUDGE MIN: MOV A,R3 ADD A,#1

;恢复现场 ;保护现场 ;关中断 ;50ms毫秒定时常数

DA A MOV R3,A

MOV R2,#00 AJMP JUDGE HOUR: MOV A,R4 ADD A,#1 DA A MOV R4,A MOV R2,#00 MOV R3,#00

;判断定时是否到

JUDGE: MOV A,R4 CJNE A,30H,JUDGE_KEY1 MOV A,R3 CJNE A,31H,JUDGE_KEY1 SETB KEY0 MOV 30H,#0FFH MOV 31H,#0FFH SETB TR0

JUDGE_KEY1: MOV A,R4 CJNE A,32H,JUDGE_KEY2 MOV A,R3 CJNE A,33H,JUDGE_KEY2 SETB KEY1 MOV 32H,#0FFH MOV 33H,#0FFH SETB TR0

JUDGE_KEY2: MOV A,R4 CJNE A,34H,JUDGE_KEY3 MOV A,R3

CJNE A,35H,JUDGE_KEY3 SETB KEY2

MOV 34H,#0FFH MOV 35H,#0FFH SETB TR0

JUDGE_KEY3:MOV A,R4 CJNE A,36H,JUDGE_KEY4 MOV A,R3 CJNE A,37H,JUDGE_KEY4

;判断开关1 ;判断开关2 ;判断开关3 ;判断开关4

SETB KEY3 MOV 36H,#0FFH MOV 37H,#0FFH SETB TR0

JUDGE_KEY4: MOV A,R4 ;判断开关5 CJNE A,38H,EXIT_INT MOV A,R3 CJNE A,39H,EXIT_INT SETB KEY4 MOV 38H,#0FFH MOV 39H,#0FFH SETB TR0 RET

;显示时间 EXIT_INT:

JB FLAG ,L431 LCALL DISPLAY

;恢复现场 L431:

SETB TR1

POP DPH POP DPL POP ACC POP PSW

RETI

;定时器0产生蜂鸣器的频率 INT_T0:

CLR TR0 MOV TMOD ,#11H MOV TL0,#67H MOV TH0,#0FCH SETB TR0 CPL P1.5 RETI

;显示时分秒 DISPLAY:

MOV A,R4 ANL A,#0FH MOV R6,A

;中断返回 ;

MOV R5,#6

LCALL DISLED ;显示小时低位 MOV A,R4 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#7

LCALL DISLED ;显示小时高位 MOV A,R3 ANL A,#0FH MOV R6,A MOV R5,#3

LCALL DISLED MOV A,R3 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#4

LCALL DISLED MOV A,R2 ANL A,#0FH MOV R6,A MOV R5,#0

LCALL DISLED MOV A,R2 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#1

LCALL DISLED JNB KEY0,L478

CPL P1.0 L478: JNB KEY1,L480 CPL P1.1

L480: JNB KEY2,L482 CPL P1.2

L482: JNB KEY3,L484 CPL P1.3

L484: JNB KEY4,L486 CPL P1.4 L486: RET

;LED显示常数表

;显示分钟低位 ;显示分钟高位 ;显示秒低位 ;显示秒高位 ;如果开关0的定时时间到,;50ms是p1.0的电压反转

LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB

0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB

0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ' ;键盘键码表

KEYCODE:DB

30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z'

DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C' END

6 功能扩展

由于时间有限,智能时控开关的扩展功能不能完全得到实现,所以这里这能给出扩展功能的实现的想法。如果需要实现一个开关在不同时间控制其开启、关闭的功能,需要在定时时间寄存器的地址空间进行扩展。那么一个开关通道需要占用的地址数位2n,其中n是开关的状态改变次数。同时在比较时间的程序中对不同状态的改变处理的外部输出不同,通道选中时LED显示提示相同,时间到达时调用的LED闪烁提示相同即可。

在声音提示的功能上的改进可以通过音阶标码表,对不同的开关通道设计不同的音阶顺序来实现不同开关的提示音。

7参考文献

[1] 李朝青.单片机接口原理.北京:北京航天航空大学出版社,第3版.2007年3月

[2] 宋建永.基于MCS-51与8279的智能时控开关设计.电脑与电信. 2008年 09期 106-107

[3] 茹国宝.单片机原理及应用实验指导书[J].武汉: 武汉大学电子信息学院, 2007

8附录

附录一:8279功能表

智能时控开关设计

摘要

本系统通过单片机的定时器功能,利用8279键盘及显示功能,实现了5路开关的时控功能。通过8279控制的键盘0-9输入调节时间的数字键,A为启动定时器,B设置时间,C时间清零,D停止,E通过外部干预停止提示,F设置开关通道和开关时间。通过设置定点时间的子程序中添加判断语句实现开关选中有LED亮灯提示;定点到达通过显示程序添加判断语句实现LED闪烁提示,使得程序简洁。合理利用定时中断T0中断程序控制P1.5输出1kHz方波控制蜂鸣器鸣叫提示。外部干预后LED灭,蜂鸣器停止鸣叫。

关键字:定时器 失控开关 8279 键盘 显示

引言

随着科学技术和社会经济的迅猛发展,人类社会中自动控制,智能控制越来越普及,而单片机正是这种技术普及的基础。顺着单片机的生产技术和其本身的性能的快速提高,以及单片机的价格便宜等因素,单片机被应用于非常广泛的领域。本文中的智能时控开关就是应用单片机来实现的。主要应用到了单片机的定时器模块,输入输出模块结合8279的键盘输入和显示功能来实现了对外部5路开关的实时控制。

同时,近年来顺着声控开关的广泛应用,其方便人们的同时,缺点也是逐渐被人们发现。例如外部噪音的存在也会使声控开关点亮电灯,那样会使得开关的节能性能不是很好。所以人们希望通过实时控制开关来控制电灯。顺着单片机的功能不断完善和其价格的大众化,使得智能时控开关得到广泛的应用。与此同时,智能时控开关还能运用于其他很多的领域,所以本文所研究的智能失控开关具有重要的意义。

本文所应用的基本程序来之实验室的实验系统的帮助文档中的8279显示实验中的时钟功能实验。在基础程序之上进行改进添加自己的元素实现实验的基本功能。

李晶 2010-6-7

目录

摘要 ....................................................................................................................... I 引言 ...................................................................................................................... II 1功能要求 ............................................................................................................ 1

1.1主要内容 ........................................................................................................................... 1 1.2基本要求 ........................................................................................................................... 1 1.3提高部分 ........................................................................................................................... 1

2准备知识 ............................................................................................................ 2 3系统设计 ............................................................................................................ 2

3.1控制端口分配及开关状态定义 ........................................................................................ 2 3.2控制键的分配和主要寄存器功能 .................................................................................... 3 3.21按键分配 ........................................................... 3 3.22寄存功能 ........................................................... 3 3.3程序设计 .................................................................................................................................. 3 3.31主程序的设计........................................................ 3 3.32设置时间的设计 ...................................................... 4 3.33键盘输入设计........................................................ 5 3.34读键盘子程序........................................................ 6 3.35设置开关时间........................................................ 7 3.36时钟T1中断服务程序 ................................................. 8 3.37 显示的实现 ......................................................... 8 3.38开关时间到达判断和蜂鸣器 ............................................ 9 3.39开关通道置位和灯的闪烁控制 .......................................... 9

4主要参数的计算 .............................................................................................. 10 5实验仿真 .......................................................................................................... 10 6实验程序 .......................................................................................................... 11 6 功能扩展 ......................................................................................................... 23 7参考文献 .......................................................................................................... 23 8附录 ............................................................................................................... 24

1功能要求

1.1主要内容

利用单片机中的定时器、IO接口、中断系统等资源,设计一智能时控开关系统,能根据时刻信息或倒计时信息对多路开关进行控制。

1.2基本要求

系统含24小时时钟,用数码管可显示小时、分钟及秒时间信息;可通过按键对时钟进行校准,可对定时时刻或倒计时时间进行设置;定时时间到时,用发光二极管闪烁及蜂鸣器发声提示。人工干预后停止闪烁及发声,并用发光管指示开关状态。

1.3提高部分

可对多路(3~5路) 开关进行定时控制;可对每路按多个时间顺序设置开关控制。(如:8:00开,12:00关,14:00开,16:00关;尝试为系统设置语音提示功能。

2准备知识

试验箱内部理解图如图1所示

图1 8279键盘显示电路

在程序中需要用到8279的键盘显示功能,那么在做实验之前必须先弄清楚8279的基本功能,8279的基本功能表见附录1。通过控制8279可以很方便的实现键盘的输入和LED的显示功能。

3系统设计

3.1控制端口分配及开关状态定义

根据题目的要求,需要实现(3-5)路开关的控制,那么需要用到单片机的输出口,由于实验电路板上面只有p1和p3口可以外接,其次可以用p0口通过数据锁存器输出控制LED灯来表示开关的状态,但是p0口的控制需要每次选通74LS373再输出数据,而且访问外部数据存储器只能用寄存器A,不方便操作,所以在这里不选用p0口;因为p3口做一般的输入输出不常用,所以这里也不选。那么本文用p1口的p1.0-p1.4四个口实验控制四路开关的状态。用p1.5输出方波来控制蜂鸣器的鸣叫。具体分配如表1所示

表1 控制端口分配

选择LED的亮表示开关的开,LED灯的灭来表示开关的关,因为p1.1在单片机

复位之后是高电平状态,那么可以再程序的初始化时给p1口输出低电平即可方便实现开关状态的控制。

3.2控制键的分配和主要寄存器功能 3.21按键分配

在与8279相连的键盘上,除了基本的0-9十个数字键之外,还有A-F六个键,那么可以通过这六个按键来实现所需要的控制,因为键盘上有0-9数字键,在设置时间时候就可以直接通过按键来设置,不需要用加1、减1的方式来控制了。通过分析可以知道,实现智能开关的控制,首先需要实现数字时钟的显示控制功能。那么这里需要的控制键有,时钟起动、设置时间、清零、停止四个键,需要实现开关的控制,那么开关状态改变时间设置需要一个键,再次外部干涉需要一个键。所以按键的功能分配如表2所示

寄存器的分配在整个程序的设计过程中式非常重要的,如果不能分配好寄存器作用,在整个程序的设计工程中需要在很多的地方用到堆栈保护,那样不但增加工作量,也使得程序变得冗长,可读性变差。所以,在程序设计之前应该对程序中用到的主要功能的寄存器进行分配处理。表3是本文中的主要的寄存器的功能分配,在一些小程序中用到的功能这里不列出

表3 主要寄存器功能

3.3程序设计

主要的程序是由主程序、定时中断程序、设置时间子程序、设置开关时间子程序、键盘输入子程序、显示子程序等部分组成,下面分别就这几个部分的设计过程详细介绍 3.31主程序的设计

主程序主要实现主程序的初始化,8279的初始化(调用子程序实现),设置定时模式和状态,实现显示(调用显示子程序),开定时中断T1,定时器开始工作。读键盘的状态(通过子程序调用实现),通过查询的方式判断键盘值来实现键盘功能的子程序调用。主程序流程图如图2所示

图2 主程序流程图

3.32设置时间的设计

因为设计时间许要通过键盘来设置,那么就需要调用读键盘子程序来实现输入的功能,为了能够判断输入的数值是否合法,在键盘输入之程序中都给了标志位赋值为0FFH,那么可以通过标志位来判断输入是否合法。因为需要分别输入时、分、秒的数值,所以需要在每次输入之前判断输入的合法性,如何判断将在键盘输入子程序里叙述。设置时间子程序流程图如图3所示。

图3 设置时间子程序流程图

3.33键盘输入设计

时间的时、分、秒均是由两位数组成,所以在键盘输入子程序中需要实现键盘输入,为了响应调用程序,需要在键盘输入完成之前置标志位,如果输入合法标志位置为:0FFH,如果输入不合法置标志位为00H,判断输入是否合法可以通过判断输入的键值是否在需要的数值范围内,键盘输入的之程序流程图如图4所示。

图4 读键盘子程序流程图

3.34读键盘子程序

键盘输入子程序流程图如图5所示

图5 读键盘子程序流程图

3.35设置开关时间

由于开关时间的设置不需要很高的精度,这里在设置开关的时间时就不需要设置秒钟的数值了,那么可以把秒钟的位来显示开关的通道数值,当开关通道被选中时相应的LED灯就被点亮,表示现在控制的开关是这个通道,当时间到达时LED灯闪烁提示开关状态改变。设置开关时间的子程序流程图如图6所示

图6 设置开关时间子程序流程图

3.36时钟T1中断服务程序

定时器时钟T1用于实现数值时钟,参考单片机课本的时钟的流程图,得到时钟流程图如图7所示

图7 中断服务程序

3.37 显示的实现

实现显示功能不需要判断,直接从高位到低位的一次进行显示即可,在程序设计的过程中主要注意设置显示的位置来控制不同的数值显示的位置,单个键的显示通过调用子程序来实现。显示子程序流程图如图8所示

图8 显示子程序流程图

3.38开关时间到达判断和蜂鸣器

当某个开关的定时时间到达时需要进行处理,那么开关当时时刻是否达到需要在哪里判断才能满足每次循环都能对定时时间进行判断。因为定时器的时间是通过定时器T1的中断程序完成的,那就说,没秒钟中断程序都需要执行20次,所以把开关时间判断放在T1的中断服务子程序中是最合适的,即能实现实时监控,当有需要控制的开关的定时时间达到时候能够迅速判断到。

本文通过定时中断T0实现蜂鸣器鸣叫控制。在中断服务程序中对P1.5的电平进行反转,使其鸣叫。只有在开关定时时间到时才开中断,从而实现时间到达蜂鸣器鸣叫的功能。

3.39开关通道置位和灯的闪烁控制

为了指示被控制的开关序号,在设置定时时间时就可以设置使相应的LED灯变成高电平,表示现在控制的是这个开关。

时间达到时,为了表示开关的状态变化,通过控制LED灯的闪烁来表示,那么在什么地方来控制相应的P1口的状态周期性变化。考虑到显示时间子程序每秒钟要显示20次,那么这里把控制p1口状态周期性变化的程序放在显示子程序中能够方便的实现,只需要用一个CPL指令就可以实现状态口的周期性变化来控制LED灯的状态。这里通过控制相应的标志位,如果定时时间到,则设置相应的标志位,实现闪亮LED灯控制。

当有外部干预时,不但需要清除LED灯的状态,还要清除控制LED灯闪烁的标志,同时还要时定时中断T0停止,是蜂鸣器停止鸣叫。

4主要参数的计算

在整个实验的过程中,由于需要用到两个定时器,其中T1用来产生定时时钟,T0用来产生控制蜂蜜器的方波。因为实验箱上的C51单片机的工作频率是11.0592MHz,用来做定时时钟时,最大定时时间是定时器工作在方式1时

12

(2160)0.071s 6

11.059210

不能满足1s的时间要求,所以只能用循环的方式来实现一秒钟,选择定时器定时时间为50ms,中断20次为1s,那么定时器的初值应该为

12

(216X1)50ms

11.0592106解得X1=19456,转化为十六进制等于4C00H。

同理,定时器T0用来产生1KHz的方波使蜂鸣器鸣叫,那么应该让定时器T0 5ms溢出一次,所以有

12

(216X0)5ms

11.0592106解得X0=60928,转化为十六进制等于FC8FH。

5实验仿真

为了更好实现实验功能,对实验电路进行了仿真,通过对仿真电路图的调试,得到比较好的实验结果,仿真电路图如图9所示

图9 实验仿真电路图

6实验程序

程序中的具体功能在程序的注释中给出,实验程序如下

;系统晶振是 11.0592 MHz Z8279 EQU 0FF82H ;8279 状态/命令口地址 D8279 EQU 0FF80H ;8279 数据口地址

LEDMOD EQU 00H ;左边输入 八位字符显示

;外部译码键扫描方式,双键互锁 LEDFEQ EQU 2FH ;扫描速率

LEDCLS EQU 0C1H ;清除显示 RAM

LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址 READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字 SIGN EQU 08H ;00H设置为输入合法标志位 FLAG EQU 09H KEY0 EQU 00H ;开关1状态 KEY1 EQU 01H ;开关2状态 KEY2 EQU 02H ;开关3状态 KEY3 EQU 03H ;开关4状态 KEY4 EQU 04H ;开关5状态

ORG 0000H

AJMP START

ORG 000BH ;T0中断程序入口地址 LJMP INT_T0

ORG 001BH ;T1 中断程序入口地址 LJMP INT_T1 ORG 0040H START:

MOV SP,#60H

LCALL INIT8279 ;初始化8279 MOV MOV MOV MOV MOV MOV CLR CLR CLR CLR CLR LOOP: MOV INC DJNZ MOV SETB MOV MOV MOV MOV MOV SETB SETB SETB SETB WAIT: LCALL CJNE MOV CJNE LCALL KEY_A: CJNE LCALL KEY_D: CJNE LCALL KEY_B: CJNE R4,#12H ;时 R3,#33H ;分 R2,#54H ;秒 R1,#20 ;秒

R0 ,#30H ;开关定时时间存储器其始地址 R7 ,#10

KEY0 ;清楚开关状态标志 KEY1 KEY2 KEY3 KEY4

R0

R7 ,LOOP P1,#00H

SIGN ;标志 TMOD,#11H

TL1,#00H TH1,#4CH TL0,#8FH TH0,#0FCH

ET0 ;中断允许 PT1 ET1

EA ;允许断 GETKEY ;读键盘

A,#0FFH,CONT ;判断是否有键输入 A,B ;有键输入

A,#3CH,KEY_A ;输入键是'C',转CLEAR_T CLEAR_T

A,#3AH,KEY_D ;输入键是'A',转START_T START_T

A,#3DH,KEY_B ;输入键是'D',转STOP_T STOP_T

A,#3BH,KEY_F ;输入键是'B',转SET_T

@R0,#0FFH

LCALL SET_T

KEY_F: CJNE A,#3FH,KEY_E ;输入键是'F',转DINGSHI_T LCALL DINGSHI_T

KEY_E: CJNE A,#3EH,CONT ;输入键是'E',转MONITOR LCALL MONITOR

CONT: JNB SIGN,WAIT ;若无秒标志则循环 LCALL DISPLAY ;显示时间 CLR SIGN ;清标志 SJMP WAIT ;循环

;实现外部干预子程序

MONITOR:NOP JNB KEY0,L77 CLR P1.0 CLR KEY0 L77: JNB KEY1,L80 CLR P1.1 CLR KEY1 L80: JNB KEY2,L83 CLR P1.2 CLR KEY2 L83: JNB KEY3,L86 CLR P1.3 CLR KEY3 L86: JNB KEY4,L91 CLR P1.4 CLR KEY4 L91: CLR TR0 CLR P1.5 RET SJMP $

;时间清零子程序

CLEAR_T:CLR TR1 MOV R4,#0H MOV R3,#0H MOV R2,#0H SETB SIGN RET

;电子钟计时子程序

START_T:SETB TR1 RET

;关计数器 ;小时清零 ;分钟清零 ;秒清零 ;置秒标志 ;开计时中断

;电子钟停止计时子程序

STOP_T: CLR TR1 ;关计时中断 RET ;设置初值子程序

SET_T: CLR TR1 ;关计数器 MOV R5,#7

LCALL GETWORD ;读小时数 CJNE A,#0FFH,INVALID ;判断输入合法性 MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV LCALL CJNE MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV LCALL CJNE MOV ADD JC MOV MOV DIV SWAP ADD MOV MOV A,B A,#232

INVALID ;判断输入小时值

R4,A ;保存输入的值 R5,#4 ;读分钟数 GETWORD

A,#0FFH,INVALID ;判断输入合法性 A,B A,#196

INVALID ;判断输入分钟数

R3,A ;保存输入的值 R5,#1 ;读秒数 GETWORD

A,#0FFH,INVALID ;判断输入合法性 A,B A,#196

INVALID ;判断输入分钟值

R2,A ;保存输入的值 R5,#1 ;读秒数

AJMP SET_TOK

INVALID:LCALL CLEAR_T ;不合法则时间清零 SET_TOK:LCALL DISPLAY ;显示时间 SETB TR1 RET

;设置定时时间子程序 DINGSHI_T:

SETB FLAG MOV R0,#30H MOV DPTR ,#Z8279

MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A

MOV R5,#1

LCALL GETWORD ;选择设置定时开关通道 CJNE A,#0FFH,DINGSHI_T ;判断输入合法性 MOV A,B ADD A,#251

JC DINGSHI_T ;判断输入小时值

LCALL GETWORD

CJNE A,#0FFH,DINGSHI_T ;判断输入合法性 MOV A,B ADD A,#232

JC DINGSHI_T ;判断输入分钟数

MOV @R0,A ;保存输入的值 INC R0

MOV R5,#4 ;读秒数 LCALL GETWORD

CJNE A,#0FFH,DINGSHI_T ;判断输入合法性

MOV A,B ADD A,#196

JC DINGSHI_T ;判断输入分钟值

MOV @R0,A ;当通道选中时,LED亮提示通道被

;中

MOV A,30H CJNE A,#0FFH,L196 CLR P1.0 ;如果开关0选中则LED0亮 AJMP L198 L196: SETB P1.0 L198: MOV A,32H CJNE A,#0FFH,L199 CLR P1.1 AJMP L203

L199: SETB P1.1 ; 如果开关1选中则LED1亮 L203: MOV A,34H CJNE A,#0FFH,L202 CLR P1.2 AJMP L207

L202: SETB P1.2 ;如果开关2选中则LED2亮 L207: MOV A,36H CJNE A,#0FFH,L205 CLR P1.3 AJMP L213

L205: SETB P1.3 ;如果开关3选中则LED3亮 L213: MOV A,38H CJNE A,#0FFH,L208 CLR P1.4 AJMP SET_TOKD

L208: SETB P1.4 ;如果开关4选中则LED4亮 SET_TOKD: CLR FLAG RET ;读数子程序

GETWORD:

WKEY1: LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY1 ;无键输入,则再读 MOV A,B

ADD A,#0C6H

JC ERROR1 ;判断输入是否大于9 MOV A,B SUBB A,#30H

JC ERROR1 ;判断输入是否小于0 MOV R6,A

LCALL DISLED ;显示输入的字符 MOV B,#10 MUL AB

PUSH ACC ;保存输入的值 WKEY2: LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY2 ;无键输入则再读 MOV A,B

ADD A,#0C6H ;判断输入是否大于9 JC ERROR2 MOV A,B

SUBB A,#30H ;判断输入是否小于0 JC ERROR2 DEC R5 MOV R6,A

LCALL DISLED ;显示输入的字符 MOV B,A POP ACC ADD A,B

MOV B,A ;把得到的值存在B MOV A,#0FFH ;置合法输入标志 AJMP KEYOK ERROR2: POP ACC

ERROR1: MOV A,#0 ;置非法输入标志 KEYOK: RET

;8279初始化子程序

INIT8279:

PUSH DPH ;保存现场 PUSH DPL PUSH ACC

LCALL DELAY ;延时 MOV DPTR ,#Z8279

MOV A,#LEDMOD ;置8279工作方式 MOVX @DPTR,A

MOV A,#LEDFEQ ;置键盘扫描速率 MOVX @DPTR,A

MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A

POP DPL POP DPH RET

;读取键盘子程序

;有输入则输出: B: 读到的键码 A: 按键的标志0FFH GETKEY: PUSH DPH ;保存现场 PUSH DPL PUSH PSW

MOV DPTR,#Z8279

MOVX A,@DPTR ;读8279状态 ANL A,#07H ;屏蔽D7-D3

JNZ GETVAL ;判断是否有键输入 MOV A,#0H ;置标志(无键输入) SJMP NKBHIT

GETVAL: MOV A,#READKB ;读 FIFO RAM 命令 MOVX @DPTR,A MOV DPTR,#D8279

MOVX A,@DPTR ;读键

ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE ;键码表起始地址 MOVC A,@A+DPTR ;查表 MOV B,A ;置返回键值

MOV A,#0FFH ;置标志(有键输入) NKBHIT: POP PSW ;恢复现场 POP DPL POP DPH RET

;显示字符子程序 ;输入: R5,位置 R6,值

DISLED: PUSH DPH ;保存现场 PUSH DPL PUSH ACC

MOV A,#LEDWR0 ;置显示起始地址 ADD A,R5 ;加位置偏移量 MOV DPTR,#Z8279

MOVX @DPTR,A ;设定显示位置

MOV DPTR,#LEDSEG ;置显示常数表起始位置 MOV A,R6

MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279

MOVX @DPTR,A ;显示数据

POP DPL POP DPH RET

;延时子程序

DELAY: PUSH 7 ;保存现场 PUSH 1

MOV R7,#0H DELAY1: MOV R1,#0H DJNZ R1,$

DJNZ R7,DELAY1

POP 1 POP 7 RET

;定时器中断服务子程序

INT_T1: PUSH PSW PUSH ACC PUSH DPL PUSH DPH

CLR TR1 MOV TMOD,#11H

MOV TL1,#00H MOV TH1,#4CH DJNZ R1,JUDGE MOV R1,#20 CJNE R2,#59H,SEC CJNE R3,#59H,MIN CJNE R4,#23H,HOUR MOV R2,#00 MOV R3,#00 MOV R4,#00 AJMP JUDGE

SEC: MOV A,R2 ADD A,#1 DA A MOV R2,A AJMP JUDGE MIN: MOV A,R3 ADD A,#1

;恢复现场 ;保护现场 ;关中断 ;50ms毫秒定时常数

DA A MOV R3,A

MOV R2,#00 AJMP JUDGE HOUR: MOV A,R4 ADD A,#1 DA A MOV R4,A MOV R2,#00 MOV R3,#00

;判断定时是否到

JUDGE: MOV A,R4 CJNE A,30H,JUDGE_KEY1 MOV A,R3 CJNE A,31H,JUDGE_KEY1 SETB KEY0 MOV 30H,#0FFH MOV 31H,#0FFH SETB TR0

JUDGE_KEY1: MOV A,R4 CJNE A,32H,JUDGE_KEY2 MOV A,R3 CJNE A,33H,JUDGE_KEY2 SETB KEY1 MOV 32H,#0FFH MOV 33H,#0FFH SETB TR0

JUDGE_KEY2: MOV A,R4 CJNE A,34H,JUDGE_KEY3 MOV A,R3

CJNE A,35H,JUDGE_KEY3 SETB KEY2

MOV 34H,#0FFH MOV 35H,#0FFH SETB TR0

JUDGE_KEY3:MOV A,R4 CJNE A,36H,JUDGE_KEY4 MOV A,R3 CJNE A,37H,JUDGE_KEY4

;判断开关1 ;判断开关2 ;判断开关3 ;判断开关4

SETB KEY3 MOV 36H,#0FFH MOV 37H,#0FFH SETB TR0

JUDGE_KEY4: MOV A,R4 ;判断开关5 CJNE A,38H,EXIT_INT MOV A,R3 CJNE A,39H,EXIT_INT SETB KEY4 MOV 38H,#0FFH MOV 39H,#0FFH SETB TR0 RET

;显示时间 EXIT_INT:

JB FLAG ,L431 LCALL DISPLAY

;恢复现场 L431:

SETB TR1

POP DPH POP DPL POP ACC POP PSW

RETI

;定时器0产生蜂鸣器的频率 INT_T0:

CLR TR0 MOV TMOD ,#11H MOV TL0,#67H MOV TH0,#0FCH SETB TR0 CPL P1.5 RETI

;显示时分秒 DISPLAY:

MOV A,R4 ANL A,#0FH MOV R6,A

;中断返回 ;

MOV R5,#6

LCALL DISLED ;显示小时低位 MOV A,R4 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#7

LCALL DISLED ;显示小时高位 MOV A,R3 ANL A,#0FH MOV R6,A MOV R5,#3

LCALL DISLED MOV A,R3 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#4

LCALL DISLED MOV A,R2 ANL A,#0FH MOV R6,A MOV R5,#0

LCALL DISLED MOV A,R2 SWAP A

ANL A,#0FH MOV R6,A MOV R5,#1

LCALL DISLED JNB KEY0,L478

CPL P1.0 L478: JNB KEY1,L480 CPL P1.1

L480: JNB KEY2,L482 CPL P1.2

L482: JNB KEY3,L484 CPL P1.3

L484: JNB KEY4,L486 CPL P1.4 L486: RET

;LED显示常数表

;显示分钟低位 ;显示分钟高位 ;显示秒低位 ;显示秒高位 ;如果开关0的定时时间到,;50ms是p1.0的电压反转

LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB

0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB

0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ' ;键盘键码表

KEYCODE:DB

30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z'

DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C' END

6 功能扩展

由于时间有限,智能时控开关的扩展功能不能完全得到实现,所以这里这能给出扩展功能的实现的想法。如果需要实现一个开关在不同时间控制其开启、关闭的功能,需要在定时时间寄存器的地址空间进行扩展。那么一个开关通道需要占用的地址数位2n,其中n是开关的状态改变次数。同时在比较时间的程序中对不同状态的改变处理的外部输出不同,通道选中时LED显示提示相同,时间到达时调用的LED闪烁提示相同即可。

在声音提示的功能上的改进可以通过音阶标码表,对不同的开关通道设计不同的音阶顺序来实现不同开关的提示音。

7参考文献

[1] 李朝青.单片机接口原理.北京:北京航天航空大学出版社,第3版.2007年3月

[2] 宋建永.基于MCS-51与8279的智能时控开关设计.电脑与电信. 2008年 09期 106-107

[3] 茹国宝.单片机原理及应用实验指导书[J].武汉: 武汉大学电子信息学院, 2007

8附录

附录一:8279功能表


相关文章

  • 智能家居课程设计Microsoft Word 文档 (2)
  • 目录 前言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 1 1.智能家居概述 „„„„„„„„„„„„„„„„„„„„„„„„„„2 2.设计思想 „„„„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1视频监 ...查看


  • 智能仪器原理与设计教学方案(朱娟)
  • <智能仪器>课程教学方案 课程编码:0x31fx13 课程类型:专业课 总学时:54 学分:3 一.课程的性质和任务 课程的性质:<智能仪器原理与设计>是电子工程本科专业必修的专业基础课程之一.智能仪器在通信.家电. ...查看


  • 智能家居的定义及简介
  • 展开 编辑本段智能家居的定义及简介 概念及简介 又称智能住宅,在国外常用Smart Home表示.与智能家居含义近似的有家庭自动化(Home Automation).电子家庭(Electronic Home.E-home).数字家园(Dig ...查看


  • 智能变电站
  • 第一章 工程概况 1.1工程名称 天府新街35KV 变电站改建施工安装工程 1.2名词解释 1.2.1招标人:天府新街35KV 变电站改建工程指挥部 1.2.2招标代理人:李龙杰 1.2.3设计单位:李龙杰变电站设计中心 1.2.4监理单位 ...查看


  • 新手如何使用立体停车设备
  • 立体车库知识 自从立体车库进入我国市场,很多新手的司机都不喜欢这种停车方式,觉得太不方便,下面由泊鼎为大家总结了以下六个停车出入立体车库的建议,希望对每个因停车烦扰的司机们有所帮助.请看下文: 1.整个进库的过程,是一个缓慢的.不断调整车速 ...查看


  • 学校建筑智能照明系统设计方案
  • 广州学校城各学校的教室,灯光照度设计标准为室内平均照度300lx,讲台点照度5001x,如此高的照度要求,如果没有合理控制方案,能源上将造成巨大的浪费.因此,智能照明控制系统,不但用于控制公共楼道的灯光,普通教室.阶梯教室.投影室的应用也具 ...查看


  • 智能的定时器设计
  • 目录 一.课程设计任务书-------------------1 二.智能定时器设计-----------------------1 1. 设计要点.............................................. ...查看


  • 智能建筑毕业论文
  • 学院 毕 业 设 计(论 文) SNL/QR7.5.4-3 专 业 学生姓名 班 级 学 号 指导教师 完成日期 成绩评议 毕业设计(论文)任务书 指导教师意见 评阅教师意见 答辩小组评议意见 别墅型智能家居方案设计 摘要:智能家居是在家庭 ...查看


  • 2013最新智能别墅设计案例
  • 智能别墅设计案例 通常智能别墅项目的流程是: 1.客户有做智能家居的意向. 2.跟客户沟通后做出设计方案. 3.再次项目方案沟通后签订合同. 4.设计施工图纸. 5.现场根据图纸跟电工及负责人施工交底. 6.布线阶段现场跟踪检查布线情况. ...查看


  • 家居智能化设计方案
  • 智能家居设计方案(某某小区) 一.项目分析 本项目全部由高层住宅组成,为保证小区的安全以及实现住户智能家居的要求,对各种可以进出小区及单元楼的通道和住户户内均应该设置一定的设备进行管理.根据某某小区的项目要求及具体情况,从小区定位.住户安全 ...查看


热门内容