终极版单片机课程设计 电子钟.docx
- 文档编号:12857151
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:26
- 大小:107.31KB
终极版单片机课程设计 电子钟.docx
《终极版单片机课程设计 电子钟.docx》由会员分享,可在线阅读,更多相关《终极版单片机课程设计 电子钟.docx(26页珍藏版)》请在冰豆网上搜索。
终极版单片机课程设计电子钟
2硬件系统的设计
2.1硬件系统模块功能介绍
2.1.1时钟电路
单片机本身是一个复杂的同步时序系统,为了保证同步工作方式的思想,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。
本设计采用单片机片内时钟电路结合外部晶振、电容产生。
在at89s52芯片内部有一个高增益方相刚大器,其输入端为芯片引脚XTAL1,输出端魏应交XTAL2。
而在内部,XTAL1和XTAL2之间跨接晶体振荡器。
时钟电路产生的震荡脉冲为单片机提供时钟脉冲信号。
2.1.2键盘电路
本系统采用的是独立键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
他软件是采用查询结构,首先逐位查询每根I/O口线的输入状态,如某根I/O口线输入为低电平,则可确认该口线所对应的按键已按下,然后,在转向该键功能处理程序。
2.1.3复位电路
复位是单片机的初始化操作,其主要功能是吧PC初始化为0000H,是单片机从0000H单元开始执行程序,复位电路采用的是按键复位,他是通过复位端经电阻与VCC电源接通而实现的,它兼具上电复位功能。
2.1.4数码管电路
数码管是一种把多个LED显示段集成在一起的显示设备。
动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
本设计采用两个四位共阳数码管实现。
位控线通过八个PNP接在8951P2口,段控线接至P0口线。
2.2设计课题电路原理图
2.2.1电路原理图见附录一
2.2.2PCB图见附录二
2.2.3元器件布局图见附录三
2.3设计课题元器件清单
表2.1元器件清单
元器件名称
规格
数量
AT89S52
1
底座
3
晶振
12MHz
1
发光二极管
9
单排插
40脚
1
三极管
9012
9
蜂鸣器
1
小按键
9
下载口座子
十芯
1
18b20温度传感器
1
六脚开关
1
USB电源线加接口
1
电阻
200Ω
1
电阻
4.7KΩ
1
电阻
1KΩ
3
电阻
470Ω
24
电解电容
220μF
1
瓷片电容
33pF
2
排阻
10KΩ
2
短路帽
3
杜邦线8p
1
PCB板子
1
电源白色插座
1
3软件系统的设计
3.1使用单片机资源的情况
K0-K3键分别连接P0.0-P0.3,当有键按下时P0.0-P0.3的某一位为低电平,反之,则为高电平;
两个八位数码管位控线分别连接P2口的P2.0-P2.7,其段控线分别接至P1口的P1.0-P1.7。
采用共阳数码管,当控制位为低电平时,LED相应段点亮。
单片机内部资源使用情况:
78H字节单元:
十进制数时十位,非压缩BCD码
79H字节单元:
十进制数时个位,非压缩BCD码
7AH字节单元:
横杠,非压缩BCD码
7BH字节单元:
十进制数分十位,非压缩BCD码
7CH字节单元:
十进制数分个位,非压缩BCD码
7DH字节单元:
横杠,非压缩BCD码
7EH字节单元:
十进制数秒十位,非压缩BCD码
7FH字节单元:
十进制数秒个位,非压缩BCD码
4AH字节单元:
时计数单元,非压缩BCD码
4BH字节单元:
分计数单元,非压缩BCD码
4CH字节单元:
秒计数单元,非压缩BCD码
2FH.0位单元:
S2键标志位
2FH.1位单元:
S3键标志位
2FH.2位单元:
S4键标志位
2FH.3位单元:
S5键标志位
2FH.4位单元:
S6键标志位
2FH.5位单元:
S7键标志位
2FH.6位单元:
S8键标志位
2FH.7位单元:
S9键标志位
20H.0位单元:
S2键键值,S2键按下为1,S2键未按下为0
20H.1位单元:
S3键键值,S3键按下为1,S3键未按下为0
20H.2位单元:
S4键键值,S4键按下为1,S4键未按下为0
20H.3位单元:
S5键键值,S5键按下为1,S5键未按下为0
20H.4位单元:
S6键键值,S6键按下为1,S6键未按下为0
20H.5位单元:
S7键键值,S7键按下为1,S7键未按下为0
20H.6位单元:
S8键键值,S8键按下为1,S8键未按下为0
20H.7位单元:
S9键键值,S9键按下为1,S9键未按下为0
3.2软件系统各模块功能简要介绍
本系统的软件系统主要可分为主程序、键扫子程序定时计数中断程序、、显示子程序、加以子程序五大模块。
(1)主程序
主程序先对计数单元、显示单元、定时器计数初始化,然后重复调用按键处理模块和数码管显示模块,若无按键按下则显示“P.”,若有按键按下,则转入相应的功能程序。
(2)按键处理子程序
判定有无按键动作,再调用延时子程序去抖动,确认是否真正有闭合键,计算并保存闭合键键码,判定闭合键是否释放,恢复闭合键键码,最终判断键盘上哪个键被按下,然后将标志位标志。
(3)定时计数中断程序
定时器计数器T0用于时间计时,选择工作方式1,重复定时,定时时间为50ms,进入中断后,对定时器重新赋值,中断50ms时间到则返回,判断中断20次,秒加1返回,循环60次后,秒计数单元清零、分加1返回,再次循环60次后,分计数单元清零、整点加1返回中断断口,循环24次后清零,最后返回。
在对各单元计数同时,把它们的值放在到存储器单元的指定位置。
(4)显示子程序
本系统共用8个共阳数码管,从右到左依次显示秒个位,秒十位,横线,分个位,分十位,横线,时个位,时十位。
数码管信息用8个内存储单元存放,这8个内存单元为显示缓冲区。
采用软件译码法动态显示。
(5)加以子程序
按下相应键,将计数单元加一后,除以10,除数放在相应时、分、秒十位,余数放在时、分、秒的个位,最后送到相应显示缓冲区。
3.3软件系统程序流程框图
(1)主程序流程图
图3.1主程序流程图
(2)中断处理流程图
图3.2中断处理流程图
(3)键扫子程序流程图
图3.3键扫子程序流程图
(4)加一子程序流程
图3.4加一子程序流程图
(5)显示程序流程图
图3.5显示程序流程图
3.4软件系统程序清单
;**********************************************************************;
;项目名称:
数字电子钟的设计
;设计者:
朱团
;设计日期:
2010年12月29日
;**********************************************************************;
;堆栈栈底90H;
;**********************************************************************;
;LED数码管显示器设定;
;P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,a
;P2.7---P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)
;显示缓冲区设定从左至右依次为7FH,7EH,7DH,7CH,7BH,7AH,79H,78H
;**********************************************************************;
;独立式键盘设定;
;8个按键S2至S9分别依次接在P1.0至P1.7口线;
;**********************************************************************;
;键功能程序;
;KEY0
;KEY1
;KEY2
;KEY3
;**********************************************************************;
;子程序;
;DIR(数码管显示子程序)
;DL(1毫秒延时子程序,晶振频率12MHz)
;加一子程序:
;HOU0(时加一)
;MIN0(分加一)
;SEC0(秒加一)
;KEY键扫描子程序
;KEYCHULIP1口数据处理子程序
;*********************************************************************;
;中断服务程序:
TASK2
;**********************************************************************;
;常数表格;
;TAB(共阳数码管字型代码表)
;TAB11(系统提示符P.字型代码序号表)
;TAB22(系统开启00-00-00)
;**********************************************************************;
;数据存储器变量及常量单元定义;
;伪指令区
HOUEQU4AH
MINEQU4BH
SECEQU4CH
;**********************************************************************;
;系统起始程序区
;**********************************************************************;
ORG0000H
START:
LJMPMAIN
ORG000BH
LJMPTASK2
/**********************************************************************/
;系统监控程序区;
/**********************************************************************/
ORG0050H
MAIN:
MOVHOU,#00H
MOVMIN,#00H
MOVSEC,#00H
MOVSP,#80H
MOVPSW,#00H
MOVTMOD,#01H
MOVTH0,#03CH;定时器初始化,50ms
MOVTL0,#0B0H
SETBEA
SETBET0
/**********************************************************************/
;显示P.键盘扫描;
/**********************************************************************/
P_1:
MOVR0,#78H
MOVR7,#00H
MOVDPTR,#TAB11
FIND1:
MOVA,R7
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCR7
CJNER7,#8,FIND1
TASK1:
LCALLDIR;显示P.,调用DIR显示子程序
LCALLKEY;键扫,扫描值存入20H单元中
JB20H.0,KEY0;判断K0键是否按下
AJMPTASK1
/**********************************************************************/
;键功能程序;
/**********************************************************************/
KEY0:
;显示00-00-00
MOV20H,#0;清键值
MOVR0,#78H;缓冲区
MOVR2,#0;数据表格的位数
CLRA
FIND2:
MOVDPTR,#TAB22
MOVA,R2
MOVCA,@A+DPTR
MOV@R0,A
INCR0
INCR2
CJNER2,#8,FIND2;判断8个缓冲区是否传送完闭
KDS:
SETBTR0
SETBEA
SETBET0
MOV20H,#00H
DI:
ACALLDIR
ACALLKEY
JB20H.0,TS_0;判按键K0,按下进入调试状态
LJMPDI
/**********************************************************************/
TS_0:
CLRTR0;关定时器
CLREA
CLRET0
TS_1:
LCALLDIR
LCALLKEY
JB20H.0,KDS;K0按下,返回计时
JB20H.1,KEY1;K1按下,调整点
JB20H.2,KEY2;K2按下,调分
JB20H.3,KEY3;k3按下,调秒
LJMPTS_1
/**********************************************************************/
KEY1:
MOV20H,#0;清键值
LCALLHOU0;调时
LC1:
LCALLDIR
LCALLKEY
JB20H.0,KDS;K0按下,返回计时
JB20H.1,KEY1;K1按下,调整点
JB20H.2,KEY2;K2按下,调分
JB20H.3,KEY3;k3按下,调秒
LJMPLC1
/**********************************************************************/
KEY2:
MOV20H,#0;清键值
LCALLMIN0;调分
LC2:
LCALLDIR
LCALLKEY
JB20H.0,KDS;K0按下,返回计时
JB20H.1,KEY1;K1按下,调整点
JB20H.2,KEY2;K2按下,调分
JB20H.3,KEY3;k3按下,调秒
LJMPLC2
/**********************************************************************/
KEY3:
MOV20H,#0;清键值
LCALLSEC0;调秒
LC3:
LCALLDIR
LCALLKEY
JB20H.0,KDS;K0按下,返回计时
JB20H.1,KEY1;K1按下,调整点
JB20H.2,KEY2;K2按下,调分
JB20H.3,KEY3;k3按下,调秒
LJMPLC3
/*********************************中转站*******************************/
LOOP:
LJMPSEC0
LOOP0:
LJMPKEY
/**********************************************************************/
;加1调时子程序;
/**********************************************************************/
HOU0:
ACALLDIR
INCHOU;时加1
MOVA,HOU
MOVB,#10
DIVAB
MOV7FH,A;在显示缓冲区放数
MOV7EH,B
MOVA,HOU
CJNEA,#24,Q_0;时加到24时否?
是,清零
MOV7EH,#00H
MOV7FH,#00H
CLRA
Q_0:
MOVHOU,A
RET
/**********************************************************************/
MIN0:
ACALLDIR
INCMIN;分加1
MOVA,MIN
MOVB,#10
DIVAB
MOV7CH,A;在显示缓冲区放数
MOV7BH,B
MOVA,MIN
CJNEA,#60,Q_1;分加到60时否?
是,清零
MOV7BH,#00H
MOV7CH,#00H
CLRA
Q_1:
MOVMIN,A
RET
/**********************************************************************/
SEC0:
ACALLDIR
INCSEC;秒加1
MOVA,SEC
MOVB,#10
DIVAB
MOV79H,A;在显示缓冲区放数
MOV78H,B
MOVA,SEC
CJNEA,#60,Q_2;秒加到60时否?
是,清零
MOV78H,#00H
MOV79H,#00H
CLRA
Q_2:
MOVSEC,A
RET
/**********************************************************************/
LOOP00:
LJMPTS_0
/**********************************************************************/
;显示子程序;
/**********************************************************************/
DIR:
PUSHDPH
PUSHDPL
PUSHACC
PUSHPSW
SETBRS0
SETBRS1
MOVR0,#78H
MOVR3,#0FEH
MOVR5,#8;循环次数
LOOP01:
MOVA,@R0
MOVP2,R3;;位控
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A;
LCALLDL;调延时
MOVA,R3
RLA
MOVR3,A
INCR0
DJNZR5,LOOP01
POPPSW
POPACC
POPDPL
POPDPH
RET
/**********************************************************************/
;延时子程序;
/**********************************************************************/
DL:
MOVR7,#02H;延时1ms
DL1:
MOVR6,#0FFH
DL2:
DJNZR6,DL2
DJNZR7,DL1
RET
/**********************************************************************/
;中断服务程序;
/**********************************************************************/
TASK2:
PUSHACC
PUSHB
PUSHPSW
LOOP03:
MOVTH0,#03CH;50ms
MOVTL0,#0B0H
INC47H
MOVA,47H
CJNEA,#20,LOOP06;中断执行20次
MOV47H,#0
INCSEC;秒加1
MOVA,SEC
MOVB,#10
DIVAB
MOV79H,A
MOV78H,B
MOVA,SEC
CJNEA,#60,LOOP06;加60次
MOVSEC,#00H;秒归零
MOV79H,#00H
MOV78H,#00H
INCMIN;分加一
MOVA,MIN
MOVB,#10
DIVAB
MOV7CH,A
MOV7BH,B
MOVA,MIN
CJNEA,#60,LOOP06;加60次
MOVMIN,#00H
MOV7BH,#00H;分归零
MOV7CH,#00H
INCHOU;时加一
MOVA,HOU
MOVB,#10
DIVAB
MOV7FH,A
MOV7EH,B
MOVA,HOU
CJNEA,#24,LOOP06;加24次
MOVHOU,#00H;归零
MOV7EH,#00H
MOV7FH,#00H
MOVMIN,#00H
MOVSEC,#00H
LOOP06:
POPPSW
POPB
POPACC
RETI
/**********************************************************************/
;键扫描子程序;
/*****************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 终极版 单片机课程设计 电子钟 终极 单片机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)