微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 带LCD的时间控制器

带LCD的时间控制器

时间:11-10 来源:互联网 点击:
说明:

本带LCD时间控制器,是在本人毕业时间《基于单片机的时间控制器的设计》的基础上进行修改的。
使得时间的控制和修改更容易,更直观。并扩展了红外遥控的功能,但由于条件限制,并没有把此功能
的程序加上。
按键说明:
K1 设置当前时间/按键超过1s,则置整点报时标志
K2 显示控制时间/小时加
K3 设置控制时间/分钟加
K4 控制ON/OFF设置/确定
K5 控制开/关

ELEC 继电器
SPK 蜂鸣器
Y_LED 继电器工作指示
C_LED 被控电器指示灯
W_LED 计时工作指示灯
D_LED 整点报时指示灯

实物图:

程序代码:

;=============================

; 带LCD的时间控制器
; DIPS082-LCD
; KS0066-控制器

;=============================
LOEQU 24 ; 加载低字节
HIEQU 99 ; 加载高字节
;-----------------------------
COEQU 200 ; 5ms中断计数时间常数
; 计数200次表示1s
ALBEQU 20H.0 ; 控制设置标志
CLOCK EQU 20H.1 ; 整点报时标志
HOUREQU 30H ; 存放小时变量
MINEQU 31H ; 存放分钟变量
SECEQU 32H ; 存放秒钟变量
DEDAEQU 33H ; 5ms计数值
SEC0EQU 34H ; 存放旧的秒数
;-----------------------------
DDRAMEQU 35H ; LCD地址变量
COM EQU 22H ; LCD指令寄存器
DAT EQU 21H ; LCD数据寄存器
COUNT EQU 22H ; 计数器

HHEQU 36H ; 控制设置小时变量
MMEQU 37H ; 控制设置分钟变量
;-----------------------------
; KEY4.....
K1EQU P2.1 ; 设置当前时间
K2EQU P2.0 ; 显示控制时间/小时加
K3EQU P3.6 ; 设置控制时间/分钟加
K4EQU P3.7 ; 控制ON/OFF设置/确定
K5 EQU P3.1 ; 控制开/关
;-----------------------------
; LCD .....
RSEQU P3.4 ; 寄存器选择
RWEQU P3.5 ; 读写控制
E EQU P3.3 ; LCD使能
;-----------------------------
ELEC EQU P3.0 ; 继电器
SPKEQU P2.2 ; 蜂鸣器
Y_LED EQU P2.6 ; 继电器工作指示
C_LEDEQU P2.4 ; 被控电器指示灯
W_LEDEQU P2.3 ; 计时工作指示灯
D_LEDEQU P2.5 ; 整点报时指示灯
;-----------------------------
ORG 0000H ; 程序代码由地址0
JMP START ; 跳至主函数开始执行
ORG 000BH ; 定时器TIMER0中断地址
JMP T0_INT ; 跳至TIMER0中断启始地址
;#############################

; 主程序

;#############################
START:
CLR Y_LED ; 继电器工作指示关
CLR ELEC ; 继电器关
CLR CLOCK ; 清除整点报时标志
SETB D_LED ; 整点报时指示灯关
;-----------------------------
CLR ALB ; 清除控制标志
MOV HH,#0 ; 内定的控制时间为--00:00
MOV MM,#0

LCALL SET_LCD ; LCD初始化
LCALL BZ ; 蜂鸣器连续两次发音
LCALL BZ
LCALL LED_BL ; LED闪动,表示工作开始

LCALL INIT ; 初始化变量
LCALL INIT_TIMER ; 初始化定时器
LCALL MENU ;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

; 循环程序

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LOOP:
LCALL TIME_PRO ; 时间计时处理
; 按键扫描............
JB K1,L1 ; 未按下K1键则继续扫描
; K1.....时间设置/设整点报时
; K1 : ADJ TIME K2:HOUR K3:MIN K4: OK
LCALL D_LAY ; 1s延时
JNB K1,LL ; 按键超过1s,则设整点报时
LCALL BZ ; LED闪动
MOV DPTR,#MADJ ; 现实执行消息
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显示字符
LCALL SET_TIME ; 设置目前时间
LCALL MENU ; 菜单
JMP LOOP ; 继续循环
;.............................
L1:JB K2,L2 ; 未按下K2键则继续扫描
; K2............控制时间显示
JNB K2,$ ; 等待K2键释放
LCALL BZ ; 蜂鸣器发音
MOV DPTR,#MLAL ; 显示控制消息
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显示字符
LCALL LOOK_ATIME ; 查看控制时间
LCALL DELAY ; 延时
LCALL LED_BL ; 工作LED闪动
LCALL LED_BL ;
LCALL MENU ; 菜单
JMP LOOP ; 继续循环
;.............................
L2:JB K3,L3 ; 未按下K3键则继续扫描
; K3.....控制时间设置
; K3 : ADJ ATIME K2:HOUR K3:MIN K4: OK
JNB K3,$ ; 等待K3键释放
LCALL BZ ; 蜂鸣器发音
MOV DPTR,#MAADJ ; 显示控制消息
MOV A,#1 ;
LCALL LCD_PRINT ; 在LCD显示字符
LCALL SET_ATIME ; 控制时间设置
LCALL LED_BL ; 工作LED闪动
LCALL LED_BL
LCALL MENU ; 菜单
JMP LOOP ; 继续循环
LL: SJMP L6
;.............................
L3:JB K4,L4 ; 未按下K4键则继续扫描
; K4.......控制开关/确定
JNB K4,$ ; 等待K4键释放
CPL ALB ; 控制设置标志取反
JNB ALB,L31 ; 没有控制标志,则发音一声
; ALARM ON....................
CLR C_LED ; 控制指示灯亮
LCALL BZ ; 有控制标志,则蜂鸣器发音三声
LCALL BZ
LCALL BZ
JMP LOOP ; 返回
L31:
; ALARM OFF...................
SETB C_LED ; 控制指示灯灭
LCALL BZ ; 蜂鸣器发音一声
JMP LOOP ; 返回
;.............................
L4: JB K5,L5 ; 未按下K4键则继续扫描
;K5.........电器控制开/关
JNB K5,$ ; 等待K5键释放
CPL Y_LED ; LED取反
CPL ELEC
LCALL BZ ; 蜂鸣器发音一声
L5: JMP LOOP ; 返回
L6: CPL CLOCK ; 值整点报时标志
CPL D_LED ; 整点报时指示灯亮
LCALL DELAY
JMP LOOP ; 返回
;-----------------------------
LMESS1: DB "Wlecome!",0
LMESS2: DB " happy! ",0
;=============================
; 初始化控制变量子程序
;=============================
INIT:
MOV DEDA,#0 ; 5ms计数值清除为0
MOV SEC0,#0 ; 旧的秒数清除为0
MOV SEC,#0 ; 秒钟变量清除为0
MOV MIN,#0 ; 分钟变量清除为0
MOV HOUR,#1 ; 小时变量清除为1
RET ; 子程序返回
;=============================
;初始化定时器接口子程序
;=============================
INIT_TIMER:
MOV TMOD,#00000000B ; 设置定时器T0工作方式为方式0
MOV IE, #10000010B ;
MOV TL0,#LO ; 加载低字节
MOV TH0,#HI ; 加载高字节
SETB TR0 ; 启动定时器T0开始计时
RET
;*****************************
; 定时器0中断服务程序
;*****************************
T0_INT: ; 中断程序每隔5ms中断一次
PUSH ACC ; 累加器放入堆栈
MOV TL0,#LO ; 加载低字节
MOV TH0,#HI ; 加载高字节
INC DEDA ; 5ms计数值加1
; 1 SEC TIME OUT CHECK
MOV A,DEDA ; 5ms计数值
CJNE A,#CO,TT ; 是否1s到了?
MOV DEDA,#0 ; DEDA值0

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top