《《单片机原理及接口技术》多通道百分秒表(共20页).doc》由会员分享,可在线阅读,更多相关《《单片机原理及接口技术》多通道百分秒表(共20页).doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上单片机原理及接口技术课程设计报告课题名称多通道百分秒表设计学 院自动控制与机械工程学院专 业机械设计制造及其自动化班 级姓 名学 号 时 间 基于单片机的多通道百分秒表设计摘要:近年来随着科技的飞速发展,单片机的运用正在不断的走向深入,同时带动传统控制检测日新月异的更新。本秒表设计采用8051单片机为中心器件,利用其定时/计数器定时、计数的原理,结合显示电路、按键控制电路等外围电路来完成。将软、硬件有机的结合起来,使得系统能够实现4位LED显示,显示时间为00.00到99.99秒,每秒自动加一,可以用开关控制开始、停止、复位,并且能拥有多通道(两个或以上)分别计时功能
2、。其软件系统采用C语言编写程序,包括:显示程序、中断初始化程序、中断服务程序、显示程序及开关控制程序。通过KEIL4与PROTEUS进行联合调试,使得硬件与软件有机的结合起来,达到了预期目的。关键词:单片机,秒表,多通道Abstract:In recent years along with the rapid development of science and technology, the single-chip microcomputer application is constantly deepening, led the traditional control test at th
3、e same time change rapidly update. The stopwatch design using 8051 single chip as a core device, using the timer / counter timing, counting principles, combined with display circuit, control circuit and other peripheral circuit to complete. The soft, hardware of organic combination, so that the syst
4、em can achieve 4 LED display, display time is 0 to 99.99 seconds, plus a second automatic, can use the switch to control start, stop, reset, and can have multiple channels ( two or more ) are functions of time. The system software using C language programming, including: display program, interrupt i
5、nitialization, interrupt service routines, display and switch control procedures. Through the KEIL4 and PROTEUS joint debugging, which makes hardware and software combined with organic, to achieve the expected goal.Key words: Single Chip Microcomputer; Stopwatch; Multi Channel目录一、内容提要1.设计任务基于AT89C51
6、设计一个5位LED数码作为“多通道百分秒表”。2.主要功能(1)、显示时间为00.00到99.99,每百分之一秒自动加一。(2)、设计一个有五个按键的键盘。K1:开始,K2:停止,K3:复位,K4通道加1,K5:通道减1。(3)、设计LED提醒,即D1小灯按照当前通道隔一秒亮一次,可以通过开关关闭该功能。 (4)、其他功能:D2、D3小灯按照01、02通道分别计时时间到10秒时熄灭。(定时:到某一时间有LED提醒功能)。3.设计提示(1)、用1个6位7段LED数码管作为显示设备,最高位显示通道号,低四位显示时间。 (2)、可采用定时器,定时时间为10MS。 (3)、可参考proteus仿真图二
7、、步骤及方案根据系统的设计要求,选择AT89C51单片机作为系统的核心来完成定时、计数的功能,用74HC245来完成数据的锁存和对LED的刷新控制,用外围开关电路实现对单片机的外围输入,用小灯来实现对于计时等功能的提示。该系统的设计总体思路如下:开关K1把开始信号传输给AT89C51单片机,单片机开始计数,然后在P2口输出信号,通过74HC245后传输给LED数码管控制数码管位数是否启用,然后P0口传输相对应的信号控制启用的数码管位输出的具体信号。同理,其余开关的信号分别控制了AT89C51的停止、复位和通到的加减。外接的小灯接到P1.5、P1.6、P1.7口,分别作用于计时提示。综上,可知7
8、SEG-MPSX6-CC的最高2位用来显示通道,低四位用来显示时间(00.00到99.99秒),按照功能要求,确定由四个部分组成:主控制器,开关控制、小灯显示、LED显示。总体设计电路结构图如图所示:三、硬件设计1.单片机的选择与外围电路AT89C51作为秒表计时系统的核心器件。该器件是INTEL公司生产的MCS51系列单片机的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS51的CMOS产品。不仅结合了HMOS的高速和高密度技术及HMOS的低功耗特征,而且继承和扩展了MCS48单片机的体系结构和指令系统。单片机小系统的电路图如图所示。 AT89C51单片机
9、的主要特征:(1)与MCS51兼容,4K字节可编程闪烁存储器;(2)灵活的在线系统编程,掉电标识和快速编程特性;(3)寿命为1000次写/擦周期,数据保留时间可10年以上;(4)全静态工作模式:0HZ33HZ;(5)三级程序存储器锁定;(6)1288位内部RAM,32位可编I/O线;(7)两个16位定时器/计数器,5个中断源,4个8位并行的I/O接口,1个全双工I/O接口。2.单片机与显示模块电路由74HC245芯片和电阻,导线构成,控制锁存单片机输出信号。74HC245元件的封装:(1)第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低
10、电平时信号由“B”端输入“A”端输出。 (2)第29脚“A”信号输入输出端,A1=B1、A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。 (3)第1118脚“B”信号输入输出端,功能与“A”端一样,不在描述。 (4)第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。 (5)第10脚GND,电源地。 (6)第20脚VCC,电源正极。74HC245真值表:3.开关电路由电源、导线、电阻、开关(K1、K2、K3、K4、K5五个开关)
11、构成,K1连接P1.0口控制开始;K2连接P1.1口控制暂停;K3连接P1.2口控制复位清零;K4连接P1.3口控制通道减1;K5连接P1.4口控制通道加1。如图:图 开关电路4.显示LED电路由7SEG-MPSX6-CC共阴LED8段位显示器构成:结构图为:abcde fg12345. dp678910e d G c dpg f G a b其真值表为:显示字符共阴极接法八段状态断码(共阴)spgfedcba0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH7000001110
12、7H8011111117FH9011011116FH.1000000080H综上则可知:显示0123456789.断码3FH06H5BH4FH66H6DH7DH07H7FH6FH80H5.外围小灯电路采用了3个LED小D1、D2、D3,当按钮按下后,3个LED小灯接入电路,接口为:D1端接到P1.5口、D2端接到P1.6口、D3端接到P1.7口,其中D1小灯按照当前通道隔一秒亮一次,D2、D3小灯按照01、02通道分别计时时间到10秒时熄灭。如图。6.整体电路protuus仿真图四、软件设计系统程序包括:主函数程序、显示函数程序、中断函数程序、开关函数程序、系统初始化函数程序,通道设置函数程序
13、。主程序结构:1.系统主函数程序主程序程序中调用了两个子函数程序,分别是中断初始化函数程序及显示函数程序。2.初始化函数程序初始化函数程序包括对定时器/计数器的工作方式设定、初值设定。3.显示函数程序显示函数程序通过识别两个通道的刷新标志位flag_1和flag_2来实现双通道显示转换。4.开关函数程序 开关函数程序主要通过P1.0、P1.1、P1.2三个引脚来操作秒表的开始、停止、清零。5.中断函数程序中断函数程序通过P1.3和P1.4控制用户选择的通道数,然后根据开关函数来分别对两个通道的刷新标志位flag_1和flag_2赋值,进而实现通道的互相切换。五、调试把程序从KEIL中生成HEX
14、文件,导入单片机中,测试是否实现题目要求的各个功能。1.由于开始计算中断初始时间不准确,故重新设置初始化时间;2.经过调试,延时时间设为1000效果最佳;3.由于3通道数要求过于复杂,故采用双通道设计;4.由于难以实现一个按键具备:开始、停止及清零功能,所以只能采用三个按键分别控制。经过耐心的调试,最终实现设计要求。PROTEUS仿真图如图:通道一通道二六、课程设计体会通过两周的设计实训,让我们了解了设计电路的程序的基本步骤,以及多通道百分秒表的原理。同时在软件设计编程上,我们了解到了很多编程方面的方法和技巧,并且使我们对单片机及其他芯片的各个引脚的功能有更深的了解,巩固了单片机的书面知识,发
15、现了以往在学习中忽略的东西,明白了在实际的设计工作中只有书面知识是不够的,只有在自己的实践中才能发现问题并解决问题,从而不再犯眼高手低的错误。在这次的课程设计过程中,我们运用了以前学过的专业知识,如Protues仿真、汇编语言、C语言、模拟和数字电路的知识等。并且查阅大量的设计资料,每一步都有可能出现的问题,我们所做的就是迎接问题,改正错误,使自己的作品更加完善。在学习过程中带着问题去学习我发现效率很高,这就是在这次课程设计中的又一个收获。要做好一个课程设计,就必须做到在课程设计之前,对所用单片机的内部结构有一个系统的理解,知道该单片机有哪些资源:要有一个清晰的思路和一个完整的软件电路图;在程
16、序设计时,不能妄想一次将整个程序设计好,反复修改、不断改进是程序设计的必经之路,要养成注释程序的好习惯,这样为资料的保留和交流提供了方便。总的来说,通过这次的课程设计更进一步地增强了实验的动手能力,提高了组成系统、编程、调试的动手能力。在今后的学习生活中,要牢记在实验中的经验教训,争取获得更大的进步。并且在这次在这次设计中,我们了解到了团队合作的重要性,对以后步入社会积累了很好的经验。七、参考文献 梁 立、解 敏 C程序设计实例教程 清华大学出版社; 秦曾煌 电工学(第六版) 高等教育出版社; 吴亦锋、陈德为 单片机原理与接口技术 电子工业出版社;边清远、王志强 MCS-51单片机运用与开发使
17、用子程序 人民邮电出版社附录:源程序代码#include reg51.h#define THC0 0xd8#define TLC0 0xf0void StarandStop();unsigned char code Duan=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0-9段数码管,共阴极unsigned char DataBuffer4=0,0,0,0,DataBuffer_14=0,0,0,0,DataBuffer_24=0,0,0,0;/四个数码管显示数值,数组变量定义unsigned int a=1;unsigned int
18、hdrSec_1=0,miao_1=0,hdrSec_2=0,miao_2=0;bit flag_1=0,flag_2=0;/三个通道数码管刷新标志位sbit P10=P10; sbit P11=P11;sbit P12=P12;sbit P13=P13;sbit P14=P14;sbit P15=P15;sbit P16=P16;sbit P17=P17;sbit P07=P07;/*程序初始化*/void timer1_init()TMOD=0x11;/初始化两个定时器TR0=1; /启动定时器0ET0=1; /允许定时器中断EA=1; /总中断打开TH0=THC0;TL0=TLC0;/*
19、显示程序*/void display()unsigned char b; int x;while(1)if(miao_1=10)P16=0;if(miao_2=10)P17=0;if(a=1)if(miao_1%2=1)P15=0;else if(miao_1%2=0) P15=1;DataBuffer0=DataBuffer_10;DataBuffer1=DataBuffer_11;DataBuffer2=DataBuffer_12;DataBuffer3=DataBuffer_13;if(a=2)if(miao_2%2=1)P15=0;else if(miao_2%2=0)P15=1;Da
20、taBuffer0=DataBuffer_20;DataBuffer1=DataBuffer_21;DataBuffer2=DataBuffer_22;DataBuffer3=DataBuffer_23;for(b=0;b1;x-); /*中断程序*/void timer0() interrupt 1TMOD=0x11;/初始化两个定时器TH0=THC0;TL0=TLC0;/*通道设置*/if(P13=0)a=1;if(P14=0)a=2;StarandStop(); if(flag_1=1&flag_2=1)hdrSec_1+;hdrSec_2+;if(hdrSec_2=99)hdrSec_
21、2=0;miao_2+;if(miao_2=99) miao_2=0; DataBuffer_20=miao_2%100/10; /前两位显示秒表DataBuffer_21=miao_2%10;DataBuffer_22=hdrSec_2%100/10; /后两位显示百分秒表DataBuffer_23=hdrSec_2%10;if(hdrSec_1=99)hdrSec_1=0;miao_1+;if(miao_1=99)miao_1=0; DataBuffer_10=miao_1%100/10; /前两位显示秒表DataBuffer_11=miao_1%10;DataBuffer_12=hdrS
22、ec_1%100/10; /后两位显示百分秒表DataBuffer_13=hdrSec_1%10; if(flag_1=1&flag_2=0)hdrSec_1+;if(hdrSec_1=99)hdrSec_1=0;miao_1+;if(miao_1=99) miao_1=0; DataBuffer_10=miao_1%100/10; /前两位显示秒表DataBuffer_11=miao_1%10;DataBuffer_12=hdrSec_1%100/10; /后两位显示百分秒表DataBuffer_13=hdrSec_1%10;DataBuffer_20=miao_2%100/10; /前两位
23、显示秒表DataBuffer_21=miao_2%10;DataBuffer_22=hdrSec_2%100/10; /后两位显示百分秒表DataBuffer_23=hdrSec_2%10;if(flag_1=0&flag_2=1)hdrSec_2+;if(hdrSec_2=99)hdrSec_2=0;miao_2+;if(miao_2=99) miao_2=0; DataBuffer_20=miao_2%100/10; /前两位显示秒表DataBuffer_21=miao_2%10;DataBuffer_22=hdrSec_2%100/10; /后两位显示百分秒表DataBuffer_23=
24、hdrSec_2%10;DataBuffer_10=miao_1%100/10; /前两位显示秒表DataBuffer_11=miao_1%10;DataBuffer_12=hdrSec_1%100/10; /后两位显示百分秒表DataBuffer_13=hdrSec_1%10;if(flag_1=0&flag_2=0)DataBuffer_20=miao_2%100/10; /前两位显示秒表DataBuffer_21=miao_2%10;DataBuffer_22=hdrSec_2%100/10; /后两位显示百分秒表DataBuffer_23=hdrSec_2%10;DataBuffer_
25、10=miao_1%100/10; /前两位显示秒表DataBuffer_11=miao_1%10;DataBuffer_12=hdrSec_1%100/10; /后两位显示百分秒表DataBuffer_13=hdrSec_1%10;/*开关程序*/三键分别为:开始、停止、清零(正确程序) void StarandStop() if(a=1) if(P10=0) flag_1=1;if(P11=0)flag_1=0;P10=1;if(P12=0)flag_1=0;hdrSec_1=0;miao_1=0;DataBuffer_10=0; /前两位显示秒表DataBuffer_11=0;DataBuffer_12=0; /后两位显示百分秒表DataBuffer_13=0; if(a=2) if(P10=0) flag_2=1;if(P11=0)flag_2=0;P10=1;if(P12=0)flag_2=0;hdrSec_2=0;miao_2=0;DataBuffer_20=0; /前两位显示秒表DataBuffer_21=0;DataBuffer_22=0; /后两位显示百分秒表DataBuffer_23=0; /*主程序*/void main()timer1_init();display();专心-专注-专业
限制150内