51单片机制作万年历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档