资讯详情

课程设计 数字秒表

《课程设计 数字秒表由会员共享,可在线阅读,更多相关课程设计 请在人文库网上搜索数字秒表(24页收藏版)。

1.计算机控制技术综合应用设计主题 数字秒表 二级学院 电子信息与自动化学院 专 业 电气工程及其自动化 班 级 110070403 学生姓名 学号 学生姓名 学号 学生姓名 学号 指导教师 时间: 2013年12月16日 随着电子科技的快速发展,评估项目通常得20分,设计50分,答辩30分。单片机在日常生活中的应用越来越广泛。本文以STC89C52单片机是核心设备,采用单片机定时器具有精确定时的特点,制作了一个简单的数字秒表,可计时范围为0-59分59秒990毫秒,计时精度为0.01秒。本文以STC89C52单片机是核心设备,采用单片机定时器具有精确定时的特点,制作了一个简单的数字秒表,可计时范围为0-59分59秒990毫秒,计时精度为0.01秒。秒表的功能包括起止、复位、切换显示界面和记录时间。使用秒表显示LC。

2、D1602液晶显示屏,使结果更加清晰直观。而当前的时间和记录的时间是分开在两个不同的界面上,使用按钮选择观察某个界面,操作方便,结果准确。关键字: 单片机 秒表 LCD1602液晶显示目录 问题重述.11.1 设计要求.11.2 拓展要求.1二 设计方案和论证.12.1 方案比较.12.2 方案论证.12.3 方案选择.12.4 总方案设计框图.2三 单元模块设计.23.1 按键控制电路.23.2 单片机最小系统电路.33.3 LCD1602显示电路.43.4 总电路模拟图.5四 软件模块设计流程图.64.1 主循环函数的流程图.64.2 定时器0的中断服务子程序.74.3 定时器。

3.1中断服务子程序.84.4 显示函数的两个子程序.94.5 外部中断0和外部中断1的中断服务子程序.9五 软件系统测试.105.1 系统仿真效果图.10六 实物图及测试分析.10 6.1 实物效果图.106.2 测试结果及误差分析.11七 设计总结.12八 参考文献.12九 附录.139.1 元件清单.139.2 源程序代码.131、问题重述1.1 设计要求:制作简易秒表,最小显示位10ms,计时范围059分59秒90毫秒一键控制三种工作状态:清零、计时、停止系统工作符合一般秒表要求1.2 扩展要求:可记录多个成绩秒表精度0.1s2.设计方案和论证MCU直接选择物美价廉的选择STC8。

4、9C52型单片机,虽然是低级单片机,但制作秒表就够了。这里主要讨论显示电路的选择2.1 方案比较:方案一:选用七段数码管做显示设备方案二:选用LCD1602液晶显示屏显示设备2.2 方案论证:方案1:七段数字管操作方便,显示效果好,价格低廉。然而,在界面切换到记录数据时并不是很直观。与单片机连接时,需要增加驱动力,增加工作量,数字管能耗大。方案二:LCD1602液晶显示屏显示清晰,切换显示界面直观,可直接与单片机连接,方便快捷,能耗低。但是价格高,操作复杂。2.3方案选择:综合各方面选择LCD1602作为显示设备。2.4 。

5.总方案设计框图:按键控制电路单片机最小系统电路LCD1602显示电路图1 总方案设计图3,单元模块设计3.1 按键控制电路图2 按钮控制电路图放置四个按钮开关,分别连接到单片机P3.1P3.四、另一端接地。如图2所示,单片机检测这些引脚的高低电平状态,知道是否按下开关。这四个开关通过单片机对四个关键状态检测的反馈,分别控制记录、启停、复位和界面切换的功能。3.2 单片机最小系统电路图3 单片机最小系统图单片机最小系统(如图3所示)是单片机正常工作所必需的部分。它包括复位电路、晶振电路和电源电路三个部分。3.2.1 在单片机系统中,复位电路为。

6.非常重要的是,当程序运行(异常运行)或死机(停止运行)时,需要复位。MCS-5l 复位引脚系列单片机RST( 第9 管脚) 当机器周期超过2个时,单片机将进行复位操作。如果RST 单片机连续为高电平,处于循环复位状态。复位操作通常有两种基本形式:上电自动复位和开关复位。本文采用上电复位,即每次上电时单片机复位。3.2.2 晶振电路XTAL1(19 脚)芯片内部振荡电路输入端;XTAL2(18 脚:芯片内部振荡电路输出端;XTAL1 和XTAL2 它是一种独立的输入输出反相放大器,可以配置为使用石英晶体振荡器的片内振荡器,也可以直接由外部时钟驱动。本文中采。

7.使用内时钟模式,即使用芯片内的振荡电路XTAL1、XTAL2 将定时元件(一个石英晶体和两个电容器)连接到引脚上,内部振荡器可以产生自激振荡。为单片机提供工作信号脉冲。3.2.3 电源电路:电源电路是单片机电源电路,20脚接地,40教接电源,一般选择5V。51 单片机的EA/VPP(31 脚) 管脚是内外程序存储器的选择。当EA 保持高电平时,单片机访问内部程序存储器;当EA 保持低电平时,只访问外部存储器,无论是否有内部程序存储器。对于今天的大多数单片机来说,其内部程序存储器(通常是flash)容量很大,所以基本上不需要外部程序存储器,而是直接使用内部存储器。

8、储器。 3.2.4 P0口外部上拉电阻:51 单片机的P0 端口为泄漏输出,内部无上拉电阻P0 当输出时,口可以驱动NMOS 要避免输入时读取数据出错,需要外接上拉电阻。一般选择4.7K10K上拉电阻可以。本文选取4.7K上拉电阻。3.3 LCD1602显示电路图4 LCD1602液晶显示屏接线图1602液晶,又称1602字符液晶(如图4所示),是一种点阵液晶模块,专门用于显示字母、数字、符号等。X2.每行可显示两行16个字符液晶模块(显示字符和数字)。如图4所示,1脚为电源地;2脚为5V电源正极;3脚为调节背光引脚,此处连接10K滑动变阻器调节背光。

9.液晶屏上显示的字符可以清晰地看到;第四脚:RS选择寄存器,1时选择数据寄存器,0时选择指令寄存器。本文与单片机相连P1.0端口;5脚:RW读写信号线,高电平时读操作,低电平时写操作。本文与单片机相连P1.1端口上;第6脚:E端为使能端,高电平时读取信息,负跳变时执行指令。本文与单片机相连P1.5端口;714脚:D0D7是8位双向数据端。本文与单片机相连P0端口上;3.4 总电路模拟图5 总电路图4、软件模块设计4.1 主循环函数的流程图如下:初始定时器、外部中断和液晶生成T0中断进入T0中断子程序进入外部中断INT0中断子程序进入外部中断。

10、INT进入中断子程序T1的中断子程序产生T1中断产生INT0中断产生INT1中断NYNYNYNY图6 主循环流程图4.2 定时器0中断服务子程序T0中断入口TR0=返回重新给定时器赋予初始值msec=msec 1msec=100sec=sec 1;msec=0sec=60min=min 1;sec=0min=60min=0NYYNYNYNY图7图7 定时中断0的中断子程序流程图4.3 定时器1中断服务子程序T1中断入口重新给定时器赋予初始值KEY1=记录当前时间值0KEY4=0flag=flagflag=调用显示1调用显示2返回NYNYNY图8中断1的中断子程序流程图4.4 两个显。

11.显示函数的子程序显示程序1入口显示秒表和记录数据的数量返回显示程序2入口显示已记录的数据返回图10 显示函数2的流程图9 流程图4显示函数1.5 外部中断0和外部中断1的中断服务子程序外部中断1的中断入口返回KEY3=0清除所有当前数据,并将定时器重新赋予初值外部中断0的中断入口TR0=TR0返回KEY2=0NNYY图11 外部中断0的中断子程序流程图12 5.软件系统测试:5.1 模拟效果图13 未计数时界面1显示图 图14未计数时界面2显示图13未开始计时界面1的显示值。图14显示界面二的显示值,未开始计时。图14显示界面二的显示值,未开始计时。 计数时界面1显示图 图1。

12、6 计数时界面2显示图15为开始计时,两次记录显示界面1 。图16显示界面2的显示值为开始计时,并记录了两次 。6、 实物图及测试分析6.1 实物效果图17未计数时界面1显示图17为开始计时,界面1显示如图所示,显示值均为0。图18计数时界面1显示图18显示开始计时,并已两次记录时界面1的显示值,如图所示,RECORD等于2,表示已完成两次记录。图19 计数时界面2显示图图19表示界面二的显示值,即显示已经记录下的两个数据,如图所示第一行为第一个数据,第二行为第二个数据。6.2 测试结果和误差分析6.2.1 测试结果表1 测试记录表测试值3.4。

13、2s7.80s15.88s24.51s54.64s117.73s实际值3.43s7.82s15.90s24.53s54.68s117.79s误差0.01s0.02s0.02s0.02s0.04s0.06s6.2.2 虽然误差分析是利用单片机定时器进行精确定时,但事实上,单片机每次进出中断都会有一定的时间损失,所以其实并不是100%准确,还是会有一定的误差。若通过多次测试,然后对定时器的初始值进行修正,则会再次提高精度,但没有绝对的精度,只能减少误差。如果通过多次测试,然后修改定时器的初始值,它将再次提高准确性,但没有绝对的准确性,只能减少误差。如果需要更准确的秒表,那么单片机定时器就不能解决,需要使用更准确的时钟和高速芯片来完成精度要求。七、设计总结。

在紧张的两周里,我们的实验组终于消除了困难,完成了秒表系统的设计和制作。在实验中,我们利用老师教我们的知识,让我们的设计有更多的想法,让我们学习很多书没有知识,也让我们学习很多课外知识,不仅测试我学到的知识,而且培养我如何掌握一件事,如何做一件事,如何完成一件事。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会合作,学会运筹帷幄,学会宽容,学会理解,学会做人和生活。在发现和解决问题后,我们的设计最终成功了。本课程设计主要从硬件和软件两个方面解释设计的总体思路和实现过程。预期的设计目的是实现计算。

时间的基本功能,正常显示计时。在设计过程中,遇到了许多障碍。设计图纸经过多次修改后确定,但调试过程中存在问题,需要修改原理图;编程时间最长。编程过程是考虑程序的可行性以及它是否与硬件兼容。能否接线是本试验的一大难题!由于理论知识不扎实,设计中存在许多问题,在一些管脚的零置一上,概念模糊,对单片机的指令不够熟悉。通过本课程的设计,我们有了更深的了解,只有在设计制作过程中不断学习,才能有更新的进步。无论在哪里,在哪个岗位,我都要不断学习,学以致用。让我们的工作做得更好。八、参考文献1刘乐善.微型计算机接口技术及应用M.北京:北京航空航天大学。

16.,20012年王东峰,单片机C语言应用100例,北京,电子工业出版社,20093年禹岩,单片机的多机通信,安徽,安徽农学通报,20074陈海宴,51单片机原理及应用,北京,北京航空航天大学出版社,20105李平,单片机入门与开发北京,机械工业出版社,2008九、附录9.1 元件清单原理图型号个数数值单片机AT89C511-晶振CRYSTAL112MHZ液晶显示LCD:LM016C1-电阻RES110K电容CAP320p;10u排阻RESPACK-8110K滑动变阻器RV1110K按键BUTTON4-9.2 源程序代码#include /包含51头文件#include/包含空操作头文件/*两。

17、个宏定义类型,方便操作*/typedef unsigned char uint8;/宏定义typedef unsigned int uint16;#define count0 10000 /设置定时器0定时时间为10ms#define TH_0 (65536-count0)/256 /给定时器赋初值#define TL_0 (65536-count0)%256#define count1 15000 /设置定时器1定时时间为15ms#define TH_1 (65536-count1)/256 /给定时器赋初值#define TL_1 (65536-count1)%256/*单片机位定义*/s。

18、bit RS=P10; /LCD1602寄存器选择sbit RW=P11; /LCD1602读写选择位sbit EN=P15; /LCD1602使能信号位sbit Busy=P07; /忙碌标志位,将BF位定义为P0.7sbit KEY1=P31; /定义按键1为P31口 用于记录当下的时间sbit KEY2=P32;/定义按键2为P32口 用于控制秒表的开始与暂停sbit KEY3=P33; /定义按键3为P33口 用于清零所有记录及当前计时sbit KEY4=P34; /定义按键4为P34口 用于切换当前计时与记录计时的界面/*设置一些全局变量*/uint8 num=0,sec=0,min。

19、=0,rec=0,flag=0; /num表示以10ms单位计时 sec表示秒 /min表示分钟 rec表示记录的次数 flag作为切换显示的标志位uint8 code dis2=0123456789; /定义记录显示数组uint8 code dis1=0123456789; /定义秒表的显示数组uint8 num12=0,0; /定义记录数据的数组,用以保存记录的数据uint8 sec12=0,0; / 此处只设置记录两次uint8 min12=0,0; uint8 KEY1Status = 0;/定义KEY1的状态位uint8 KEY4Status = 0;/定义KEY4的状态位void 。

20、Delay(uint8 n) /短延时 初始化LCD1602所用uint8 a,b,c;for(c=n;c0;c-)for(b=142;b0;b-)for(a=2;a0;a-);void Busy_Test() /忙检验P0 = 0xff;doRS = 0;RW = 1;EN = 0;EN = 1;while(Busy=1);EN = 0;/*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void Write_Cmd (uint8 Dictate) Busy_Test(); /如果忙就等待EN = 0;P0 = Dictate; RS = 0; /RS和R/W同时为。

21、低电平时,可以写入指令RW = 0; _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间/将数据送入P0口,即写入指令或地址_nop_(); _nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间EN = 1; /E置高电平_nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间EN = 0; /当E由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:x(为字符常量)*/void Write_Data(uint8 x)Busy_T。

22、est(); EN = 0;P0 = x; RS = 1; /RS为高电平,RW为低电平时,可以写入数据RW = 0;/E置低电平(写指令时,E为高脉冲,/ 就是让E从0到1发生正跳变,所以应先置0/将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();/空操作四个机器周期,给硬件反应时间EN = 1; /E置高电平_nop_();_nop_();_nop_();_nop_(); /空操作四个机器周期,给硬件反应时间EN = 0; /当E由高电平跳变成低电平时,液晶模块开始执行命令/*函数功能:指定字符显示的实际地址入口参数:x*/void Wr。

23、ite_Addr(uint8 x)Write_Cmd(x|0x80); /显示位置的确定方法规定为80H+地址码x/*函数功能:对LCD的显示模式进行初始化设置*/void Init_LCD1602()Delay(10); /延时15ms,首次写指令时应给LCD一段较长的反应时间Write_Cmd(0x38); /显示模式设置:162显示,57点阵,8位数据接口Delay(2); /延时5msWrite_Cmd(0x0c); /显示模式设置:显示开,有光标,光标闪烁Delay(2);Write_Cmd(0x06); /显示模式设置:光标右移,字符不移Delay(2);Write_Cmd(0x0。

24、1); /清屏幕指令,将以前的显示内容清除Delay(2);/*LCD页面一的显示函数 主要显示秒表及是否记录到数据*/void Display1()/显示函数1 显示秒表以及记录情况uint8 i,j,k,m,n,o,p,q;i=num/10;j=num%10;k=sec/10;m=sec%10;n=min/10;o=min%10;Write_Addr(0x00); /设置从第一行的第一格开始显示Write_Data(T); /写入字母T Write_Data(I);Write_Data(M);Write_Data(E);Write_Data(:); Write_Data(dis1n); /。

25、写入min的最高位Write_Data(dis1o); Write_Data(:);Write_Data(dis1k);Write_Data(dis1m); Write_Data(.);Write_Data(dis1i);Write_Data(dis1j); Write_Data(dis10); p=rec/10;q=rec%10; Write_Addr(0x40); /设置从第二行的第一格开始显示Write_Data(R); Write_Data(E);Write_Data(C);Write_Data(O);Write_Data(R);Write_Data(D);Write_Data(:);。

26、 Write_Data(dis1p);Write_Data(dis1q); /*LCD页面二的显示函数主要显示已经记录的两个数据*/void Display2()/显示函数2 显示记录Write_Addr(0x00); /设置从第一行的第一格开始显示记录的第一个数据Write_Data(R); /写入字母T Write_Data(E);Write_Data(:);Write_Data(1);Write_Data(,); Write_Data(dis1min10/10); /写入min的最高位Write_Data(dis1min10%10); Write_Data(:);Write_Data(d。

27、is1sec10/10);Write_Data(dis1sec10%10); Write_Data(.);Write_Data(dis1num10/10);Write_Data(dis1num10%10); Write_Data(dis10); Write_Addr(0x43); /设置从第二行的第三格开始显示已经记录的第二个数据Write_Data(2);Write_Data(,); Write_Data(dis1min11/10); /写入min的最高位Write_Data(dis1min11%10); Write_Data(:);Write_Data(dis1sec11/10);Writ。

28、e_Data(dis1sec11%10); Write_Data(.);Write_Data(dis1num11/10);Write_Data(dis1num11%10); Write_Data(dis10); void Init_Timer0()/定时器0初始化TH0=TH_0; /设置定时器初值TL0=TL_0;EA=1;/打开总终端允许位ET0=1; /打开定时器0的中断允许位TR0=0; /选择关闭定时器0TMOD|=0x01; /设置工作方式1void Init_Timer1()/定时器1初始化TH1=TH_1; /设置定时器初值TL1=TL_1;EA=1;/打开总终端允许位ET1=。

29、1; /打开定时器1的中断允许位TR1=1; /选择打开定时器1TMOD|=0x10; /设置工作方式1void Init_Int0_1() /外部中断0和1的初始化EX0=1; /打开外部中断的允许位EX1=1;IT0=0; /设置外部中断的触发方式为低电平触发IT1=0;void xiaodou() /用于按键消抖的短延时函数,大概8msuint8 i,j;for(i=0;i8;i+)for(j=0;j110;j+);main() /主函数Init_LCD1602();/初始化LCD1602Init_Timer0();/初始化定时器0Init_Timer1();/初始化定时器1Init_I。

30、nt0_1();/初始化外部中断0和1while(1); /主循环void Timer0() interrupt 1 /定时器0中断函数 用于精确定时TH0=TH_0; /进入中断则重新给定时器赋初值TL0=TL_0;num=num+1; /num自加1,进入一次表示10msif(num=100)/如果自加100次,则表示1ssec=sec+1;/因此表示秒的变量加1num=0;/并且把num清0 if(sec=60)/如果自加60s,则表示1分钟min=min+1;/因此表示分钟的变量加1sec=0;/清零秒变量if(min=60) /满60分钟后清零分钟位min=0;void Timer1。

31、() interrupt 3 /定时1的中断子程序 用于扫描按键1和按键4的状态TH1=TH_1; /此处设置为15ms中断,进入中断则重装载定时器初值TL1=TL_1;/*此处检测按键1的状态,以及实现其功能*/switch(KEY1Status)/利用状态的方法来达到对按键消抖的目的case 0:if(!KEY1)KEY1Status=1;break;case 1:if(!KEY1)if(rec=1)/表示如果记录次数未达到2次,则继续记录/ 满了两次则 此次不进入记录rec=rec+1;/如果按下一次按键1,则rec加1 /表示已经记录了一次num1rec-1=num; /将记录到的数据。

32、存入数组sec1rec-1=sec;min1rec-1=min;KEY1Status=2;break;case 2:if(KEY1)KEY1Status=0;break;/*此处检测按键4的状态,以及实现其功能*/switch(KEY4Status)case 0:if(!KEY4)KEY4Status=1;break;case 1:if(!KEY4)flag=flag;/如果按下按键4 则flag取反,起到切换显示的作用Write_Cmd(0x01); /清屏幕指令,将以前的显示内容清除KEY4Status=2;break;case 2:if(KEY4)KEY4Status=0;break;/。

33、*此处为显示屏的切换选择控制*/if(flag=0) /切换显示标志位,如果为0则显示1Display1(); /调用显示函数1else Display2(); /调用显示函数2void Int0() interrupt 0 /INT0的中断函数,用于控制秒表的暂停与开始if(!KEY2)xiaodou();/调用消抖函数if(!KEY2)TR0=TR0; /打开或暂停定时器0 while(!KEY2); /松手检验 void Int1() interrupt 2 /INT1的中断函数,用于控制秒表的归零if(!KEY3)xiaodou();if(!KEY3) /若按下按键3,则将所有的记录清零TR0=0;num=0;sec=0;min=0;rec=0;flag=0;num12=0;sec12=0;min12=0;TH0=TH_0;TL0=TL_0;while(!KEY2); /松手检验。

标签: 设备数字电阻屏393k10v电容

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台