1、电子秒表程序设计1.设计主要内容及要求:要求:1)具有秒表基本功能。 2)显示最小数为0.1秒。 3)能够进行多路计数并分别显示。2.对设计论文撰写内容、格式、字数的要求:(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。(3).论文要求打印,打印时按沈阳工程学院毕业设计(论文)撰写规范的要求进行打印。(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文
2、摘要和关键词、目录、正文、参考文献。3.时间进度安排;顺序阶段日期计 划 完 成 内 容备注11月2日教师讲解题目,学生查阅相关资料21月3日查阅相关资料、进行方案论证31月4日确定多路计数和显示方法41月5、6、9日编写程序51月10、11日调试程序61月12日撰写论文71月13日论文答辩沈 阳 工 程 学 院 单片机 课程设计成绩评定表系(部): 自控系 班级: 测控本091班 学生姓名: 吕平 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良
3、好,能够独立完成设计工作, 0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘以12) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力0.25432工作量工作量饱满,难度适中。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐
4、全,图表完备,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以8)分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩分摘 要单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本次课程设计的核心是C8051F020单片机。自20世纪70年代末诞生至今,经历了单片微型计算机SCM、微控制器MCU及片上系统SoC三大阶段
5、,前两个阶段分别以MCS-51和80C51为代表。随着在嵌入式领域中对单片机的性能和功能要求越来越高,以往的单片机无论是运行速度还是系统集成度等多方面都不能满足新的设计需要,这时Silicon Labs 公司推出了C8051F系列单片机,成为SoC的典型代表。传统的秒表可以分为机械停表和电子秒表。其中,电子秒表在我们日常生活中随处可见,它不仅应用在体育计时中,而且还与工业计时有着重要的联系。这次电子秒表设计通过对一个基于C8051F020单片机的功能实现电子秒表工作的设计学习,详细介绍了单片机应用中的数据转换显示,液晶显示原理,单片机的定时中断原理。从而达到学习、了解单片机相关指令在各方面的应
6、用。设计初衷是为了能够后实现电子秒表的基本功能,分组计时,多组(两组以上)存储数据,分组提取数据等。并且结合液晶显示原理,可以方便的存储与读取,以达到设计的最初目的,从而实现秒表功能。关键词 C8051F020单片机,电子秒表,LCD液晶显示, - 23 -目录课 程 设 计I单片机 课程设计成绩评定表IV摘 要V目录I1设计任务描述- 1 -1.1 设计课题- 1 -1.2 设计目的- 1 -1.3 基本要求- 1 -2设计思路- 2 -3 设计框图- 3 -4 各部分程序设计及参数计算- 4 -4.1 定时器T0设计- 4 -4.2 存储时间设计- 5 -4.3 调出时间设计- 7 -4.
7、4 转换成ASCII码程序设计- 8 -4.5 液晶显示程序设计- 9 -5 工作过程分析- 11 -6 元器件清单- 12 -7 主要元器件介绍- 13 -7.1 C8051f020单片机- 13 -7.1.1管脚图- 13 -7.1.2简介- 13 -总结- 14 -致谢- 15 -参考文献- 16 -源程序清单- 17 - 1设计任务描述1.1 设计课题 电子秒表程序设计1.2 设计目的掌握定时器工作原理,会使用定时器。利用C8051F单片机并行I/O的输入和输出使用。通过液晶显示器接口电路的设计与编程,掌握液晶显示器的原理使用方法,使用液晶显示器并把它嵌入到便携式电子产品中。灵活的运用
8、中断程序。1.3 基本要求 具有秒表的基本功能 显示最小数为0.1秒 能够进行多路计数并分别显示2设计思路 电子秒表程序,首先参照的是赛跑用的秒表。启动秒表时,开始计时,当每按一次键时,能够将数据存储起来,同时保证不影响秒表的计时。按另一个键时,能够调出之前存储的时间。此外,秒表还有清零,重新计时的功能。 所以,设计的电子秒表程序包含T0计数器,外部中断6和外部中断7,以及液晶显示三个部分。运行程序时,打开外部中断6,开始计时,再每按一次中断6时,存储数据。启动外部中断7,停止计时,每按一次中断7时,调出数据。其中,计数部分,是将分存在32H里,秒存在31H里,毫秒存在30H里。为了更精确,我
9、将秒表精确到0.01秒。还有显示部分,显示是在LED液晶显示器里显示的,而液晶显示器只识别ASCII码,所以要将32H、31H、30H里所存储的十六进制数转换成ASCII码。3 设计框图 启动程序 KEY3计时 存储时间 KYE4 调出时间将十六进制数转换成ASCII码 显示时间4 各部分程序设计及参数计算4.1 定时器T0设计选择时钟源:f=12MHz,12分频 CKC0N=00H计数方式:方式1;16位定时计数器初值计算:定时周期为10ms T=216-10000=55536=D8F0H定时器程序:T0: MOV TL0,#0F0H ;初值 MOV TH0,#0D8H INC 30H MO
10、V A,30H CJNE A,#100,LV MOV 30H,#00H INC 31H MOV A,31H CJNE A,#60,LV MOV 31H,#00H INC 32H MOV A,32H CJNE A,#60,LV MOV 30H,#00H MOV 31H,#00H MOV 32H,#00HLV: RETI4.2 存储时间设计30H,31H,32H中的数为十六进制数,液晶显示器无法直接显示其中的数值,因此必须将十六进制转化为液晶显示器是别的ASCII码。即将32H中的十六进制数放在累加器A中。把10放在寄存器B中,执行DIV AB此时A、B中都是BCD数,而LCD只能识别ASCII码
11、,所以要分别将A和B中的数加30H转化成ASCII码33H和34H中,再由33H,34H送给P7口输出。中断6程序: KEY3: CLR 00H SETB TR0 MOV R0,#43H MOV R1,#00H MOV 7FH,#00H MOV A,R6 CJNE A,#00H,LOP1 INC A MOV R6,A MOV R1,#00H LJMP LOP6LOP1: MOV A,R6 CJNE A,#01H,LOP2 INC A MOV R6,A MOV 43H,30H MOV 44H,31H MOV 45H,32H LJMP LOP6LOP2: MOV A,R6 CJNE A,#02H,
12、LOP3 INC A MOV R6,A MOV 46H,30H MOV 47H,31H MOV 48H,32H LJMP LOP6LOP3: MOV A,R6 CJNE A,#03H,LOP4 INC A MOV R6,A MOV 49H,30H MOV 4AH,31H MOV 4BH,32H LJMP LOP6LOP4: MOV A,R6 CJNE A,#04H,LOP5 INC A MOV R6,A MOV 4CH,30H MOV 4DH,31H MOV 4EH,32H LJMP LOP6LOP5: MOV A,R6 CJNE A,#05H,LOP6 MOV 4FH,30H MOV 50H
13、,31H MOV 51H,32H INC A MOV R6,A CLR TR0LOP6: MOV P3IF,#00H RETI4.3 调出时间设计程序如下:KEY4: JB 00H,LOOP1 ;位1跳转 CLR TR0 MOV 7FH,#01H DJNZ R6,LOOP2LOOP1: MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV R6,#00H MOV R1,#00H SETB 00H LJMP LOOP3LOOP2: INC R1 MOV A,R0 MOV 30H,A NC R0 MOV A,R0 MOV 31H,AINC R0 MOV A,R0 M
14、OV 32H,AINC R0LOOP3: MOV P3IF,#00H RETI 4.4 转换成ASCII码程序设计程序如下:ASCII: MOV A,32H;把32H(分)单元中数送到累加器A中 MOV B,#10 DIV AB ;除法,十位给A,个位给B ADD A,#30H ;将A的数转换成ASCII码 MOV 33H,A MOV A,B ADD A,#30H ;将B的数转换成ASCII码 MOV B,A MOV 34H,B MOV A,31H ;把31H(秒)中数送到累加器A中 MOV B,#10 DIV AB ADD A,#30H MOV 35H,A MOV A,B ADD A,#30
15、H MOV B,A MOV 36H,B MOV A,30H; 把30H(毫秒)中数送到累加器A中 MOV B,#10 DIV AB ADD A,#30H MOV 37H,A MOV A,B ADD A,#30H MOV 38H,A 4.5 液晶显示程序设计用LCD模块的3条信号线RSR/W和E控制LCD的读写操作,RS为寄存器选择位,RS=1,选择数据寄存器;RS=0,选择指令寄存器;E为使能信号,下降沿解发;R/W反为读/写信号,R/W反=1,读;R/W反=0,写;D0-D7是8位数据总路线;将P6.0线与E端相连,P6.1线与R/W端相连,P6.2线与RS端相连可利用I/O线P6.2,P6
16、.1和P6.0代替RS,R/W反和E实现读/写操作。程序一如下:MOV P7,#38H ;两行显示5*7点阵MOV P6,#01H ;写命令 MOV P6,#00H ;结束写命令LCALL DELAYMOV P7,#0EH ;开显示,开光标,字符不闪烁MOV P6,#01H ;写命令MOV P6,#00H ;结束写命令LCALL DELAY MOV P7,#06H;I/D=1,AC自动增一,S=0整体显示不移动MOV P6,#01H ;写命令MOV P6,#00H ;结束写命令 LCALL DELAYMOV P7,#01H ;清除DDRAM,置AC=0MOV P6,#01H ;写命令 MOV
17、P6,#00H ;结束写命令LCALL DELAYMOV 30H,#00H ;清零MOV 31H,#00HMOV 32H,#00H程序二: MOV P7,33H ;液晶显示分的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,34H ;液晶显示分的个位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,#: ;液晶显示“:” MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,35H ;液晶显示秒的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV
18、P7,36H ;液晶显示秒的个位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,#: ;液晶显示“:” MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,37H ;液晶显示毫秒的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,38H ;液晶显示毫秒的个位 MOV P6,#05H MOV P6,#04H LCALL DELAY5 工作过程分析首先确定定时器的周期为10ms,这刚好满足精确到0.01S。开始时时间显示为00:00:00,当毫秒到100时,进位,秒加1;秒到60时,
19、进位,分加1。外部按键是KEY3和KEY4,即外部中断6和外部中断7.当第一次按KEY3时,开始计时,第二次按时存储第一组时间,第三次按时存储第二组时间,以此类推。当第一次按KEY4时,显示第一组时间,第二次按时显示第二组时间,以此类推。 具体内容如下,运行主程序时,显示00:00:00,按KEY3时,开始计时,再按时时间存储在43H,44H,45H中,再按时计时不会发生改变,同时将时间存储在46H,47H,48H中。按KEY4时,通过转换程序将十六进制的数据转换成ASCII码,在液晶显示屏中显示第一组时间。6 元器件清单名称数量C8051F020综合教学仪1台USB电缆1条计算机1台7 主要
20、元器件介绍7.1 C8051f020单片机7.1.1管脚图图7.1 c8051f020引脚图7.1.2简介MCS-51系列单片机有100个引脚,正电源和地线两根,外置石英振荡器的时钟线两根,8组8位共64个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24V以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复
21、位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。总结 怎么说呢,这两周的时间说长也不长,说短也不短,但这段时间里学的东西还是很多的。首先,以前也做了好几个单片机实验,只是那些比较简单,根据课堂上老师讲解的例
22、题,基本上可以做个大概。这次的课程设计,涉及的知识很多,还要自己上网查资料,并且去图书馆找相应的书籍。自己懂的东西太少了,好多东西也看不懂,本以为单片机很容易,但还是被很多东西所纠结。通过这次课程设计,我发现自己要学的东西还有好多。此外,让我感到很神奇,应该是很厉害,单片机的功能太强大了,通过编写程序可以实现好多显示中的东西,电子秒表程序就是一个例子。还有,我曾经想了好几个方案,但是实现起来好麻烦,暂时不会做,所以只能做点基本的功能,其他发挥功能就不会做了。本来理论和实践是两个完全不同的概念,理论上能实现,但实际未必能实现。但是以后我一定要实际也能实现,即时熬夜也要把它做出来。现在编程都要参考
23、别人的程序,感觉好落伍,但晚上想想,说不上自己能做出个更好的,别人做的都没自己改的好。所以,我以后要多参考别人的,多总结,全部弄懂,弄明白其中的原理,然后想想自己有没有更好得方法。还有,多向同学学习,多向老师请教。 致谢 在这里,我要感谢各位同学的帮助,没有他们的帮忙我就不能这么顺利。在这次课设里遇见了好多的问题,例如我设计的秒表精确到0.01s,但计时的时候末两位是11,22,33这样计数,而不是01,02,03的累加计数。还有就是调出时间有问题,它不显示时间,乱码了。 有时同学为了帮我们解决问题,连午饭也不吃,真的很感激。虽然大家都是早上随便吃了一点点,要到下午3点多才走,大家都饿着肚子一
24、起研究,但是在一起工作的热情还是让自己很欣慰的。在这里再次感谢大家的帮助。参考文献1. C8051F单片机原理及应用 鲍可进 主编,中国电力出版社2. 手把手教你单片机 周兴华 主编,北京航空航天大学出版社 3. 8051单片机课程设计实训教材陈明荧 主著,清华大学大学出版社源程序清单$INCLUDE(C8051F020.INC) ORG 00H LJMP MAIN ORG 0BH LJMP T0 ORG 93H LJMP KEY3 ORG 9BH LJMP KEY4 ORG 100HMAIN: MOV WDTCN,#0DEH ;关看门狗 MOV WDTCN,#0ADH MOV OSCXCN,
25、#67H ;晶体振荡器方式,f=12MHzLOP: MOV A,OSCXCN JNB ACC.7,LOP ;判断晶体振荡器稳定工作 MOV OSCICN,#08H ;选择外部振荡器作为系统时钟 MOV CKCON,#00H ;定时器按系统时钟的12分频计数 MOV TMOD,#01H ;T0方式,16位定时/计数器 MOV TL0,#0F0H ;初值 MOV TH0,#0D8H MOV P3IF,#00H MOV EIE2,#30H ;允许外部中断6和外部中断7 MOV XBR2,#40H ;交叉开关使能 LCALL DELAY MOV P7,#38H ;两行显示5*7点阵 MOV P6,#0
26、1H ;写命令 MOV P6,#00H ;结束写命令 LCALL DELAY MOV P7,#0EH ;开显示,开光标,字符不闪烁 MOV P6,#01H ;写命令 MOV P6,#00H ;结束写命令 LCALL DELAY MOV P7,#06H ;I/D=1,AC自动增一,S=0整体显示不移动 MOV P6,#01H ;写命令 MOV P6,#00H ;结束写命令 LCALL DELAY MOV P7,#01H ;清除DDRAM,置AC=0 MOV P6,#01H ;写命令 MOV P6,#00H ;结束写命令 LCALL DELAY MOV 30H,#00H ;清零 MOV 31H,#
27、00H MOV 32H,#00H MOV R6,#00H MOV R2,#02H MOV R1,#00H SETB ET0 SETB EAASCII: MOV A,32H ;把32H(分)单元中数送到累加器A中 MOV B,#10 DIV AB ;除法,十位给A,个位给B ADD A,#30H ;将A的数转换成ASCII码 MOV 33H,A MOV A,B ADD A,#30H ;将B的数转换成ASCII码 MOV B,A MOV 34H,B MOV A,31H ;把31H(秒)单元中数送到累加器A中 MOV B,#10 DIV AB ADD A,#30H MOV 35H,A MOV A,B
28、 ADD A,#30H MOV B,A MOV 36H,B MOV A,30H ;把30H(毫秒)单元中数送到累加器A中 MOV B,#10 DIV AB ADD A,#30H MOV 37H,A MOV A,B ADD A,#30H MOV 38H,A LCALL DELAY MOV P7,#01H ;清屏 MOV P6,#01H MOV P6,#00H LCALL DELAY MOV A,7FH CJNE A,#01H,LM ;判断显示R1还是R6,7FH为1时显示R1 MOV A,R1 ADD A,#30H ;转换ASCII码 MOV P7,A MOV P6,#05H ;写数据操作 MO
29、V P6,#04H ;结束写数据 AJMP LNLM : LCALL DELAY MOV A,R6 ADD A,#30H MOV P7,A MOV P6,#05H MOV P6,#04HLN: LCALL DELAY MOV P7,#20H MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,33H ;液晶显示分的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,34H ;液晶显示分的个位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,#: ;液晶显示“:” MOV P6,#05
30、H MOV P6,#04H LCALL DELAY MOV P7,35H ;液晶显示秒的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,36H ;液晶显示秒的个位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,#: ;液晶显示“:” MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,37H ;液晶显示毫秒的十位 MOV P6,#05H MOV P6,#04H LCALL DELAY MOV P7,38H ;液晶显示毫秒的个位 MOV P6,#05H MOV P6,#04H L
31、CALL DELAY LJMP ASCIIT0: MOV TL0,#0F0H ;初值 MOV TH0,#0D8H INC 30H MOV A,30H CJNE A,#100,LV MOV 30H,#00H INC 31H MOV A,31H CJNE A,#60,LV MOV 31H,#00H INC 32H MOV A,32H CJNE A,#60,LV MOV 30H,#00H MOV 31H,#00H MOV 32H,#00HLV: RETIKEY3: CLR 00H SETB TR0 MOV R0,#43H MOV R1,#00H MOV 7FH,#00H MOV A,R6 CJNE
32、A,#00H,LOP1 INC A MOV R6,A MOV R1,#00H LJMP LOP6LOP1: MOV A,R6 CJNE A,#01H,LOP2 INC A MOV R6,A MOV 43H,30H MOV 44H,31H MOV 45H,32H LJMP LOP6LOP2: MOV A,R6 CJNE A,#02H,LOP3 INC A MOV R6,A MOV 46H,30H MOV 47H,31H MOV 48H,32H LJMP LOP6LOP3: MOV A,R6 CJNE A,#03H,LOP4 INC A MOV R6,A MOV 49H,30H MOV 4AH,3
33、1H MOV 4BH,32H LJMP LOP6LOP4: MOV A,R6 CJNE A,#04H,LOP5 INC A MOV R6,A MOV 4CH,30H MOV 4DH,31H MOV 4EH,32H LJMP LOP6LOP5: MOV A,R6 CJNE A,#05H,LOP6 MOV 4FH,30H MOV 50H,31H MOV 51H,32H INC A MOV R6,A CLR TR0LOP6: LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELA
34、Y5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 MOV P3IF,#00H SETB TR0 RETIKEY4: JB 00H,LOOP1 ;位1跳转 CLR TR0 MOV 7FH,#01H DJNZ R6,LOOP2LOOP1: MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV R6,#00H MOV R1,#00H SETB 00H LJMP LOOP3LOOP2: INC R1 ;将43H、44H、45H,46H、47H、48H的数分别传到30H32H中 MOV A,R0 MOV 30H,A INC R0 MOV A,R0 MOV 31H,A INC R0 MOV A,R0 MOV 32H,A INC R0LOOP3: LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELAY5 LCALL DELA