基于51单片机的数字秒表课程设计_第1页
基于51单片机的数字秒表课程设计_第2页
基于51单片机的数字秒表课程设计_第3页
基于51单片机的数字秒表课程设计_第4页
基于51单片机的数字秒表课程设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 比赛的一些情况,结合这些参赛队伍,毛老师讲了一些关于比赛 队伍的小车的设计过程以及实现一些功能所需的条件。其中,了解了循迹,避 障,超声测距等电路设计。下午了解了一些关于飞思卡尔的一些情况,李鑫老 师也给我们介绍了些关于实验室的情况。 接下来,毛老师讲了一些关于电子元件的知识,李鑫老师讲了飞思卡尔的 比赛规则以及电磁组、摄像头组、光电组的智能车的不同以及其各自组别的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论