基于51单片机的数字秒表课程设计、毕业设计论文 - 图文
更新时间:2024-01-12 20:21:01 阅读量: 教育文库 文档下载
单片机课程设计报告
基于51单片机的数字秒表设计
专业:通信工程 学号:11100640225 姓名:罗宏
时间:2014-6-26
目录
一、 课程名称………………………………………………1 二、 设计目的和意义………………………………………1 三、 任务要求………………………………………………1 四、 任务分析、设计方案…………………………………1 五、 具体实现过程…………………………………………9 六、 仿真、实验验证过程及实现结果、现象……………12 七、 结论……………………………………………………14 八、 总结与体会……………………………………………14
- 1 -
一、 课题名称
基于51单片的数字秒表设计
二、 目的和意义
1、通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到电路搭建焊接,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。 2、本次课程设计还可以通过上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。
3、在这次课程设计中,我们运用到了很多一切所学的知识和一些很有用的软件和工具,如keil4编程软件、Proteus仿真软件、Visio软件、等。
4、通过独立完成一个小的数字秒表系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。
5、掌握51单片机软件编程知识、实现功能、设计方法,及KEIL软件使用方法; 6、应用所学模拟电子线路的知识,掌握电路的设计与应用; 7、熟悉PROTEUS的设计与仿真; 8、STC——ISP的使用方法;
9、掌握焊接电子元器件的方法以及查阅元件功能与参数的方法、步骤。
三、 设计目标或任务要求
1 、设计目标
以单片机为核心,设计数字秒表。
通过硬件电路设计,软件设计,电路搭建,作品调试。最后完成本次课程设计。 2 、设计要求
1、计时范围:0~59分59.59秒,整数四位数和小数两位数显示; 2、计时精度10毫秒;
3、复位按钮,计时器清零,并做好下次及时准备; 4、可以对三个对象(A、B)计时,具有启/停控制;
5、设开始、停止A、停止B、显示A、显示B、复位按钮。
四、 任务分析、设计方案
1、
任务分析
- 2 -
数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。
设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。主控制器采用单片机89C52显示电路采用共阳极LED数码管显示计时时间。
本设计利用89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据,P2.0-P2.4口作列扫描输出,P1.1、P3.2、P3.3、P2.5口接四个按钮开关,分别实现开始、暂停、清零和查看上次计时时间功能。电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。硬件电路图按照图1.1进行设计。
8位数码管控制开关STC89C52单片机数码管驱动电路
图1.1 数字秒表硬件电路基本原理图
计时采用定时器T0中断完成,定时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99.99秒重新复位。
再看按键的处理。这四个键可以采用中断的方法,也可以采用扫描的方法来识别。复位键和查看主要功能在于数值复位和查询上次计时时间,对于时间的要求不是很严格。而开始和停止键则是用于对时间的锁定,需要比较准确的控制。因此可以对复位和查看按键采取扫描的方式。而对开始和停止键采用外部中断的方式。
设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,显示电路和回零、启动、查看、计次电路等。主控制器采用单片机89C52,显示电路采用共阳极LED数码管显示计时时间,四个按键均采用触点式按键。
2、单片机的选择
本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自
- 3 -
己的实际情况,选择了stc公司的89C52。
89C52单片机采用40引脚的双列直插封装方式。图1.2为引脚排列图, 40条引脚说明如下:
主电源引脚Vss和Vcc ① Vss接地
② Vcc正常操作时为+5伏电源 外接晶振引脚XTAL1和XTAL2
① XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。
② XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部
振荡器时,此引脚接外部振荡源。
图1.2 8051单片机引脚图
控制或与其它电源复用引脚RST/VPD,ALE/PROG,PSEN和EA/Vpp 输入/输出引脚P0.0 - P0.7,P1.0 - P1.7,P2.0 - P2.7,P3.0 - P3.7。
① P0口(P0.0 - P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器
- 4 -
时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
② P1口(P1.0 - P1.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。
③ P2口(P2.0 - P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。
④ P3口(P3.0 - P3.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。
(1) 运算器
运算器的功能是进行算术运算和逻辑运算。可以对半字节(4位)、单字节等数据进行操作。
(2) 程序计数器PC
程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。
(3) 令寄存器
指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。
3、 显示电路的选择与设计
对于数字显示电路,通常采用液晶显示或数码管显示。本设计的显示电路采用7段数码管作为显示介质。
数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用五位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。所以采用动态显示。
数码管段驱动电路STC89C52单片机8位数码管数码管位驱动电路图1.3 显示电路基本原理图
- 5 -
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
数码显示管分为共阳数码管和共阴数码管两种
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,如图1.4(b),通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
图1.4 (a)数码管引脚图 (b)共阳极内部结构图 (c)共阴极内部结构图 最大
4 、按键电路的选择与设计
本设计中有四个按键,分别实现开始、暂停、复位和计次功能。这四个键可以采用中断的方法,也可以采用查询的方法来识别。对于复位键和查看键,主要功能在于数值复位和对上次计时时间的查看,对于时间的要求不是很严格,而开始和暂停键主要用于时间的锁定,需要比较准确的控制。因此可以考虑,对复位键和查看键采用查询的方式,
- 6 -
而对于开始和暂停键采用外部中断。四个按键均采用低电平有效,具体电路连接图如图1.5所示。
5、 时钟电路的选择与设计
单片机的时钟信号用来提供单片机内各种微操作的时间基准,8051片内设有一个由反向放大器所构成的振荡电路,XTAL1和 XTAL2分别为振荡电路的输入和输出端,8051单片机的时钟信号通常用两种电路形式得到:内部振荡方式与外部振荡方式。外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于11.05926MHz的方波信号。
图中,电容器C1 、C2起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。但在时钟电路的实际应用中一定要注意正确选择其大小,并保证电路的对称性,尽可能匹配,选用正牌的瓷片或云母电容,如果可能的话,温度系数尽可能低。本设计中采用大小为30pF的电容和11.05926MHz的晶振。
图1.6 内部振荡电路
6、 复位电路的选择与设计
当8051单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。因此要求单片机复位后能脱离复位状态。而本系统选用的是11.05926MHz的晶振,因此一个机器周期为1.09μs,那么复位脉冲宽度最小应为2.18μs。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。
根据应用的要求,复位操作通常有两种基本形式:上电复位、手动复位。
- 7 -
图1.10 单片机复位电路
7、 系统总电路的设计
系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。系统总电路图附录B所示。
8051单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。
8051单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。
复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。
按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键和查看键分别接单片机的P1.1和P2.5,均设为低电平有效。而另外的开始键和暂停键两键使用了外部中断,所以需要连接到单片机的特殊接口P3.3和P3.2,这两个I/O口的第二功能分别为单片机的外部中断1端口和外部中断0端口。同样设置为位低电平有效。
显示电路由五位数码管组成,采用动态显示方式,因此有8位段控制端和5位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,8051的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。五位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2.4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。
通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大
- 8 -
功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。
五、 具体实现过程
1、对数字秒表设计进行分析,敲定几组方案; 2、在PROTUES软件中,画电路图,进行仿真、调试;
3、对自己想要实现的秒表现象进行编程,运用KEIL软件;并于Proteus联调。 4、调试过程中要不断改进自己的方案; 6、测试各个所需元件,STC89C52RC,数码管。
7、将方案敲定之后,对LED数字秒表进行焊接其中最主要的是对最小系统的焊接时非常关键的,在进行焊接数码管时,很关键。
8、将最小系统焊接好以后要用数字万用表进行测试,首先要测试有没有短接、断接的地方,再将焊好的板子放在电源上进行加电,看电路板子是否正常工作。
9、将最小系统板子与数码管板子连在一个,通过USB口与电脑相连,打开串口助手,将KEIL软件中的程序下载到单片机中,进行验证。 10、具体程序
/******************************************************** * 文 件 名 : 秒表.c
* 描 述 : 基于51单片机的数码管数字秒表; 带有指示灯,蜂鸣器,按键(启动、清零、计次) * 创 建 人 : 罗宏
* 单 位 : 佳木斯大学 信息电子技术学院 电子协会 * 日 期 : 2014.6.26 * 开 发 环 境: Keil 4
* 邮 箱 : 744544126@qq.com * 晶 振 : 11.05926MHZ * 版 本 号 :
*********************************************************/ #include
#define uint unsigned int //宏定义无符号整型 #define uchar unsigned char //宏定义无符号字符型 #define DUAN (P0) //宏定义数码管段代码 #define WEI (P2) //宏定义数码管位代码 sbit keystart_stop = P3^2; //定义启动/停止按键 sbit keyrest = P3^3; //定义复位/清零按键 sbit keyrecord = P3^4; //定义计数/存储按键 sbit keydispaly = P3^5; //定义计数/显示按键 sbit beep = P3^6; //定义蜂鸣器 sbit led = P3^7; //定义 uchar x,msec5,msec10,second,minute; //时间变量 uchar msec,sec,min; //显示变量 uchar code table1[] = {0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数组不带点显示 uchar code table2[] = {0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x58,0x00,0x10}; //共阳数码管带点显示 /******************************** 函数名称: 延时函数 delay 功 能: 延时指定毫秒 参 数: uchar x 返 回 值: 无
- 9 -
********************************/ void delay(uchar x) { uint b,c; for(b = x;b>0;b--) for(c = 110;c>0;c--); }
/********************************
函数名称: 定时器初始化函数time_init(void) 功 能: 定时器初始化 参 数: 无 返 回 值: 无
*********************************/ void time_init(void) { msec5=0; TMOD = 0x01; TH0 = (65536-9174)/256; TL0 = (65536-9174)%6; ET0 = 1; TR0 = 1; EA = }
/******************************** 函数名称: 显示函数display() 功 能: 数码管显示
参 数: uchar msec,uchar sec,uchar min 返 回 值: 无
*********************************/
void display(uchar msec,uchar sec,uchar min) { DUAN = table1[(msec)];// 0.01秒 5.64=64=0.04 WEI = 0x01; delay(2); WEI = 0x00; DUAN = table1[(msec/10)];// 0.1秒 5.64/10=56=0.6 WEI = 0x02; delay(2); WEI = 0x00; DUAN = table2[(sec)]; // 1秒 564=6 WEI = 0x04; delay(2); WEI = 0x00; DUAN = table1[(sec/10)]; // 10秒 564/10=56=6 WEI = 0x08; delay(2); WEI = 0x00; DUAN = table1[(min)]; // 1分 564/10=56=6 WEI = 0x10; delay(2); WEI = 0x00; DUAN = table1[(min/10)]; // 10分 564/10=56=6 WEI = 0x20; delay(2); WEI = 0x00; }
/******************************** 函数名称: 蜂鸣器函数 功 能: 蜂鸣器发声 参 数: 无 返 回 值: 无
*********************************/ void beep_led()
1;
- 10 -
{ beep = 0; delay(600); beep = 1; delay(600); led = 0; delay(600); led = 1; }
/******************************** 函数名称: 按键函数
功 能: 调试按键的函数 参 数: 无 返 回 值: 无
*********************************/ void keys() { if(keystart_stop==0) { delay(5); if(keystart_stop==0) TR0 = ~TR0; beep_led(); while(!keystart_stop); } if(keyrest==0) { delay(5); if(keyrest==0) TR0 = 0; msec5=0; msec10=0, second=0; minute=0; beep_led(); while(!keyrest); } }
/******************************** 函数名称: 主函数 功 能: 参 数: 无 返 回 值:
*********************************/ void main() {
uchar jishu=0; uchar flag=0;
uchar msec1=0,sec1=0,min1=0; uchar msec2=0,sec2=0,min2=0; time_init(); while(1) { keys(); // 键盘的扫描函数一定要放在while循环里边 msec=msec10; sec=second; min=minute; if(flag==1) { display(msec1,sec1,min1); } else if(flag==0) { display(msec,sec,min); } else {
- 11 -
display(msec2,sec2,min2); } if(keyrecord==0) { delay(5); if(keyrecord==0) { beep_led(); jishu++; if(jishu>2) { jishu=0; } else if(jishu==1) { msec1=msec10; sec1=second; min1=minute; } else if(jishu==2) { msec2=msec10; sec2=second; min2=minute; } } while(!keyrecord); } if(keydispaly==0) { delay(5); if(keydispaly==0) { beep_led() ; flag++; if(flag>2) flag=0; } while(!keydispaly); } } }
/********************************** 函数名称: 中断函数 功 能: 参 数: 无 返 回 值:
***********************************/ void timer0 () interrupt 1 {
TH0 = (65536-9174)/256; TL0 = (65536-9174)%6; msec10++; // msec10加一次等于 10ms if(msec10==100) // j=100 为1s { msec10 = 0; second++; if(second==60) // second=60 为1minute { second=0 ; minute++; if(minute==60) // minute=60 为1hour { minute=0 ; } } }
- 12 -
}
六、 仿真、实验验证过程及实现结果、现象
- 13 -
七、 结论
本设计的数字电子秒表系统采用89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现八位LED显示,显示时间为0~59分59.59秒,计时精度为0.01秒,能正确地进行计时,同时能记录两次时间,并在计时后对上一次计时时间进行查询。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序,按键扫描程序等,并在keil4中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
八、总结(体会)
开始做设计的时候总是会犯一些错误,只有经过不停的改错,不断地编译得到正确的程序,说明作为一名编程人员是不能粗心大意的,一个程序的质量的高低与你的细心与否有着很大的联系,在编程时,我充分地使用了结构化的思想,这样程序检查起来也比较方便,调试时也会方便很多。只要一个模块一个模块的进行调试就可以了,充分体现了结构化编程的优势。在设计中要求我要有耐心和毅力,细心是最重要的,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要有足够的耐心,通过这次设计和设计中遇到的问题,我也积累了一定的经验。为了能完成这次
- 14 -
设计,我还复习了《数字电子技术》、《模拟电子技术》、《微机接口技术》、《单片机技术》、《C语言》。
通过这次单片机课程设计,我了解到自己在单片机方面还有很多不足,特别是单片机指令系统及stc89C52单片机各引脚的第二功能等等知识不够了解.因此我在设计中遇到不懂的东西就马上查资料或请教同学.这不仅加深了我对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西。
- 15 -
设计,我还复习了《数字电子技术》、《模拟电子技术》、《微机接口技术》、《单片机技术》、《C语言》。
通过这次单片机课程设计,我了解到自己在单片机方面还有很多不足,特别是单片机指令系统及stc89C52单片机各引脚的第二功能等等知识不够了解.因此我在设计中遇到不懂的东西就马上查资料或请教同学.这不仅加深了我对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西。
- 15 -
正在阅读:
基于51单片机的数字秒表课程设计、毕业设计论文 - 图文01-12
电子表基础知识(2005.7) -11-25
手掌穴位按摩方法(附手部穴位图)02-02
保洁员安全责任书03-01
环境影响评价报告公示:天全县年开采15万立方米建筑用玄武岩项目04-07
屋面工程质量验收规范(GB50207-2012)考试题03-04
1036高效包衣机标准清洁规程04-19
住宅小区自动计费系统设计 - 图文01-02
2014-2015年陕西省渭南市合阳中学高一上学期物理期末试卷及解析11-28
CADCAM设计报告09-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 秒表
- 毕业设计
- 单片机
- 基于
- 课程
- 图文
- 数字
- 论文
- 设计
- 中山大学细胞生物学期中期末考试试题3答案
- 上海中学高三英语周练一
- 室内定位技术开发建设项目计划书
- 《一个人需要多少土地》导学案
- 新型应用型本科院校发展的14个基本问题
- 公安机关110接处警工作规范(试行)
- 统计学课后习题答案(袁卫、庞皓、曾五一、贾俊平)
- 答中国为什么需要无产阶级专政
- 关于环境保护的社会实践调查报告
- 经济法(本)1512模拟卷1
- 管理学原理试题库
- 为了荣誉
- 2014年江苏省基础教育青年教师教学基本功大赛获奖名单
- 计算机FLASH练习题(学生用)
- 22.3《实际问题与二次函数》同步练习2带答案
- 《人民日报》“十九大时光”专题报道80后党员企业家许泽玮:家国情怀是更深沉动力 - 图文
- 宁波市小学《品德与生活》、《品德与社会》教学常规(试行稿) - 图文
- 护理选择题
- 有限空间作业应急管理制度2017年8月
- 2017下半年全国教师资格笔试高分攻略(初中音乐科目)含试题及答案解析