单片机课程设计键盘可调时钟.docx
《单片机课程设计键盘可调时钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计键盘可调时钟.docx(14页珍藏版)》请在冰豆网上搜索。
单片机课程设计键盘可调时钟
单片机课程设计
题目:
键盘可调时钟
班级:
姓名:
学号:
指导教师:
设计时间:
2011年1月
评语:
成绩
目录
绪论3
1设计方案4
1.1总体方案设计4
1.2键盘模块4
1.3去抖动设计5
1.4显示模块5
1.5门电路设计5
2硬件设计6
2.1电路图6
3软件设计7
3.1主流程图7
3.2时间显示流程图7
3.3按键流程图8
3.4定时器中断程序9
总结10
绪论
随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。
常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
单片机作为微型计算机发展的一个重要分支,以其高可靠性,高性能价格比,低电压,低功耗等优势,赢得了广泛的应用。
单片机已经成为衡量工业发展水平的标志之一,是产品更新换代,发展新技术,改造老产品的主要手段。
由于功能强大价格低廉,并且可以使用汇编语言或C语言开发程序软件,所以被广泛应用在工业控制上。
基于单片机课程的学习,本小组成员利用单片机实现时钟的显示,利用键盘和门电路控制时间的调整,在设计上采用硬件计数与软件计数相结合的方式,并且定时器T0采用了中断方式,优先级最高。
然后通过开关的闭合与关断来控制时钟的校正,采用二十四小时制计时。
充分利用单片机的资源和空间,较大限度的实现了功能。
在课程设计的过程中,我们发现了许多实际应用中所遇到的问题,在调试的过程中学到了更多的东西。
让我们充分的认识道学以致用的价值!
1设计方案
1.1总体方案设计
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,并通过程序控制扫描输出显示数据。
利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。
且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
根据题目要求设计的总体框图,如图1:
如图1总体框图
1.2键盘模块
键盘是人与单片机打交道的主要设备,键盘有独立式键盘和矩阵键盘,考虑到时间误差的存在以及调整时间的方便性,再加上本设计所需按键较少,因此我们采用独立式键盘。
四个键盘接于P1口,用74ls21与门接于外部中断0,实现了调整时间的快速性,当四个键盘有中断发生,首先判断四个键哪个按下,向CPU发一个中断请求信号,然后调用相应的中断程序。
1.3去抖动设计
按键的读取容易引起误动作,为了保证键识别的准确,为此需要去抖动。
去抖动有硬件和软件两种方案。
方案一可采用硬件方法,加去抖动电路;方案二可采用软件去抖动的方法处理,在这里采用软件延时的方法来避开抖动,待信号稳定之后,再进行键扫描。
延时时间为20ms。
1.4显示模块
显示模块是本次单片机课程设计最核心的部分。
方案一:
采用LCD1602。
LCD1602为工业字符型液晶,能够同时显示16x02即32个字符。
其采用标准的16脚接口,该液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,所以可分容易的实现数字钟数码显示。
方案二:
采用LED共阴极数码管。
共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
基于以上分析,我们考虑到现实经济因素,所以选择了方案二。
时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。
流程图如图2:
1.5门电路设计
为了达到调整时间的快速性与准确性,采用中断方式,四个键盘采用与门芯片74LS21。
当四个键盘有一个按下后就会向CPU申请中断。
2硬件设计
2.1电路图
2.1Proteus仿真图
3软件设计
3.1主流程图
3.2时间显示流程图
3.3按键流程图
3.4定时器中断程序
总结
本次课程设计是用AT89C51单片机CPU及接口电路设计一个数字时钟,其核心部件是89C51,时钟的显示采用6个共阴极LED显示灯,四个开关方便的对秒、分、时分别调整,保证功能完善,工作可靠。
硬件方面:
独立式键盘可以消除时间误差的和方便时间的调整;显示电路采用LED动态显示方式,共阴极端由P2口线控制,分为段选线和位选线,利用人的视觉停留达到显示的效果,段选线控制字符选择,位选线控制显示位的亮或暗,从而简化串行口线的连接。
软件方面:
四个键盘输入与门74LS21,其输出用作中断信号,当四个键盘有一个键按下后就会向CPU申请中断,这样就可以提高CPU工作效率,达到调整时间的快速性与准确性;定时采用片内定时器定时,提高了电子时钟的准确度。
此时钟可以在以下几方面作调整,如:
整点报时,闹钟,显示电路可以采用点阵液晶显示模块(LCD),从而做成一个电子日历。
参考文献
[1]李华等编著,《单片机原理及应用》兰州大学出版社,2001
[2]李建忠编著,《单片机原理及应用》西安电子科技大学出版社,2008
[3]胡汉才编著,《单片机原理及其接口技术》清华大学出版社,2004
[4]贾金铃等编著,《微型计算原理及应用》重庆大学出版社,2006
[5]吴清秀,周荷琴编著,《微型计算机原理与接口技术》中国科学技术大学出版社,2004
附录
参考软件:
ORG0000H
AJMPSTART
ORG0003H
LJMPST1
ORG000BH
AJMPTT0
ORG0030H
START:
MOV30H,#00H;秒个位内存单元
MOV31H,#00H;秒十位内存单元
MOV32H,#00H;分个位内存单元
MOV33H,#00H;分十位内存单元
MOV34H,#00H;时个位内存单元
MOV35H,#00H;时十位内存单元
MOVTMOD,#01H;定时器T0,工作方式1,
MOVTH0,#3CH;定时50MS
MOVTL0,#0B0H;
MOVR0,#30H;指针指向显示单元
MOVR5,#0FEH选中秒个位
MOVR1,#20;
MOV36H,#00H;时位键盘判断时用
MOVR3,#6秒十位判断时用
MOVR2,#6;分十位判断时用
MOVR4,#10;
MOV40H,#10
MOVIE,#81H;
SETBEA;开中断
SETBET0;开T0中断
SETBTR0;记时开始
MAIN:
LCALLDIS
LJMPMAIN
;#################显示子程序###################
DIS:
MOVA,R5;先位码
MOVDPTR,#7FFFH;位码选择p2.7
MOVX@DPTR,A
MOVA,@R0;再段码
MOVDPTR,#TAB;表地址
MOVCA,@A+DPTR查表
MOVDPTR,#0BFFFH;段码选择p2.6
;###############显示小数点###################
CJNER0,#32H,GO111;小数点选择(R0)=/=32H转移
ORLA,#80H
GO111:
CJNER0,#34H,MIN
ORLA,#80H
MIN:
MOVX@DPTR,A;送出去显示
LCALLDELAY;1MS延时
LCALLDELAY
LCALLDELAY
INCR0;修改指针指向下一显示单元
MOVA,R5;也可写为XCHA,R5
JNBACC.5,LH;判断显示完否?
?
RLA;也可写为XCHR5,A
MOVR5,A
AJMPENR;返回循环显示
LH:
MOVR0,#30H;重心定义显示指针
MOVR5,#0FEH;重设位码,形成循环ACC.0-ACC.3
ENR:
RET
;###############定时中断###########################
TT0:
MOVTH0,#3CH;
MOVTL0,#0B0H;
DJNZR1,FANHUI;判断1秒到否?
未到跳转
MOVR1,#20;
INC30H;秒个位加一
DJNZR4,FANHUI;判断10秒到否?
未到跳转
MOVR4,#10;
MOV30H,#00H;
INC31H;
DJNZR3,FANHUI;
MOVR3,#6;
MOV31H,#00H;
INC32H
DJNZ40H,FANHUI;
MOV40H,#10
MOV32H,#00H
INC33H
DJNZR2,FANHUI
MOVR2,#6
MOV33H,#00H
INC36H;时位判断时用
MOVA,36H
CJNEA,#24,JUMP
MOV36H,#00H
JUMP:
MOVA,36H
MOVB,#10
DIVAB
MOV34H,B
MOV35H,A
FANHUI:
RETI
;*********键盘处理程序***********
ST1:
CLREX0;键盘1判断时用
PUSHB
PUSHACC
JBP1.0,ST2
LCALLDELAY111
JNBP1.0,$
LCALLDELAY111
DJNZR3,GO
MOVR3,#6
GO:
INC31H
MOVA,31H
CJNEA,#6,$+3
JNBP1.0,$
JCST2
MOV31H,#00H
MOVA,31H
ST2:
JBP1.1,ST3;键盘2判断时用
LCALLDELAY111
JNBP1.1,$
LCALLDELAY111
DJNZ40H,GO1
MOV40H,#10
GO1:
INC32H
MOVA,32H
CJNEA,#10,$+3
JNBP1.1,$
JCST3
MOV32H,#00H
MOVA,32H
ST3:
JBP1.2,ST4;键盘3判断时用
LCALLDELAY111
JNBP1.2,$
LCALLDELAY111
DJNZR2,GO2
MOVR2,#6
GO2:
INC33H
MOVA,33H
CJNEA,#6,$+3
JNBP1.2,$
JCST4
MOV33H,#00H
MOVA,33H
ST4:
JBP1.3,ST6;键盘4判断时用
LCALLDELAY111
JNBP1.3,$
LCALLDELAY111
INC36H
MOVA,36H
CJNEA,#24,JUMP1
MOV36H,#00H
JUMP1:
MOVA,36H
MOVB,#10
DIVAB
MOV34H,B
MOV35H,A
ST6:
POPACC;键盘中断返回
POPB
SETBEX0
RETI
;##########延时1MS子程序###########
DELAY:
MOVR7,#02H
DE1:
MOVR6,#0FEH
DE2:
DJNZR6,DE2
DJNZR7,DE1
RET
;########键盘延时消抖程序#########
DELAY111:
MOV50H,#2;键盘消抖程序
DE1111:
MOV51H,#255
DJNZ51H,$
DJNZ50H,DE1111
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
END