51单片机制作万年历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
万年历
一、题目要求:
1、实现目标:用液晶屏显示时间、日期、星期和温度,时间、日期可调,且可以设置闹钟。
2、所用功能:1602液晶屏,独立按键,矩阵键盘,DS18B20温度传感器,1302时钟器,蜂鸣器,定时、中断。
二、程序框图:
主程序框图
计算阳历程序图
三、程序:
;==================变量和管脚的定义=================== LCD_RW EQU P2.5
LCD_RS EQU P2.6
LCD_EN EQU P2.7 ; LCD液晶显示控制端接口
RS BIT P2.0
RW BIT P2.1
E BIT P2.2
LCD EQU P0
JIDIANQI EQU P2.3
BEER EQU P2.4
H_BIT EQU 20H
M_BIT EQU 21H
S_BIT EQU 22H
HH EQU 23H
MM EQU 24H
SS EQU 25H
HH_BIT EQU 26H
MM_BIT EQU 27H
SS_BIT EQU 28H
BUF EQU 30H ; 30H-33H保存解码结果
FLAG1 BIT F0 ;DS18B20存在标志位
DQ BIT P3.4 ;DS18B20占用的总线
TEMPER_L EQU 29H
TEMPER_H EQU 28H
ROM1 EQU 2AH
ROM2 EQU 2BH
ROM3 EQU 2CH
ROM4 EQU 2DH
ROM5 EQU 2EH
ROM6 EQU 2FH
ROM7 EQU 30H
ROM8 EQU 31H
A_BIT EQU 35H
B_BIT EQU 36H
LG EQU 45H
LG1 EQU 46H ; LCD1602液晶显示位
ORG 0000H
LJMP INTI
ORG 000BH
;===================================================
; 初始化
;=================================================== ORG 1000H
INTI:
MOV LG, #35H
MOV LG1, #34H ; LCD1602液晶显示初值
MOV TMOD, #11H ; 定时器方式1和0
MOV TH0, #4CH
MOV TL0, #B0H ; 定时器0初值,控制中断时间
MOV TH1, #D8H ;设定时1初值
MOV TL1, #F0H
MOV TCON, #50H
MAIN:
LCALL LCD_INIT
LCALL LCDSET1 ; LCD1602液晶显示初始化
SETB ET0 ; 打开定时器中断
SETB EA ; 打开总中断
SETB TR0 ; 开定时器
SETB TR1 ; 开定时器
MOV SP, #60H
MOV P1, #00H
MOV R5, #00H
MOV H_BIT, #00H
MOV M_BIT, #00H
MOV S_BIT, #00H
MOV HH_BIT, #00H
MOV MM_BIT, #00H
MOV SS_BIT, #00H
MOV HH, #00H
MOV MM, #00H
MOV SS, #00H
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV LCD, #01H
LCALL LCDWC
LCALL INIT_18B20 ;复位程序
LCALL GET_TEMPER ;读转换后的温度
AJMP CHANGE
MOV SP, #70H ;堆栈指针设到70H的地方
MOV R7, #10
ACALL DELAY_MS
MOV DPTR, #MSG1
CALL DISPLAY_LINE1;在第一行显示
MOV DPTR, #MSG2
CALL DISPLAY_LINE2;在第二行显示
HERE:
LCALL KEY
JMP HERE ; 按键标志,不断循环
KEY:
ORL P1, #11111111B ; 拉高独立按键
MOV A, P1
CPL A
ANL A, #0CFH
JZ KEY0 ; 若为0,跳到KEY0
LJMP KEY1
KEY0:
LJMP KEY2
KEY1:
JB P1.2, KEY2
CLR EA ; 开中断
MOV A, #02H ; 清除屏幕
ACALL LCD_CMD ; 进行LCD忙检测MOV A, #80H
LCALL LCD_CMD
MOV A, #53H
LCALL LCD_WDATA ; 查表,得到显示数
MOV A, #81H
LCALL LCD_CMD
MOV A, #51H
LCALL LCD_WDATA
MOV A, #82H
LCALL LCD_CMD
MOV A, #52H
LCALL LCD_WDATA
MOV A, #85H
LCALL LCD_CMD
MOV A, #46H
LCALL LCD_WDATA
MOV A, #86H
LCALL LCD_CMD
MOV A, #30H
LCALL LCD_WDATA
MOV A, #87H
LCALL LCD_CMD
MOV A, #37H
LCALL LCD_WDATA
MOV A, #89H
LCALL LCD_CMD
MOV A, #41H
LCALL LCD_WDATA
MOV A, #8AH
LCALL LCD_CMD
MOV A, #32H
LCALL LCD_WDATA
MOV A, #8BH
LCALL LCD_CMD
MOV A, #34H
LCALL LCD_WDATA