单片机lcd汇编时钟设计.docx
- 文档编号:9603320
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:21
- 大小:99.76KB
单片机lcd汇编时钟设计.docx
《单片机lcd汇编时钟设计.docx》由会员分享,可在线阅读,更多相关《单片机lcd汇编时钟设计.docx(21页珍藏版)》请在冰点文库上搜索。
单片机lcd汇编时钟设计
单片机课程设计报告
(汇编部分)
课程名称:
单片机原理与应用课程设计
设计题目:
基于液晶显示的数字时钟设计
姓名:
指导老师:
课程设计目的
通过课程设计进一步巩固单片机原理与技术的基本概念、基本理论、分析问题的基本方法;增强自身的软件编程实现能力和解决实际问题的能力,并能有效地将理论和实际紧密结合,拓展在工程实践方面的专业知识和相关技能。
课程设计原理
时钟的计时是采用了单片机内的定时器,由于定时器的计时时间达不到1s,于是通过多次中断的方式来实现。
如定时器方式1,最大的定时时间只能达到131ms,若每次计时100ms,采用中断溢出次数的累积,计满10次。
在时钟运行时,在RAM中规定3个单元作为秒、分、时单元。
从秒到分,从分到时是通过软件累加并进行比较来实现的。
要求每满1秒,则“秒”单元的内容加1;“秒”单元满60,则“分”单元内容加1;“分”单元满60,则“时”单元内容加1;“时”单元满24,则将秒、分、时单元内容请“0”。
显示时,将单元中的内容分为个位和十位,分别送入LCD中显示。
只要给的命令字合适就可以将数字显示在指定的位置。
时钟的其他功能如:
设置时间、日期,闹钟功能,是通过查询的方式进行的,由于计时中断可以中断查询,故不会影响计时。
单片机不停地在查询个按键情况,如果查询到某个按键按下则执行相应的功能。
闹钟和日期都分别在RAM中分到单元,记录日期和闹钟,不停比较计时时间和设置的闹钟时间,若达到闹钟时间则会产生声音。
课程设计内容与步骤
问题分析
设计时钟首先要有计时功能,而单片机中用于计时的是定时器,又由于定时器无法直接定时1s,所以采用了中断的方式,同时为了不影响其计时的准确性,其他功能只采用查询方式。
于是将各功能分成不同的模块,不同的模块负责执行不同的功能。
于是将其分为功能模块和公用模块。
其中显示模块为公用模块
查询模块:
查询开始时就要计时并且查询闹钟定时,对各个功能模块的按键进行查询,若查询到某个按键按下就进入相应的模块程序。
时间设置模块:
该模块调整时间,当按键SETUP按下后进入,此后按键UP和DOWN来调整小时,按OK键保存进入调分,按UP和DOWN键来调整,按OK键保存后进入正常显示。
闹钟时间设置模块:
当SETCLOCK按下后进入设置程序,此后UP和DOWN来调整时,按OK键保存进入调分,用UP和DOWN来调整,按OK键保存后进入调秒,也用UP和DOWN来调整,再按OK键保存后进入调秒,还是用UP和DOWN来调整,按OK键保存后进入正常显示时间。
主流程图:
算法框图
日期设置、时间设置和闹钟设置的思路一致,仅给出时间设置的算法。
说明:
日期由SETUP进入,只是年可以加可以减,分别由UP和DOWN控制。
计时可以计时时、分、秒,当计时到达24小时时,显示为0。
仿真电路图及仿真结果图示
时间显示:
时间设置:
闹钟设置:
误差分析
在这部分由于水平有限,只发现在每次中断过程中重新赋值是造成误差的主要因素,而每次赋值延误2微妙,1秒内中断200次,一共有400微妙的误差,误差为0.04%。
而在LCD上显示时却发现时间一快一慢,不知道是什么原因,可能与延时和调用的程序有关。
心得体会
以前都不会想到自己也可以写出几百条程序,也没有想到可以使LCD按自己的要求显示,现在想想其实单片机确实是苦中有乐。
在设计时钟时确实遇到一些困难,在开始时由于没有注意写了没有用的程序,计时总是闪烁,开始以为是延时的问题,而反复更改延时,还是出现这样的问题。
弄了两天才发现问题所在。
在写完基本的计时程序后就开始加入其它的功能,写完后发现其它功能的程序基本相同,如时间、闹钟、日期设置上都是按键控制进入,按键加减。
感谢老师的指导,也感谢同学们的帮助。
通过这次课程设计让我对单片机有了更进一步的了解,也让我对以后的就业之路更有信心。
参考文献:
张毅刚编《单片机原理与应用设计》哈工大出版社
惠仇编《手把手教你学51单片机》电子工业出版社
附录:
;--------定义-----------
RSEQUP3.5
RWEQUP3.6
EEQUP3.7
SJEQUP1
NHOUREQU31H;闹钟小时存储单元
NMINUTEEQU32H;闹钟分钟存储单元
NSECONDEQU33H;闹钟秒存储单元
HOUREQU41H;小时存储单元
MINUTEEQU42H;分钟存储单元
SECONDEQU43H;秒存储单元
SETUPEQUP2.0;设置键
UPEQUP2.1;加键
DOWNEQUP2.2;减键
OKEQUP2.3;确认键
SETCLOCKEQUP2.4;设置闹钟键
SPEAKEREQUP2.5
;----开始----
ORG0000H
AJMPMAIN
ORG000BH;T0中断入口地址
AJMPIT0P
ORG0100H
MAIN:
MOVSP,#60H
MOVTMOD,#01H
MOV20H,#14H
CLRA
MOV31H,#00H;清零
MOV32H,#00H
MOV33H,#00H
MOV41H,#00H
MOV42H,#00H
MOV43H,#00H
SETBET0
SETBEA
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
START:
LCALLDELAY;延时一段时间
MOVSJ,#38H;
ACALLENABLE;写指令38H,(6)8位数据接口,双行显示
MOVSJ,#38H;
ACALLENABLE;写指令38H
MOVSJ,#38H;
ACALLENABLE;写指令38H
MOVSJ,#38H;
ACALLENABLE;写指令08H
MOVSJ,#01H;
ACALLENABLE
MOVSJ,#06H;
ACALLENABLE
MOVSJ,#0CH;
ACALLENABLE
MOVSJ,#80H;
ACALLENABLE
MOVDPTR,#TABLE1;第一行表头位置
CALLDISPLAY1;调用第一行写子程序
LOOP:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY2;调用第二行写子程序
JNBSETUP,HERE0;查询判断
LJMPL1
HERE0:
JNBSETUP,HERE0
SETE:
CLREA;调整时间
JNBUP,HERE1;查询判断
LJMPSET1
HERE1:
JNBUP,HERE1
HOUR_UP:
;时加
LCALLDELAY
INC41H
MOVA,41H
CJNEA,#24,SET1
MOV41H,#00
SET1:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY2;调用第二行写子程序显示
JNBDOWN,HERE2;查询判断
LJMPSET2
HERE2:
JNBDOWN,HERE2
HOUR_DOWN:
LCALLDELAY
DEC41H
MOVA,41H
CJNEA,#0FFH,SET2
MOV41H,#23
SET2:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
LCALLDISPLAY2;调用第二行写子程序
JNBOK,HERE3;查询判断
LJMPSETE
HERE3:
JNBOK,HERE3
NEXT:
JNBUP,HERE4;查询判断
LJMPNEXT1
HERE4:
JNBUP,HERE4
MINUTE_UP:
LCALLDELAY
INC42H
MOVA,42H
CJNEA,#60,NEXT1
MOV42H,#00
NEXT1:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
LCALLDISPLAY2;调用第二行写子程序
JNBDOWN,HERE5;查询判断
LJMPNEXT2
HERE5:
JNBDOWN,HERE5
MINUTE_DOWN:
CALLDELAY
DEC42H
MOVA,42H
CJNEA,#0FFH,NEXT2
MOV42H,#59
NEXT2:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY2;调用第二行写子程序
JNBOK,HERE6;查询判断
SJMPNEXT
HERE6:
JNBOK,HERE6
L1:
SETBEA;设置闹钟
JNBSETCLOCK,HERE7;查询判断
JMPL2
HERE7:
JNBSETCLOCK,HERE7
S1:
JNBUP,HERE8;查询判断
LJMPS2
HERE8:
JNBUP,HERE8
NHOUR_UP:
LCALLDELAY
INC31H
MOVA,31H
CJNEA,#24,S2
MOV31H,#00
S2:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY3;调用第二行写子程序
JNBDOWN,HERE9;查询判断
LJMPS3
HERE9:
JNBDOWN,HERE9
NHOUR_DOWN:
LCALLDELAY
DEC31H
MOVA,31H
CJNEA,#0FFH,S3
MOV31H,#23
S3:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
LCALLDISPLAY3;调用第二行写子程序
JNBOK,HERE10;查询判断
LJMPS1
HERE10:
JNBOK,HERE10
S4:
JNBUP,HERE11;查询判断
LJMPS5
HERE11:
JNBUP,HERE11
NMINUTE_UP:
LCALLDELAY
INC32H
MOVA,32H
CJNEA,#60,S5
MOV32H,#00
S5:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
LCALLDISPLAY3;调用第二行写子程序
JNBDOWN,HERE12;查询判断
LJMPS6
HERE12:
JNBDOWN,HERE12
NMINUTE_DOWN:
CALLDELAY
DEC32H
MOVA,32H
CJNEA,#0FFH,S6
MOV32H,#59
S6:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY3;调用第二行写子程序
JNBOK,HERE13;查询判断
SJMPS4
HERE13:
JNBOK,HERE13
S7:
JNBUP,HERE14
LJMPS8
HERE14:
JNBUP,HERE14
NSECOND_UP:
LCALLDELAY
INC33H
MOVA,33H
CJNEA,#59,S8
MOV33H,#00
S8:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
CALLDISPLAY3;调用第二行写子程序
JNBDOWN,HERE15;查询判断
LJMPS9
HERE15:
JNBDOWN,HERE15
NSECOND_DOWN:
LCALLDELAY
DEC33H
MOVA,33H
CJNEA,#0FFH,S9
MOV33H,#59
S9:
MOVSJ,#0C0H;第二行位置
ACALLENABLE;调用写指令
MOVDPTR,#TABLE2;第二行表头位置
LCALLDISPLAY3;调用第二行写子程序
JNBOK,HERE16;查询判断
LJMPS7
HERE16:
JNBOK,HERE16
L2:
MOVA,41H
CJNEA,31H,L3
MOVA,42H
CJNEA,32H,L3
MOVA,43H
CJNEA,33H,L3
CLRSPEAKER
LCALLDELAY
SETBSPEAKER
L3:
LJMPLOOP
;**********************ENABLE控制字写入使能***********************
ENABLE:
CLRRS;写命令时序(参照1602LCD使用说明书)
CLRRW
CLRE
ACALLDELAY
SETBE
RET
;*******************中断服务子程序,自动秒加1,进而调节时间**********************
IT0P:
PUSHPSW
PUSHA
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZ20H,RETURN
MOV20H,#14H
MOVA,#01H
ADDA,43H
;DAA
MOV43H,A
CJNEA,#3CH,RETURN
MOV43H,#00H
MOVA,#01H
ADDA,42H
;DAA
MOV42H,A
CJNEA,#3CH,RETURN
MOV42H,#00H
MOVA,#01H
ADDA,41H
;DAA
MOV41H,A
CJNEA,#18H,RETURN
MOV41H,#00H
RETURN:
POPA
POPPSW
RETI
;************************循环写字符,显示在LCD上****************************
DISPLAY1:
MOVR1,#00H;将R1清0
A1:
MOVA,R1;把R1的值送到ACC
MOVCA,@A+DPTR;查表取将显示的数据入ACC
ACALLA2;调用写程序写入单个字节
INCR1;将工作寄存器指针加一
CJNER1,#12H,A1;R1的内容加到16后就返回到A1处
RET;
DISPLAY2:
MOVA,41H;显示小时
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
MOVA,#3AH;显示冒号
ACALLA2
MOVA,42H;显示分
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
MOVA,#3AH;显示冒号
ACALLA2
MOVA,43H;显示秒
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
RET
DISPLAY3:
MOVA,31H;显示小时
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
MOVA,#3AH;显示冒号
ACALLA2
MOVA,32H;显示分
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
MOVA,#3AH;显示冒号
ACALLA2
MOVA,33H;显示秒
MOVB,#0AH
DIVAB
MOVCA,@A+DPTR
ACALLA2
MOVA,B
MOVCA,@A+DPTR
ACALLA2
RET
A2:
MOVSJ,A;写单个字符
SETBRS;写数据时序(1602LCD说明书)
CLRRW
CLRE
ACALLDELAY
SETBE
RET
;**********************延时***********************
DELAY:
MOVR7,#40
D1:
MOVR6,#100
D2:
DJNZR6,D2
DJNZR7,D1
RET
;**********************表格***********************
TABLE1:
DB"MAJIAN2011-5-31"
TABLE2:
DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 lcd 汇编 时钟 设计