定时闹铃LCDWord文件下载.docx

上传人:b****5 文档编号:18323001 上传时间:2022-12-15 格式:DOCX 页数:29 大小:130.50KB
下载 相关 举报
定时闹铃LCDWord文件下载.docx_第1页
第1页 / 共29页
定时闹铃LCDWord文件下载.docx_第2页
第2页 / 共29页
定时闹铃LCDWord文件下载.docx_第3页
第3页 / 共29页
定时闹铃LCDWord文件下载.docx_第4页
第4页 / 共29页
定时闹铃LCDWord文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

定时闹铃LCDWord文件下载.docx

《定时闹铃LCDWord文件下载.docx》由会员分享,可在线阅读,更多相关《定时闹铃LCDWord文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

定时闹铃LCDWord文件下载.docx

N

Y

程序清单

引脚定义

K1:

ADJTIMEK2:

HOURK3:

MINK4:

OK

;

定时器0及时中断程序每隔5ms中断一次

MOVTL0,#(8192-5000).MOD.32

MOVTH0,#(8192-5000)/32

LOEQU24

HIEQU99

COEQU200;

5ms中断计数时间常数,计数200次表示1s

ALBEQU20H.0;

闹钟设置标志

HOUREQU30H;

存放小时变量

MINEQU31H;

存放分钟变量

SECEQU32H;

存放秒钟变量

DEDAEQU33H;

5ms计数器

SECOEQU34H;

存放旧的秒数

XEQU35H;

LCD位置变量

HHEQU36H;

加载低字节

MMEQU37H;

加载高字节

KEY4

K1EQUP2.4;

按键1引脚定义

K2EQUP2.5;

按键2引脚定义

K3EQUP2.6;

按键3引脚定义

K4EQUP2.7;

按键4引脚定义

LCD控制信号引脚定义

RSEQUP0.0;

LCDRS引脚定义

ENEQUP0.1;

LCDEN引脚定义

SPKEQUP3.4;

压电喇叭信号

WLEDEQUP3.7;

工作指示灯引脚定义

ORG0H;

程序代码由地址0开始执行

JMPSTART

ORG0BH;

定时器0中断地址设置

JMPT0_INT

START:

CLREN;

LCDOFF

CLRALB;

消除闹铃标志

MOVHH,#1;

内定闹铃时间为1h

MOVMM,#I;

内定闹铃时间为1min

CALLSET_LCD;

LCD初始化

CALLBZ

CALLLED_BL;

LCD闪动,表示程序开始执行

CALLINIT;

初始变量

CALLINIT_TIMER;

初始化定时器

CALLMENU

按键扫描子程序

LOOP:

无穷循环

CALLTIME_PRO;

时间计时处理

TESTKEY

JBK1,L1;

未按下K1键则继续扫描

K1KEYED..........

CALLBZ

MOVDPTR,#MADJ;

显示执行消息

MOVA,#1

CALLLCD_PRINT

CALLSET_TIME;

设置目前时间

JMPLOOP

L1:

JBK2,L2;

未按下K2键则继续扫描

K2KEYED

CALLBZ

MOVDPTR,#MLAL;

MOVA,#1

CALLLOOK_ATIME;

显示闹铃时间

CALLLED_BL

L2:

JBK3,L3;

未按下K3键则继续扫描

JNBK3,$;

等K3键放开

K3KEYED

MOVDPTR,#MAADJ

CALLLED_PRINT

CALLSET_ATIME;

设置闹铃时间

CALLMENU

JMPLOOP

L3:

JBK4,L4;

未按下K4键则继续扫描

K4KEYEDALARMALBON/OFF

CPLALB

JNBALB,L31

ALARMON;

闹铃启动

CALLBZ

L31:

ALARMOFF;

闹铃未启动发出一声响

L4:

LMESSI1:

DB"

PCLLIO51CLCOK"

0

LMESSI2:

TIME:

"

TITLE:

PCLL.ASM8051CLOCKWITHLCDCKWITHLCD+ALARM+BZ"

初始化程序

INIT:

初始化控制变量

MOVDEDA,#0;

5ms计数器清除为0

MOVSECO,#0;

旧的秒数清除为0

MOVSEC,#0;

秒的变量清除为0

MOVMIN,#0;

分钟变量清除为0

MOVHOUR,#0;

小时变量清除为0

RET

INT_TIME:

初始化定时器接口,使用定时器0模式0计时

MOVTMOD,#00000000B;

设置定时器0工作模式为0

MOVIE,#10000010B;

启动定时器0中断产生

MOVTL0,#LO;

MOVTHO,#H1;

SETBTR0;

启动定时器0开始计时

RET

计时程序

USETIMERMODE0

COUNT=5ms/0.001ms=5000

T0_INT:

定时器0中断程序每隔5ms中断一次

PUSHACC;

将累加器放入堆栈

MOVTL0,#L0;

MOVTH0,#H1;

加载高字节

INCDEDA;

5s计数值加1

1SECTIMEOUTCHECK

MOVA,DEDA

CJNEA,#CO,TT;

一秒是否到了

MOVDEDA,#0;

计数值清除为0

CPLWLED;

LED灯亮灭变换

INCSEC;

秒计数加1

MOVA,SEC

CJNEA,#60,TT;

是否1min到了?

1MINTIMEOUT

INCMIN;

分计数加1

MOVSEC,#0;

秒计数清零

MOVA,MIN

是否1h到了?

1HOURTIMEOUT

INCHOUR;

小时计数加1

MOVMIN,#0;

分计数清零

MOVA,HOUR

CJNEA#24,TT;

是否24h到了?

秒钟变量清除为0

MOVHOUR,#0;

小时变量清除为0

TT:

POPACC;

将累加器由堆栈取出

RETI

K2:

HHK3:

MMK4:

OK;

SET_TIME

CLRTRO;

定时器动作暂停

Movsec,#0;

SCAN3KEYTOADJ;

SO:

JBK2,S1;

未按下K2键继续扫描

K1KEYEDADJHH。

小时调整

CALLBZ;

发出哔的一声

小事计数加1

MOVA,HOUR

CJNEA,#24,S11;

是否24小时到了?

MOVHOUR,#0;

小时变量清除为零

S11

CALLCONV;

转换数据至LCD

MOVR5,#20;

延迟一下

CALLDELAY

JMPS0;

继续程序执行

……………………

S1:

JBK3,S2;

未按下K3键则继续扫描

K2KEYEDADJMM…………..;

分钟调整

CALLBZ

分钟计数器加1

CJNEA,#60S21;

是否60min到了?

MOVMIN,#0;

分计数器清0

S21:

转换显示数据到LCD

MOVR5,#20;

CALLDELA;

JMPSO;

继续执行

……………..

S2:

JBK4,SO;

JNBK4,S;

有按下则等待放开

K3KEYEDOK…..;

设置完成

SETBTRO;

启动定时器

………………

A:

DIGX:

LCDXPOS;

在LCD第一行显示数字

SHOWONLCDLINE1

SHOW_DIG:

MOVB,#10;

设置被除数

DIVAB;

除法运算,结果A存除数,B存余数

ADDA,#30H;

A为十进制,转换为字符

PUSHB;

B放入堆栈暂存

MOVB,X;

设置LCD显示的位置

CALLLCDP1;

由LCD显示出来

POPB;

B有堆栈取出来

MOVA,B;

B为个位数

转换为字符

INCX;

LCD显示位置加1

MOVB,X;

设置LCD显示位置

LCDXPOS

SHOW_DIG2:

MOVB,#10

DIVAB

ADDA,#30H

INCX

MOVB,X

CALLLCDP2

显示现在的时间时时:

分分:

秒秒数据

;

CONVERTTOASCIIANDSHOW

CONV:

SHOWHOUR…..;

显示小时数

MOVA,HOUR

MOVX,#5

CALLSHOW_DIG2

INCX

MOVA,#’:

SHOWMIN…………….;

显示分钟数据

MOVA,MIN

CALLSHOW_DIG2

MOVB,X

SHOWSEC……………….;

显示时间秒数

MOVA,SEC

INIT_LCD1:

LCD控制指令初始化

MOVA,#28H;

双行显示,字符使用5*7点阵

CALLWCOM

MOVA,#0CH;

光标出现,不闪烁

CALLWCOM

MOVA,#0EH;

每向右移动一位,显示屏不移动

MOVA#01H;

清除LCD显示屏

-----------------------------------

CLR_LINE1;

清除LCD的第一行字符

MOVA,#80H;

设置第一行地址

MOVR0,#24;

设置计数器

C1:

MOVA,#’’;

载入空格符至LCD

CALLWDATA;

输出字符至LCD

DJNZR0,C1;

计数结束

--------------------------------

A=LIEN1OR2;

在LCD的第一行或第二行显示字符

DPTR=MESSAGEPOINTER

LCD_PRINT:

CJNEA,#1,LINE2;

判断是否是第一行

LINE1:

MOVA,#80H;

设置LCD的第一行地址

CALLWCOM;

写入命令

CALLCLR_LINE;

清除该行字符数据

JMPFILL

LINE2:

MOVA,#OCOH

CALLCLR_LINE

MOVA,#OCOH

FILL:

填入字符

CLRA

MOVCA,@A+DPTR;

由消息区取出字符

CJNEA#0,LC1;

判断是否是结束码

LC1:

写入数据

INCDPTR;

指针加1

JMPFILL;

继续填入字符

CLR_LINE:

清除该行LCD字符

MOVR0,#24

CL1:

MOVA,#’’

CALLWDATA

DJNZR0,CL1

--------------------------------

DE:

MOVR7,#5;

短暂延时

DJNZR7,#5

DJNZR7,$

-------------------------

EN1:

短脉冲产生启用信号

SETBEN

CALLDE

CLREN

INIT_LCD:

4位I/O控制LCD接口初始化

MOVPO,#30H;

RS=0R/W=0D7~D4=0011

CALLEN1

MOVPO,#30H

CALLEN1

MOCPO,#30H

MOVPO,#20H;

启动4位接口指令

CALLINIT_LCD1;

LCD指令设置初始化

-----------------------

WCOM:

以4位控制方式将命令写至LCD

WRITEHI4BIT;

写入高4位数据

MOVPO,A

CLRRS;

设置写入命令

RLCA;

左移4位

RLCA

WRITELO4BIT;

写入低4位

MOVPO,A

CLRRS;

SETCOMMAN;

WDATA:

以4位控制方式将数据写入LCD

WRITEHO4BIT;

MOVPO,A

SETBRS;

设置写入数据

WRITELO4BIT

PRINTACHARONLCDLINE1

A=ASCDATA

B=LINEXPOS.

LCDP1:

在第一行显示字符

LINE1

将A放入堆栈

MOVA,B;

设置现实的地址

ADDA,#80H;

设置LCD第一行地址

由堆栈取出A

PRINTACHARONLCDLINE2

LCDP2:

PUSHACC

MOVEA,B

ADDA,#0C0H

POPACC

DELAYR5*10ms;

延迟子程序

DELAY:

总延迟时间R5*10ms

MOVR6,#50

D1:

MOVR7,#100

DJNZR6,D1

DJNZR5,DELAY

LED_BL;

工作指示灯闪烁

MOVR4,#4

LEO:

CPLWLED;

位相反

MOVR5,#10;

延迟100ms

CALLDELAY

DJNZR4,LE0

MMENU:

DB"

1-SET2-AL3-SAL"

0;

LCD显示数据

MADJ:

HK3:

MK4:

OK"

MLAL:

NOWALARMTIME:

"

MAADJ:

K2K3:

MENU:

LCD显示菜单

MOVDPTR,#MMENU

MOVA,#1

CALLLCD_PRINT

BZ:

压电喇叭发出哗的一声

MOVR6,#0

BI:

CALLDEX

CPL,SPK

DJNZR6,B1

MOVR5,#10

DEX:

MOVR7,#180;

短暂延迟

DE1:

NOP

DJNZR7,DE1

LOOKALARMTIME;

查看已设置的闹钟时间

LOOK_ATIME:

SHOWHOUR.............;

显示小时数

MOVA,HH

MOVX,#5

MOVA,#'

:

'

MOVB,X

SHOWMIN.........;

显示分钟数

MOVA,MM

CALLSOW_DIG2

INC.X

CALLLCDP2

SHOWSEC………………..;

显示秒钟数为0

MOVA,#0

闹钟时间设置

显示闹钟时间

SET_ATIME:

CALLLOOK_ATIME;

加载闹钟时间数据

SCEAN3KEYTOADJ………………….

ASO:

JBK2,AS1;

未按下K2继续扫描

K1KEYEDADJHH…….;

调整小时

INCHH

CJNEA,#24,AS11;

MOVHH,#0;

小时清零

AS11:

CALLLOOK_ATIME;

加载闹钟数据到LCD

MOVR5,#20;

CALLDELAY

JMPASO

………………………………………………..

AS1:

JBK3,AS2

K2KEYEDADJMM…….

INCMM

CJNEA,#60,AS21

MOVMM,#0

AS21:

CALLLOOK_ATIME

MOVR5,#20

JMPASO

……………………………………………………….

AS2:

JBK4,AS0;

JNBK4,$;

灯K4键放开

K3KEYEDOK………………………….

--------------------------------------------------------

JBALB,TI3

RET

TI:

CHECKALARM…………………..;

检查闹钟时间是否到了

MOVA,HOUR

MOVB,HH

CJNEA,B,BK;

检查闹钟小时时间

MOVA,MIN

MOVB,MM

检查闹钟分钟时间

TIMEMATCH……………………..

CALLTIME_OUT;

执行检查闹钟时间到了处理

BK:

----------------------------------------------------

TIME_OUT:

所设时间到了

M1:

CALLLED_BL;

LED闪动

KEY4STOP……………….

JBK4,M1;

等待是否按下K4键

JNBK4,$;

CALLLED_BL;

清除闹铃位

---------------------------------------------------------

END

英文:

89c51

PinDescription

VCC

Supplyvoltage.

GND

Ground.

Port0

Port0isan8-bitopendrainbidirectionalI/Oport.Asan

outputporteachpincansinkeightTTLinputs.When1s

arewrittentoport0pins,thepinscanbeusedashighimpedance

inputs.

Port0mayalsob

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1