电子时钟课程设计文档格式.docx
- 文档编号:18486679
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:22
- 大小:186.65KB
电子时钟课程设计文档格式.docx
《电子时钟课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
11、K4为确定键,按下后程序正常走时
四、硬件件部分设计
4.1、STC89C51单片机介绍
STC89C51单片机是由深圳宏晶公司代理销售的一款MCU,是由美国设计生产的一种低电压、高性能CMOS8位单片机,片内含8kbytes的可反复写的FlashROM和128bytes的RAM,2个16位定时计数器[5]。
STC89C51单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0~P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。
这些部件通过内部总线联接起来,构成一个完整的微型计算机。
其管脚图如图所示。
STC89C51单片机管脚结构图
VCC:
电源。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
4.2时钟电路设计
AT89C51系列的单片机的时钟方式分为内部方式和外部方式。
内部方式就是在单片机的XTAL1和XTAL2的两引脚外接晶振,就构成了自己振荡器在单片机内部产生时钟脉冲信号。
外部时钟方式是把外部已经有的时钟信号引入到单片机内部。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟有两方面的含义:
一是指为保障系统正常工作的基准震荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;
二是指系统的标准定时时钟,即定时时间。
其电路图如图4-1所示。
图4-1时钟电路图
4.3、复位电路设计
复位操作完成单片机内电路的初始化,使单片机从一种确定的状态开始运行。
当AT89C51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。
因此要求单片机复位后能脱离复位状态复位操作通常有2种基本形式:
上电复位、开关复位。
上电复位要求接通电源后,自动实现复位操作。
开关复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
其电路图如图4-2所示。
图4-2复位电路图
4.4、键盘电路设计
键盘扩展4*4
本次电子闹钟的设计共使用了4个按键,各个按键的功能如表1所示。
4*4行列式键盘,正好用一个单片机的端口8个IO口来控制,同时通过短路片,实现四个独立式的IO口接法
表1各按键的接法和功能
按键名称
连线方法
按键功能
K1
K2
K3
K4
一端接P1.4,一端接地
一端接P1.5,一端接地
一端接P1.6,一端接地
一端接P1.7,一端接地
切换键,切换日期与时间
校正键
校时键,
确定键
4.5、显示部分设计
静态显示,最常用就是通过两个IO口,模拟串行输出到74LS164,理论上可以无限制的控制数码管,这里我们只控制4个共阳数码管
数码显示有静态显示方式与动态显示方式两种。
工作在静态显示方式时,数码管的位线与电源一直相联,每个数码管均处在通电状态,电路的待显示信号经译码驱动电路后分别传输给显示电路,每个数码管同时收到并显示各自接受到的信号。
静态显示时每个数码管均联接有7段线,即每个数码管都需要7个联接端口,这样显示电路在输出端需要的联接端口数等于7,数字电路的待显示信号位数越多,显示电路需要的联接端口就越多。
五.单片机课程设计思路
5.1、计时部分课程设计思路
该课程设计是利用80C51单片机内部的定时/计数器、中断系统、以及行列键盘,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间、校时、启动控制等。
用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为62500ms(自己计算)。
形成定时时间为62500ms。
用片内RAM的2FH单元对62500ms计数,计16次产生秒计数器34H单元加1,秒计数器加到60则分计数器33H单元加1,分计数器加到60则时计数器32H单元加1,时计数器加到24则时计数器清0。
然后把分、时、日、月计数器分成分单元和时单元放到4个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时高位、小时低位---分高位、分低位和显示日期格式为月高位、月低位---日高位、日低位。
5.2、定时器T0初值的设置计算
初值=最大计数值-定时时间/Tcy
我们采用12M晶振,机器周期为1US,最长定时时间为65ms,为了可以实现1S定时,我们将1S分成十六次来计数,每次计数为1000ms/16=62.5ms.
定时器初值=(65536-62500)*机器周期=3036=0BDC
因此定时器的初值设置为:
(TH0)=0BH,(TL0)=0DC
5.3、按键判断部分课程设计思路
当没十六微妙进位一次时,程序就进行一次判断按键是否有按下的(是否有校正键按下k2),判断是否与上次按键相同,如果相同直接送入时间缓冲间送出显示,如果不相同就保存按下的按键再进行判断是不是切换键(ACC.5,SET2)
按下,如果是时间时期同时取反,将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。
如果不是,判断是否是校正键按下,如果不是重复将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。
如果是校正键按下就进入校正状态,将校正指针初值设成(00,01、10、11、分别代表分、时日、月)同样判断校正指针(20H.1)中的值进入下面分、时、日、月四个子程序中执行,同时进入每个时间日期子程序中都要进行判断是否有ACC.6,ADD2;
(加法)和ACC.7,SURE;
确定键按下.每次按键任何一个键都要送入时间日期缓冲间显示。
5.4、数码管显示部分.
把我们设计好的程序通过查表在数码管上显示出来,数码管上从左到右分别显示月、日/时、分,四个数码管分别显示高位和低位,切换时间显示时,要显示出小数点闪烁.
按键信息存储单元50H
月单元30H
日单元31H
时单元32H
分单元33H
秒单元34H
计数单元2FH
清零标志位20H.1
;
时间/日期标志位20H.0
显示的四位BCD码依次放入43H、42H、41H、40H
校正指针21H
显示缓冲区3BH3AH,
K1P1.4
K2P1.5
K3P1.6
K4P1.7
七、计时模块流程图保护现场
重装定时器初值
循环次数减1
否
满16次?
是
秒单元加1
60s到?
秒单元清0,分单元加1
60分到?
分单元清0,时单元加1
24小时到?
时单元清0,日单元加1
否
日单元=30?
是
日单元清0,月单元加1
月单元=12?
恢复现场
返回计时模块流程图
八、主程序流程图
九、课程设计程序
ORG0000H
SJMPMAIN
ORG000BH
LJMPITOP
ORG0030H
MAIN:
MOV50H,#0FFH;
按键信息初始化为未按键状态
MOV30H,#1;
月单元
MOV31H,#1;
日单元
MOV32H,#0;
时单元
MOV33H,#0;
分单元
MOV34H,#0;
秒单元
MOV2FH,#16;
2FH为十六分之一秒计数单元
CLR20H.1;
校正状态标志清零,为正常走时状态
SETB20H.0;
时间/日期标志置1
MOVTMOD,#01H;
置T0工作于方式1
MOVTH0,#0BH;
采用12M晶振,定时十六分之一秒
MOVTL0,#0DCH;
装载定时器初值
MOVIE,#82H;
允许中断
SETBTR0;
启动定时器
SJMP$
ITOP:
PUSHPSW;
现场保护
PUSHACC
MOVTH0,#0BH
MOVTL0,#0DCH
DJNZ2FH,KEY;
计数开始
十六分之一秒计数单元
MOVA,34H
ADDA,#01H;
在0~9之间,加01H
DAA;
进行十进制调整
MOV34H,A;
送到秒计数单元
CJNEA,#60H,KEY;
未到六十秒转移到KEY,到了则顺序往下执行
MOV34H,#00H;
秒单元清零
MOVA,33H;
分单元加1,并做十进制调整
ADDA,#01H
DAA
MOV33H,A;
送到分计数单元
未到六十分转移到KEY
MOV33H,#00H;
分单元清零
MOVA,32H;
时单元加1,并做十进制调整
DAA
MOV32H,A;
送到时单元
CJNEA,#24H,KEY;
未到二十四小时转移,到了则顺序往下执行
MOV32H,#00H;
时单元清零
MOVA,31H;
日单元加1,并做十进制调整
ADDA,#01H
MOV31H,A;
送到日单元
CJNEA,#31H,KEY;
未到三十一天转移
MOV31H,#01H;
日单元变为一
MOVA,30H;
月单元加1,并做十进制调整
MOV30H,A;
送到月单元
CJNEA,#12H,KEY;
未到十二个月转移
MOV30H,#01H;
月单元变为一
KEY:
JNB20H.1,ZOUSHI;
判断是否校正状态,不是,则转非校正状态
LJMPJIAOSHI;
是,则转为校正状态
ZOUSHI:
MOVA,P1
CJNEA,50H,KEY1;
判断是否与上次按键相同,不相同则转移到KEY
LJMPNONE1;
相同则不断判键
KEY1:
MOV50H,A;
保存上次按键信息
JNBACC.4,SWITCH1;
是否按下切换键
JNBACC.5,SET1;
是否为校正键
没按与无效键均不作判断
SWITCH1:
CPL20H.0;
时间与日期的转换
NONE1:
JNB20H.0,DATE1;
判断日期与时间的标志
MOV3BH,32H;
将时间送到显示缓冲区
MOV3AH,33H
LJMPDISP
DATE1:
MOV3BH,30H;
将日期送到显示缓冲区
MOV3AH,31H
SET1:
SETB20H.1;
切换到校正标志
MOV21H,#0;
校正指针并请零
CLR20H.0;
选择日期标志
MOV3AH,31H
JIAOSHI:
MOVA,P1
CJNEA,50H,KEY2;
判断是否与上次按键相同
LJMPNONE2;
若相同则不能判断按键
KEY2:
JNBACC.5,SET2;
JNBACC.6,ADD2;
是否为加键
JNBACC.7,SURE;
是否为确定键
空操作
SET2:
INC21H;
校正指针并自动加1
ANL21H,#03H
SJMPNONE2
ADD2:
MOVA,#30H;
指向需要校正的指针
ADDA,21H
MOVR0,A
MOVA,@R0;
需要校正的指针并自动加1
ADDA,#1
MOV@R0,A
CJNER0,#30H,DATE;
判断月是否校正完成,校正完成跳转日
CJNE@R0,#13H,NONE2
MOV@R0,#1
DATE:
CJNER0,#31H,HOUR;
判断日是否校正完成,完成则跳转到时
CJNE@R0,#32H,NONE2
HOUR:
CJNER0,#32H,MIN;
判断时是否校正完成,完成则跳转到分
CJNE@R0,#24H,NONE2
MOV@R0,#0
MIN:
CJNE@R0,#60H,NONE2;
校正分
SURE:
校时完成跳转到走时标志
SJMPTIME2
NONE2:
JNB21H.1,DATE2;
判断送到显示缓冲区的是时间还是日期
TIME2:
时间/日期标志置1,为显示时间状态
时间送到显示缓冲区
DATE2:
时间/日期标志位清零,为显示日期状态
日期送到显示缓冲区
DISP:
MOVA,3BH;
显示缓冲区中的内容分解为四位BCD码依次放入43H~40H单元
ANLA,#0F0H
SWAPA
MOV43H,A
MOVA,3BH
ANLA,#0FH
MOV42H,A
MOVA,3AH
MOV41H,A
MOV40H,A
JNB20H.1,DISP1;
不是校正状态,正常显示,否则校正状态下,闪烁显示
JNB2FH.3,DISP1;
若2FH.3为0正常显示,若2FH.3为1,校正内容对应的BCD码单元送熄灭码
JNB21H.0,N1;
从校正指针判断送熄灭码的单元,为0高两位传送,为1低两位传送
MOV40H,#0AH
MOV41H,#0AH
SJMPDISP1
N1:
MOV42H,#0AH
MOV43H,#0AH
LJMPDISP1
DISP1:
MOVDPTR,#TAB;
指向表单
MOVA,43H;
查最高位
MOVCA,@A+DPTR
CJNEA,#09H,NEXT1;
判断最高位是否为0
MOVA,#0FFH;
为0则给熄灭码
NEXT1:
MOVSBUF,A;
传送到数码管上,串行静态显示
JNBTI,$
CLRTI
MOVA,42H;
查第二位
MOVC,2FH.3;
判断并改变小数点,并判断半秒亮半秒灭
ANLC,20H.0
MOVACC.0,C
传送到数码管上
JNBTI,$;
等待传输完毕
CLRTI;
允许继续传输
MOVA,41H;
查第三位
MOVCA,@A+DPTR;
查显示数据对应段码
JB20H.0,NEXT2;
判断时间/日期标志
CJNEA,#09H,NEXT2;
日期灭0,时间状太不灭0
MOVA,#0FFH
NEXT2:
MOVSBUF,A
MOVA,40H;
查第四位
POPACC;
现场恢复
POPPSW
RETI
TAB:
DB09H,7DH,07H,15H,71H,91H,81H,3DH,01H,11H,0FFH
END
十、心得体会
做了两天的课程设计,有很多的心得体会,有关于单片机的,也有关于模电数电等基础科目的。
单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。
实践中获得的知识能让我对单片机的知识有更好的认识和理解。
虽然这次的课程设计我参考了一些文献资料,没有做到创新,但在对程序的读写过程中我明白了许多。
这次课程设计的最大收获是只有把理论用到实践中我们才能真正掌握好所学知识。
因为平时单片机已经看得少,对单片机知识有些生疏,无法灵活运用。
刚拿到题目,不知道从哪入手,后来通过查找一些文献资料,参考学长的设计,加深了对单片机的记忆,对设计也有些思路。
单片机课堂教学考虑到大多数同学的需求,主要强调“基本”——基本知识、基本理论、基本方法、基本技能。
而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。
我们正面临就业问题,这次课设给了我们一个机会去试验。
K1为切换键,K2为校正键,K3为校时键,K4为确定键
如没有按按键,则时钟正常走时并且第二个数码管的小数点一秒一下。
当按下K1按键时进入时间/日期切换键时,显示日期小数点常亮,再按一下有变成时间显示。
在按下校正键时k2,月数码管重复闪烁,这样在按下k3键可以进行校时。
再按下校正键时k2,日数码管重复闪烁,这样在按下k3键可以进行校时
第三次按下校正键时k2,时数码管重复闪烁,这样在按下k3键可以进行校时
第四次按下校正键时k2,分数码管重复闪烁,这样在按下k3键可以进行校时
K4为确定键,按下后程序正常走时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 课程设计