找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10414|回复: 2
收起左侧

基于51单片机的数字钟课程设计报告

[复制链接]
ID:360637 发表于 2018-6-27 23:02 | 显示全部楼层 |阅读模式
单片机课程报告
专业:电气自动化
姓名:JION学长
QQ:
指导老师:朱**

一、设计背景
   数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。

二、单片机课程设计目的
1.进一步熟悉和掌握8051单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5.通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机系统的全过程,为今后从事相应打下基础。
6.掌握SPI串口进行数据传输的应用,并学会使用外部芯片辅助项设计。
7.锻炼通过自学与自己探索的方式解决问题的能力。
8.通过此次课程设计将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。
三、课程设计要求。
1.本系统共用4个数码管从左到右依次显示月、日/时、分采用软件译码静态显示。
2.按键处理设置为:如没有按键,则时钟正常走时并且第二个数码管的小数点一秒一下。
3.当按下切换按键时进入时间/日期切换键时,显示日期小数点常亮,再按一下有变成时间显示。
4.校正时间功能
按下校正键,月数码管重复闪烁,小数点常亮,这样在按下加调键可以进行校时。
再按下校正键时,日数码管重复闪烁,小数点常亮,这样在按下加调键可以进行校时。
再按下校正键时,时数码管重复闪烁,小数点闪烁,这样在按下加调键可以进行校时。
再按下校正键时,分数码管重复闪烁,小数点闪烁,这样在按下加调键可以进行校时按。按下确定键后程序正常走时 。

设计方案
4.1、计时部分课程设计思路
该课程设计是利用80C51单片机内部的定时/计数器、中断系统、以及行列键盘,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间、校时、启动控制等。用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为62500ms(自己计算)。形成定时时间为62500ms。用片内RAM的2FH单元对62500ms计数,计16次产生秒计数器34H单元加1,秒计数器加到60则分计数器33H单元加1,分计数器加到60则时计数器32H单元加1,时计数器加到24则时计数器清0。然后把分、时 、日、月计数器分成分单元和时单元放到4个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时高位、小时低位---分高位、分低位和显示日期格式为月高位、月低位---日高位、日低位。

4.4资源分配:
按键信息存储单元 50H
月单元 30H
日单元 31H
时单元 32H
分单元 33H
秒单元 34H
计数单元 2FH
清零标志位 20H.1
时间/日期标志位 20H.0
显示的四位BCD码依次放入43H、42H、41H、40H
校正指针 21H
显示缓冲区 3BH 3AH,
4.2、按键判断部分课程设计思路
当每十六微妙进位一次时,程序就进行一次判断按键是否有按下的(是否有 6 按键功能 切换键,切换日期与时间 校正键 校时键, 确定键校正键按下k2),判断是否与上次按键相同,如果相同直接送入时间缓冲间送出显示,如果不相同就保存按下的按键再进行判断是不是切换键(ACC.5,SET2) 按下,如果是时间时期同时取反,将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。如果不是,判断是否是校正键按下,如果不是重复将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。如果是校正键按下就进入校正状态,将校正指针初值设成(00,01、10、11、分别代表分、时日、月)同样判断校正指针(20H.1)中的值进入下面分、时、日、月四个子程序中执行,同时进入每个时间日期子程序中都要进行判断是否有ACC.6 ,ADD2;(加法)和ACC.7,SURE;确定键按下.每次按键任何一个键间日期缓冲间显示。如下图所示:


4.3、数码管显示部分
把我们设计好的程序通过查表在数码管上显示出来,数码管上从左到右分别显示月、日/时、分,四个数码管分别显示高位和低位,切换时间显示时,要显示出小数点闪烁.
如下图所示:

4.5程序流程图:

4.6子程序流程图:


六、总结及建议
课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在一天半的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

  1. ORG 0000H
  2.        SJMP MAIN
  3.        ORG 000BH      
  4.        LJMP ITOP
  5.        ORG 0030H
  6. MAIN:  MOV 50H,#0FFH    ;按键信息初始化为未按键状态
  7.        MOV 30H,#1       ;月单元
  8.        MOV 31H,#1       ;日单元
  9.        MOV 32H,#0       ;时单元
  10.        MOV 33H,#0       ;分单元
  11.        MOV 34H,#0       ;秒单元      
  12.        MOV 2FH,#16      ;2FH为十六分之一秒计数单元
  13.        CLR 20H.1        ;校正状态标志清零,为正常走时状态
  14.        SETB 20H.0       ;时间/日期标志置1
  15.        MOV TMOD,#01H    ;置T0工作于方式1
  16.       MOV TH0,#0BH     ;采用12M晶振,定时十六分之一秒
  17.        MOV TL0,#0DCH    ;装载定时器初值
  18.        MOV IE,#82H      ; 允许中断     
  19.        SETB TR0         ;启动定时器
  20.        SJMP $
  21. ITOP:  PUSH PSW         ;现场保护
  22.        PUSH ACC        
  23.        MOV TH0,#0BH   
  24.        MOV TL0,#0DCH
  25.        DJNZ 2FH,KEY     ;计数开始
  26.        MOV 2FH,#16      ;十六分之一秒计数单元
  27.        MOV A,34H
  28.        ADD A,#01H       ;在0~9之间,加01H
  29.        DA A             ;进行十进制调整
  30.        MOV 34H,A        ;送到秒计数单元
  31.        CJNE A,#60H,KEY  ;未到六十秒转移到KEY,到了则顺序往下执行
  32.        MOV 34H,#00H     ;秒单元清零
  33.        MOV A,33H        ;分单元加1,并做十进制调整
  34.        ADD A,#01H
  35.        DA A
  36.        MOV 33H,A        ;送到分计数单元
  37.        CJNE A,#60H,KEY  ;未到六十分转移到KEY
  38.        MOV 33H,#00H     ;分单元清零
  39.        MOV A,32H        ;时单元加1,并做十进制调整
  40.        ADD A,#01H
  41.        DA A
  42.        MOV 32H,A        ;送到时单元
  43.        CJNE A,#24H,KEY  ;未到二十四小时转移,到了则顺序往下执行
  44.        MOV 32H,#00H     ;时单元清零
  45.        MOV A,31H        ;日单元加1,并做十进制调整
  46.        ADD A,#01H      
  47.        DA A
  48.        MOV 31H,A        ;送到日单元
  49.        CJNE A,#31H,KEY  ;未到三十一天转移
  50.        MOV 31H,#01H     ;日单元变为一
  51.        MOV A,30H        ;月单元加1,并做十进制调整
  52.        ADD A,#01H
  53.        DA A
  54.        MOV 30H,A        ;送到月单元
  55.        CJNE A,#12H,KEY  ;未到十二个月转移
  56.        MOV 30H,#01H     ;月单元变为一
  57. KEY:   JNB 20H.1,ZOUSHI ;判断是否校正状态,不是,则转非校正状态
  58.        LJMP JIAOSHI     ;是,则转为校正状态
  59. ZOUSHI: MOV A,P1
  60.        CJNE A,50H,KEY1  ;判断是否与上次按键相同,不相同则转移到KEY
  61.        LJMP NONE1       ;相同则不断判键
  62. KEY1:  MOV 50H,A        ;保存上次按键信息
  63.        JNB ACC.4,SWITCH1 ;是否按下切换键
  64.        JNB ACC.5,SET1   ;是否为校正键
  65.        LJMP NONE1       ;没按与无效键均不作判断
  66. SWITCH1:CPL 20H.0       ;时间与日期的转换
  67. NONE1: JNB 20H.0,DATE1  ;判断日期与时间的标志
  68.        MOV 3BH,32H      ;将时间送到显示缓冲区
  69.        MOV 3AH,33H     
  70.        LJMP DISP
  71. DATE1: MOV 3BH,30H      ;将日期送到显示缓冲区
  72.        MOV 3AH,31H
  73.        LJMP DISP
  74. SET1:  SETB 20H.1       ;切换到校正标志
  75.        MOV 21H,#0       ;校正指针并请零
  76.        CLR 20H.0        ;选择日期标志
  77.        MOV 3BH,30H      ;将日期送到显示缓冲区
  78.        MOV 3AH,31H     
  79.        LJMP DISP
  80. JIAOSHI:MOV A,P1
  81.        CJNE A,50H,KEY2  ;判断是否与上次按键相同
  82.        LJMP NONE2       ;若相同则不能判断按键
  83. KEY2:  MOV 50H,A        ;保存上次按键信息
  84.        JNB ACC.5,SET2   ;是否为校正键
  85.        JNB ACC.6,ADD2   ;是否为加键
  86.        JNB ACC.7,SURE   ;是否为确定键
  87.        LJMP NONE2       ;空操作
  88. SET2:  INC 21H          ;校正指针并自动加1
  89.        ANL 21H,#03H
  90.        SJMP NONE2
  91. ADD2:  MOV A,#30H       ;指向需要校正的指针
  92.        ADD A,21H
  93.        MOV R0,A
  94.        MOV A,@R0        ;需要校正的指针并自动加1
  95.        ADD A,#1
  96.        DA A
  97.        MOV @R0,A
  98.        CJNE R0,#30H,DATE     ;判断月是否校正完成,校正完成跳转日
  99.        CJNE @R0,#13H,NONE2
  100.        MOV @R0,#1
  101.        SJMP NONE2
  102. DATE:  CJNE R0,#31H,HOUR     ;判断日是否校正完成,完成则跳转到时
  103.        CJNE @R0,#32H,NONE2
  104.        MOV @R0,#1
  105.        SJMP NONE2
  106. HOUR:  CJNE R0,#32H,MIN       ;判断时是否校正完成,完成则跳转到分
  107.        CJNE @R0,#24H,NONE2
  108.        MOV @R0,#0
  109.        SJMP NONE2
  110. MIN:   CJNE @R0,#60H,NONE2      ;校正分
  111.        MOV @R0,#0
  112.        SJMP NONE2
  113. SURE:  CLR 20H.1      ;校时完成跳转到走时标志         
  114.        SJMP TIME2
  115. NONE2: JNB 21H.1,DATE2  ;判断送到显示缓冲区的是时间还是日期
  116. TIME2: SETB 20H.0       ;时间/日期标志置1,为显示时间状态
  117.        MOV 3BH,32H      ;时间送到显示缓冲区
  118.        MOV 3AH,33H     
  119.        LJMP DISP
  120. DATE2: CLR 20H.0        ;时间/日期标志位清零,为显示日期状态
  121.        MOV 3BH,30H      ;日期送到显示缓冲区
  122.        MOV 3AH,31H     
  123. DISP:  MOV A,3BH ;显示缓冲区中的内容分解为四位BCD码依次放入43H~40H单元
  124.        ANL A,#0F0H
  125.        SWAP A
  126.        MOV 43H,A
  127.        MOV A,3BH
  128.        ANL A,#0FH
  129.        MOV 42H,A
  130.        MOV A,3AH
  131.        ANL A,#0F0H
  132.        SWAP A
  133.        MOV 41H,A
  134.        MOV A,3AH
  135.        ANL A,#0FH
  136.        MOV 40H,A
  137.        JNB 20H.1,DISP1;不是校正状态,正常显示,否则校正状态下,闪烁显示
  138.        JNB 2FH.3,DISP1  ;若2FH.3为1,校正内容对应的BCD码单元送熄灭码
  139.        JNB 21H.0,N1     ;为0高两位传送,为1低两位传送
  140.        MOV 40H,#0AH
  141.        MOV 41H,#0AH
  142.        SJMP DISP1
  143. N1:    MOV 42H,#0AH
  144.        MOV 43H,#0AH
  145.        LJMP DISP1
  146. DISP1: MOV DPTR,#TAB    ;指向表单
  147.        MOV A,40H        ;查最高位
  148.        MOVC A,@A+DPTR
  149.        CJNE A,#09H,NEXT1        ;判断最高位是否为0
  150.        MOV A,#0FFH      ;为0 则给熄灭码
  151. NEXT1: MOV SBUF,A       ;传送到数码管上,串行静态显示
  152.        JNB TI,$
  153.        CLR TI
  154.        MOV A,41H        ;查第二位
  155. MOVC A,@A+DPTR
  156.        MOV SBUF,A       ;传送到数码管上
  157.        JNB TI,$         ;等待传输完毕
  158.        MOV A,42H        ;查第三位
  159.        CLR TI           ;允许继续传输
  160.        MOVC A,@A+DPTR   ;查显示数据对应段码
  161.        JNB 20H.0,NEXT2   ;判断时间/日期标志
  162.        ;CJNE A,#11H,NEXT2   ;  日期灭0,时间状太不灭0
  163.        ;MOV A,#0FFH
  164.        ;MOV C,2FH.3      ;判断并改变小数点,并判断半秒亮半秒灭
  165.        ;ANL C,20H.0
  166.        mov c,2fH.3
  167.        MOV ACC.4,C      ;小数点为.4位
  168. NEXT2: MOV SBUF,A
  169.        JNB TI,$
  170.        CLR TI
  171.        MOV A,43H        ;查第四位
  172.        MOVC A,@A
  173.        MOV SBUF,A
  174.        JNB TI,$
  175.        CLR TI
  176.        POP ACC          ;现场恢复
  177.        POP PSW
  178.        RETI
  179. TAB:   DB 11H,0d7H,98H,92H,56H,32H,30H,97H,10H,12H,0FFH
  180.        END
复制代码

完整的Word格式文档51黑下载地址:
单片机课程设计.doc (984.33 KB, 下载次数: 36)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:548175 发表于 2019-5-27 11:03 | 显示全部楼层
可以拿来作为学生的实训作业了
回复

使用道具 举报

ID:650207 发表于 2019-12-12 16:14 | 显示全部楼层
非常好的作业
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表