基于51单片机的数字秒表课程设计.doc

上传人:土8路 文档编号:10188024 上传时间:2021-04-27 格式:DOC 页数:22 大小:502KB
返回 下载 相关 举报
基于51单片机的数字秒表课程设计.doc_第1页
第1页 / 共22页
基于51单片机的数字秒表课程设计.doc_第2页
第2页 / 共22页
基于51单片机的数字秒表课程设计.doc_第3页
第3页 / 共22页
基于51单片机的数字秒表课程设计.doc_第4页
第4页 / 共22页
基于51单片机的数字秒表课程设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于51单片机的数字秒表课程设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字秒表课程设计.doc(22页珍藏版)》请在三一文库上搜索。

1、电气与自动化工程学院 卓越工程师培养计划 暑暑期期 实实训训报报告告 题 目 秒表系统的设计 年 级 11 级 专 业 自动化 班 级 卓越班 学 号 160111126 姓 名 俞雷 地 点 大学生创新实验室 日 期 2012 年 8 月 12 日2012 年 8 月 20 日 目录目录 一、单片机简介一、单片机简介 .- 2 - 二、设计目标二、设计目标 .- 3 - 1、设计目的:、设计目的:.- 3 - 2、具体操作:、具体操作:.- 3 - 三、硬件设计三、硬件设计 .- 4 - 原理图:原理图: .- 4 - 四、系统的软件设计四、系统的软件设计 .- 5 - 1、软件整体设计思路

2、:、软件整体设计思路:.- 5 - 2、软件流程图:、软件流程图:.- 5 - 3、程序:、程序:.- 6 - (1)数码管秒表显示程序:)数码管秒表显示程序:.- 6 - (2)1602 液晶秒表显示程序:液晶秒表显示程序:.- 13 - 五、五、系统的调试及设计结果系统的调试及设计结果 .- 18 - 1602 液晶液晶秒表显示效果图:秒表显示效果图:.- 18 - LED 数码管数码管秒表显示效果图:秒表显示效果图:.- 18 - 六、创新实验室六、创新实验室课程设计小结课程设计小结 .- 19 - 一、单片机简介一、单片机简介 单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,

3、近几年 得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能 化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生 产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、 智能型家用电器(冰箱、空调、彩电)等。 管脚图如图 1.1 所示。 图 1.1 AT89C52 单片机引脚图 (1) 电源地组 Vcc 和 Vss;VCC(40)脚接+5V 电压;VSS(20)脚接地 (2) 时钟电路组 XTAL1 和 XTAL2 (3) 控制信号组 RST/ALE/PSEN 和 EA (4) I/O 端口 P0, P1, P2 和 P3 二、设计目标二、设计目

4、标 1、设计目的:、设计目的: 1.利用单片机定时器中断实现秒表计时功能。 2.方案一:通过 LED 显示程序的调整,熟悉 LED 动态显示的控制过程。 方案二: 通过对 1602 设置,熟悉 1602 液晶显示的控制过程。 3.通过键盘程序的调整,熟悉矩阵式键盘的控制,熟悉键盘扫描原理。 4.通过阅读和调试简易秒表整体程序,学会如何编制含 LED 动态显示、1602 液晶的显示、键盘扫描和定时器中断等多种功能的综合程序。 2、具体操作:、具体操作: 方案一:方案一:用 AT89C51 设计一个 6 位的数码管显示作为“秒表”,显示时间 范围为 0.00655.36 秒(此处可以通过设置两个变

5、量进行进位操作来达到最大 计数 9999.99 秒),计时精度达到 0.01 秒。利用其定时器的原理,数码管以及 定时器中断来设计计时器。将软硬件结合起来,使得系统能实现 0.00655.36 秒的计时。另外,通过独立按键的设计来对秒表进行控制。key1 键控制计时的 开始与暂停、key2 键控制计时时的保存数据然后可以通过 key4 键控制数据的 输出(可以保存十个,保存十个时秒表可以停止,该功能可用于赛跑中的计时) 、key3 键控制“清零”和保存按下清零键前的最后一次所计时间。(特别声明: 每次处于“暂停状态”的时间都可以在此基础之上进行计时)。 方案二:方案二:用 AT89C51 设计

6、一个 1602 液晶显示的“秒表”,显示时间范围为 0.00655.36 秒(此处可以通过设置两个变量进行进位操作来达到最大计数 9999.99 秒),计时精度达到 0.01 秒。利用其定时器的原理,1602 液晶以及定 时器中断来设计计时器。将软硬件结合起来,使得系统能实现 0.00655.36 秒 的计时。另外,通过独立按键的设计来对秒表进行控制。key1 键控制计时的开 始与暂停、key3 键控制“清零”和保存按下清零键前的最后一次所计时间。 (特别声明:每次处于“暂停状态”的时间都可以在此基础之上进行计时)。 注:由于开发板的键盘对液晶显示有影响,顾放弃数码管秒表显示中的部分功 能。

7、三、硬件设计三、硬件设计 原理图:(程序可用于在下图在软件中仿真也可以用于开发板)原理图:(程序可用于在下图在软件中仿真也可以用于开发板) DB2 DB3 DB4 DB5 DB6 DB7 DB1 DB8 CSDA INT1 D0 D1 D2 D3 D4 D5 D6 D7 SDA SCL 18B20 CSUSB DIOLA DULA WELA ALE LCDEN LCDEN RS RS RW WR RD RD DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DIOLA D1 D2 D3 D4 D5 D6 D7 D0a b c d e f g h DULA D1 D2 D3 D4

8、D5 D6 D7 WE2 WE3 WE4 WE5 WE6 CSAD WELA a b c d e f g h WE1 WE2 WE3 WE4 WE5 WE6 P3.0 P3.1 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/R

9、XD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C52 X1 CRYSTAL C1 30pF C2 30pF 2 3 4 5 6 7 8 9 1 RP1 10K D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2

10、 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U2 74HC573 D1 LED-RED D2 LED-RED D3 LED-RED D4 LED-RED D5 LED-RED D6 LED-RED D7 LED-RED D8 LED-RED 2 3 4 5 6 7 8 9 1 RP2 1K D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U3 74HC573 D0 2 D1 3 D2 4 D3 5 D

11、4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U4 74HC573 C4 1uF R7 10k 共共阴阴极极数数码码管管 DB2 DB3 DB4 DB5 DB6 DB7 DB1 DB8 CSDA INT1 D0 D1 D2 D3 D4 D5 D6 D7 SDA SCL 18B20 CSUSB DIOLA DULA WELA ALE LCDEN LCDEN RS RS RW WR RDRD DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB8 DIOLA D1 D2 D3 D4

12、 D5 D6 D7 D0a b c d e f g h DULA D0 D1 D2 D3 D4 D5 D6 D7 WE1 WE2 WE3 WE4 WE5 WE6 CSAD WELA P3.0 P3.1 D0 D1 D2 D3 D4 D5 D6 D7 RS LCDEN RW_LCD XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0/T2 1 P1.1/T2E

13、X 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C52 X1 CRYSTAL C1 30pF C2 30pF 2 3 4 5 6 7 8 9 1 RP1 10K D0

14、 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U2 74HC573 D1 LED-RED D2 LED-RED D3 LED-RED D4 LED-RED D5 LED-RED D6 LED-RED D7 LED-RED D8 LED-RED 2 3 4 5 6 7 8 9 1 RP2 1K D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6

15、13 Q7 12 LE 11 OE 1 U3 74HC573 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U4 74HC573 C4 1uF R7 10k D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 1602液晶显示器 LM016L 按键 key1按键 key3按键 key4按键 key2 计时开始与暂停 显示 key2 保存的时间清

16、零并保留清零时的时间 按一次保存一个时间 四、系统的软件设计四、系统的软件设计 1、软件整体设计思路:、软件整体设计思路: 将程序模块化与功能,含有多个子程序的调用与嵌套。通过对按键的是否 按下来对秒表进行操作,按键功能在设计目标的具体操作中已经展现。10 毫秒 秒定时采用定时器 T0 中断的工作方式 1 进行,中断及计数的开启与关闭受控于 按键处理程序。 2、软件流程图:、软件流程图: 如图所示。(注:用注:用 1602 液晶的方案中无液晶的方案中无 key2 与与 key4) 初始化函数 程序开始 选择按键 上电 3、程序:、程序: (1)数码管秒表显示程序:)数码管秒表显示程序: /*

17、数码管显示秒表计时数码管显示秒表计时 */ /* 头文件头文件 宏定义宏定义 定义定义 */ #include #define uint unsigned int #define uchar unsigned char uint t,tt; uint table10; uchar yi,er,san,si,wu,liu,i,j,k,l,m,flag; uchar code table0=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x00; uchar code table1=0 xbf,0 x86,0 xdb,0

18、xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef; uchar code table2=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf; /* 位定义位定义 */ sbit dula=P26; sbit wela=P27; sbit key1=P34; /开始与暂停开始与暂停 sbit key2=P35; /保存保存 10 次时间次时间 sbit key3=P36; / 清零与恢复清零与恢复 sbit key4=P37; /读取保存的数据读取保存的数据 /* 函数的申明函数的申明 */ void init(); void display(f

19、lag); void display1(); void keyscan1(); void keyscan2(); void shu(uint t); void delay(uchar d); /* 主函数主函数 */ void main() init(); while(1) display1(); keyscan2(); /* 初始化函数初始化函数 */ void init() m=1; TMOD=0 x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; ET0=1; TR0=0; shu(t); /* 总显示函数总显示函数 */ v

20、oid display(flag) while(flag) display1(); keyscan1(); /* 数据显示函数数据显示函数 */ void display1() P0=table0liu; dula=1; dula=0; P0=0 xff; P0=table20; wela=1; wela=0; delay(5); P0=table0wu; dula=1; dula=0; P0=0 xff; P0=table21; wela=1; wela=0; delay(5); P0=table0si; dula=1; dula=0; P0=0 xff; P0=table22; wela=

21、1; wela=0; delay(5); P0=table1san; dula=1; dula=0; P0=0 xff; P0=table23; wela=1; wela=0; delay(3); P0=table0er; dula=1; dula=0; P0=0 xff; P0=table24; wela=1; wela=0; delay(3); P0=table0yi; dula=1; dula=0; P0=0 xff; P0=table25; wela=1; wela=0; delay(3); /* 动态显示数字循环中的键盘检测动态显示数字循环中的键盘检测 */ void keyscan

22、1() if(key1=0) delay(10); if(key1=0) flag+; while(!key1); delay(10); while(!key1); if(flag%2) /判断 是否暂停 TR0=1; else TR0=0; if(key2=0) delay(10); if(key2=0) if(j=10) j=0; flag+; else tablej=t; j+; while(!key2); delay(10); while(!key2); if(key3=0) delay(10); if(key3=0) l+; if(l%2) /判断 是否清零还是恢复 tt=t; t=

23、0; shu(t); else t=tt; shu(tt); display1(); while(!key3); delay(10); while(!key3); if(key4=0) delay(10); if(key4=0) if(k=10)k=0; t=tablek; shu(t); display1(); k+; while(!key4); delay(10); while(!key4); /* 主程序中主程序中 计时暂停时的键盘检测计时暂停时的键盘检测 */ void keyscan2() if(key1=0) delay(10); if(key1=0) flag+; while(!

24、key1); delay(10); while(!key1); if(flag%2) TR0=1; else TR0=0; display(flag%2); if(key4=0) delay(10); if(key4=0) if(k=10)k=0; t=tablek; shu(t); display1(); k+; while(!key4); delay(10); while(!key4); /* 数字的拆分数字的拆分 */ void shu(uint t) liu=t/100000; wu=t/10000%10; si=t/1000%10; san=t/100%10; er=t/10%10;

25、 yi=t%10; if(liu=0)liu=10; if(wu=0)wu=10; if(si=0)si=10; /* 延时函数延时函数 */ void delay(uchar d) unsigned char a,b,c; for(c=d;c0;c-) for(b=120;b0;b-) for(a=2;a0;a-); /* 定时器定时器 0 工作方式工作方式 1 10 毫秒计时毫秒计时 */ void time0() interrupt 1 /计时 10 毫秒 TH0=(65536-10000)/256; TL0=(65536-10000)%256; t+; shu(t); if(t%100

26、0=170) if(m%2) P1=0 xaa; m+; else P1=0 x55; (2)1602 液晶秒表显示程序:液晶秒表显示程序: /* 1602 液晶显示秒表计时液晶显示秒表计时 */ /* 头文件头文件 宏定义宏定义 定义定义 */ #include #define uint unsigned int #define uchar unsigned char uint t,tt; uchar flag,yi,er,san,si,wu,liu,l,m,num; uchar code table=0123456789 ; uchar code table1= *STOPWATCH*;

27、/* 位定义位定义 */ sbit dula=P26; sbit wela=P27; sbit LCDE=P34; sbit rs= P35; sbit key1=P36; sbit key3=P37; /* 函数的申明函数的申明 */ void init(); void write_com(uchar com); void write_da(uchar da); void shu(uint t); void keyscan1(); void display(); void display1(); void delay(uchar z); /* 主函数主函数 */ void main() in

28、it(); while(1) keyscan1(); display1(); /* 初始化函数初始化函数 */ void init() dula=1; P0=0 x00; dula=0; wela=1; P0=0 xff; wela=0; LCDE=0; write_com(0 x01); write_com(0 x38); write_com(0 x0c); write_com(0 x06); write_com(0 x80); for(num=0;num0;z-) for(i=110;i0;i-); /* 定时器定时器 0 工作方式工作方式 1 10 毫秒计时毫秒计时 */ void ti

29、me0() interrupt 1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; t+; shu(t); if(t%1000=170) if(m%2) P1=0 xaa; m+; else P1=0 x55; 五、五、系统的调试及设计结果系统的调试及设计结果 1602 液晶液晶秒表显示效果图:秒表显示效果图: 上电状态:上电状态: 过程中灯亮状态:过程中灯亮状态: 四位数显示:四位数显示: LED 数码管数码管秒表显示效果图:秒表显示效果图: 上电初始状态:上电初始状态: 三位数显示:三位数显示: 灯亮状态:灯亮状态: 六、创新实验室六、创新实验室

30、课程设计小结课程设计小结 此次为期九天的实训即将结束了,我对自己在此期间的表现还是比较满意 的。还记得刚开始接触 51 单片机还是在去年,那时对单片机可谓是一窍不通。 接触多了之后,渐渐的不再觉得它那么的难懂,自己对单片机也有了点认知。 通过对本次的课程设计,也使自己深刻的认识到自己的很多不足之处。 第一天,了解了一些关于 robocup 比赛的知识,同时也了解了我们院刚刚 参加 robocup 比赛的一些情况,结合这些参赛队伍,毛老师讲了一些关于比赛 队伍的小车的设计过程以及实现一些功能所需的条件。其中,了解了循迹,避 障,超声测距等电路设计。下午了解了一些关于飞思卡尔的一些情况,李鑫老 师

31、也给我们介绍了些关于实验室的情况。 接下来,毛老师讲了一些关于电子元件的知识,李鑫老师讲了飞思卡尔的 比赛规则以及电磁组、摄像头组、光电组的智能车的不同以及其各自组别的特 点与所需实现功能的条件。李鑫老师也找同学帮我们把学习 51 单片机的所需软 件装好。接下来几天大家便开始了学习单片机的之路。期间,基本是戴老师给 我们讲数码管、按键等一些知识。 下面这 12 点是我在学习单片机之前,特地从网上找的别人学习 51 单片机 的心得: 1、万事开头难、要勇敢迈出第一步。 2、 知识 点用到才学,不用的暂时丢一边。 3、 程序不要光看不写,一定要自己写一次。 4、必须学会掌握调试程序的方法。 5、找

32、到解决问题思路比找到代码更重要。 6、开动脑筋,运用多种方法,不断优化自己的程序。 7、看别人的代码,学习人家的思路。 8、 尝试编写一下综合 应用 的程序。 9、着重于培养解决问题的能力,而不是具体看 自己编写了多少代码或者 做过什么。 11、面对一个新项目时,多自己开动脑筋,不要急于找别人的 程序。 12、多利用网络的搜索,学会提问题。 通过这些好的方法加上我之前便自学过,所以单片机基本的程序、功能、 用法等我还是会的,通过这段时间的学习,很多东西我也弄通了,比以前认识 的更加深刻。这是此次实训,对于我来说最大的收获。 记得老师将此次课程设计布置下来的那天上午,我就已经用数码管实现了 秒表

33、的功能,下午又增添了一些功能,接下来就是有一些想法然后完善程序。 第二天,我又尝试了用 1602 液晶来制作秒表。程序写好后,下载到实验板上看 看效果时却没有预计的效果,可以说是完全没有显示,然后一直调程序。就这 样过了大半天。其中,我以为液晶有问题,试的第一个示例程序可以显示,后 来自己不断调程序,再试一个示例程序时,我发现液晶第一行把 7 显示为 3 了, 而且第二行不显示,而自己编的程序就是显示第二行,换了块 1602 液晶后,发 现自己的程序还是正确的。在知道那块 1602 液晶是坏的时候,感觉挺郁闷的, 但之前调程序时,自己却也不觉得累,总是想把问题解决了,那种状态的感觉 很好。 完成了课程设计任务要求后,自己便开始不断完善自己的程序。期间也会 为别的同学提供帮助,与他们讨论他们出现错误的原因,解决的问题的方案等, 解决这些各种各样的问题便是一种在实践中获取经验的过程,而过程使人成长, 那么这个过程很好的帮助自己加深了对单片机的了解与认识。 以上这些便是我在这些天的学习之后所要想要说的。这些天的学习也让我体会 到带着任务学习让我们学的更快,这也是很好的学习方式。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1