单片机秒表实验报告

合集下载

秒表实训报告

秒表实训报告

一.实训目的:1、熟悉89c52单片机键盘以及1602LED显示器外部引脚接线方式;2、学习基本I\O口德使用方法以及编程方法;3、进一步掌握单片机全系统调试的过程以及方法。

二、实训内容:用89c52设计一个控制1602LED数码显示“秒表”,显示时间为00~99,每秒自动加1,记满显示“FF”.另外设计一个“开始”按钮S1和一个“停止”按钮S2,按“开始”按钮,显示秒数从00开始;按“停止”按钮,保持实时时间,停止计时。

三、实训接线图:四、元件清单:五、实训程序:#include <reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}void LCD_Initialize();void LCD_Set_POS(uchar);void LCD_Write_Data(uchar);void Display_String(uchar *, uchar);sbit K1=P1^0;sbit K2=P1^1;sbit BEEP=P3^0;sbit LCD_RS=P2^0;sbit LCD_RW=P2^1;sbit LCD_EN=P2^2;uchar KeyCount=0;uchar code msg1[]={"Second Watch 0 "};uchar code msg2[]={">>>> "};uchar code Prompts[][16]={{":: 1 ----> "},{":: 1 ----> ::2 "},{":: 1->2 ::3--> "},{":: 1->2 ::3-->4 "}};uchar Time_Buffer[] ={0,0,0,0};uchar LCD_Display_Buffer[] = {"00:00:00:00"};void Beep(){uchar i,j=70;for (i=0;i<180;i++){while(--j);BEEP=~BEEP;}BEEP=0;}void DelayX(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}void Show_Second(){uchar i;LCD_Set_POS(0X45);for(i=3; i!=0Xff;i--){LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'0';LCD_Display_Buffer[2*i ]=Time_Buffer[i]%10+'0';LCD_Write_Data(LCD_Display_Buffer[2*i+1]);LCD_Write_Data(LCD_Display_Buffer[2*i]);LCD_Write_Data(':');}}void Time0() interrupt 1 using 0{TH0=-10000/256;TL0=-10000%256;Time_Buffer[0]++;if(Time_Buffer[0]==100){Time_Buffer[0]=0;Time_Buffer[1]++; }if(Time_Buffer[1]==60){Time_Buffer[1]=0;Time_Buffer[2]++; }if(Time_Buffer[2]==60){Time_Buffer[2]=0;Time_Buffer[3]++; if(Time_Buffer[3]==24)Time_Buffer[3]=0;}}void main(){uchar i;IE=0X82;TMOD=0X01;TH0=-10000/256;TL0=-10000%256;LCD_Initialize();Display_String(msg1,0X00);Display_String(msg2,0X40);while(1){if(K1==0){DelayX(100);i=++KeyCount;switch(i){case 1:case 3:TR0=1;Display_String(Prompts[i-1],0);break;case 2:case 4 :TR0=0;Display_String(Prompts[i-1],0);break;default:TR0=0;break;}while(K1==0);Beep();}elseif(K2==0){TR0=0;KeyCount=0;for(i=0;i<4;i++)Time_Buffer[i]=0;Display_String(msg1,0);Beep();DelayX(100);while (K2==0);}Show_Second();}}#include <reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}bit LCD_Busy_Check();void LCD_Initialize();void LCD_Set_POS(uchar);void LCD_Write_Command(uchar);void LCD_Write_Data(uchar);void DelayMS(uint ms){uchar t;while(ms--)for (t=0;t<120;t++);}bit LCD_Busy_Check(){bit Result;LCD_RS=0; LCD_RW=1; LCD_EN=1;DelayNOP(); Result=(bit)(P0&0X80);LCD_EN=0;return Result;}void LCD_Write_Command(uchar cmd){while(LCD_Busy_Check());LCD_RS=0; LCD_RW=0; LCD_EN=0;_nop_(); _nop_();P0=cmd; DelayNOP();LCD_EN=1; DelayNOP();LCD_EN=0;}void LCD_Write_Data(uchar str){while(LCD_Busy_Check());LCD_RS=1; LCD_RW=0; LCD_EN=0;P0=str; DelayNOP();LCD_EN=1; DelayNOP();LCD_EN=0;}void LCD_Initialize(){DelayMS(5);LCD_Write_Command(0X38);DelayMS(5);LCD_Write_Command(0X0c);DelayMS(5);LCD_Write_Command(0X06);DelayMS(5);LCD_Write_Command(0X01);DelayMS(5);}void LCD_Set_POS(uchar Position){LCD_Write_Command(Position | 0X80);}void Display_String(uchar * str, uchar LineNo) {uchar K;LCD_Set_POS(LineNo);for(K=0;K<16;K++) LCD_Write_Data(str[K]);}六、实训步骤:1、根据实训要求,完成程序编写;2、根据实训程序,使用PROTUES完成秒表仿真;3、结合KEIL和PROTUES软件进行单步仿真,检查错误并改正;4、检查无误后,将程序下载至单片机中;5、将各元件按硬件接线图焊接到万能板上;6、检查电路板无误后,启动开关,完成实训要求;7、观察运行结果,分别按下秒表的开始和停止按钮,观察秒表功能。

基于51单片机的秒表设计报告

基于51单片机的秒表设计报告

课程名称:微机原理课程设计题目:基于51单片机的秒表设计随着社会的发展,单片机已经渗透到我们生活中的各个领域,广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等。

本设计就是由单片机STC89C52RC芯片和四位一体LED数码管为核心,辅以必要的电路,构成了一个单片机电子秒表。

秒表是一种常用的测试仪器,它可以用在百米赛跑等需要精确计时的地方,为人们的生活提供了很大的方便。

该单片机电子秒表布置合理,全部器件分布在7*9cm洞洞板上,看起来小巧精简。

采用的是单片机内部定时/计数器计时,走时非常精确而且不易出错。

0.56英寸的四位数码管发出红光,可以直观地显示时间。

一个控制按键就可以控制秒表的计数与停止,按一下控制键,秒表工作状态就由计时变为计时变为停止或停止变为计时,按一下清零键就可以清零,操作非常简单。

由于是四位数码管,它的计时周期为100秒,显示满刻度为99:99秒,从左往右数共四位,前两位显示整数部分,后两位显示小数部分,中间两个个秒闪灯(秒闪灯一直亮)。

关键词:秒表,51单片机,C语言一、设计任务与要求 (18)1.1 设计任务 (18)1.2 设计要求 (18)二、方案总体设计 (19)2.1 方案一 (19)2.2 方案二 (19)2.3 系统采用方案 (19)三、硬件设计 (21)3.1 单片机最小系统 (21)3.2 数码管显示模块 (21)3.3 系统电源 (22)3.4 整体电路 (22)四、软件设计 (24)4.1 keil软件介绍 (24)4.2 系统程序流程 (24)五、仿真与实现 (27)5.1 proteus软件介绍 (27)5.2 仿真过程 (27)5.3 实物制作与调试 (29)5.4 使用说明 (30)六、总结 (32)6.1设计总结 (32)6.2经验总结 (20)七、参考文献 (21)一、设计任务与要求1.1 设计任务1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).加深焊接的技巧,提高焊接的能力5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求1).清零键进行清零2).一个独立按键进行停止与运行的操作3).秒闪灯一直亮二、方案总体设计设计一个基于51单片机的秒表。

单片机秒表课程设计报告

单片机秒表课程设计报告

一:课程设计题目秒表/时钟计时器二:课程设计任务与要求:利用89C51单片机设计秒表/时钟计时器,通过LED显示器显示秒十位和个位,在设计过程中用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,重新开始秒计数。

三:设计过程:1.设计原理:此次课程设计题目是秒表/时钟计时器,由课程设计的要求和任务,我采用的C语言编程,设计秒表要求一秒定时,采用了定时器和FOR循环来定时,其中一个软件一个硬件,会在方案论证中分析在1秒时采用的是硬件定时,即用单片机内部的定时器T0。

先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时。

然后由定义的变量second来进行加一运算,然后将其值通过P1,P2口在数码管上进行显示。

其中数码管的显示时,我在程序中首先定义了一个关于数码管显示的字形码定义,以便在显示时调用即可。

(1)方案论证:方案1:在方案1中,我们所选用的是软件定时,即用for循环来定时1秒进行显示的变化.方案2:在方案2中,采用的是硬件定时,即用单片机内部的定时器T0。

先将时钟初始化,赋入初值50ms定时,循环20次来进行1秒定时.方案比较:我们从两方面进行两种方案的比较,第一,由于此次课程设计要求是秒表,则在定时时要求比较精确,所以采用硬件的定时器定时时比较准确的。

第二,由于秒表的定时程序是很小的,在利用软件定时占用的CPU并不是很多,不能显现出来,但真正大程序时会很占用资源的,所以在用定时中断过程中是非常节省资源的.综合上述两种比较,我们选用了第二种方案.(2)创新点:a。

在课程要求的基础上,我们做成的电路板上,用复位键来控制秒表计时的重新开始,即清零。

b。

在以上设计的基础上,我们又重新设计了一个程序,基本原理没有变,只是将秒表在到达59清零的瞬间向分的位数上进1,程序将会在附录3中给出。

2.硬件系统框图与说明:首先,连接的是单片机51的最小系统,其中包括时钟电路,复位电路,在此中包括的元器件在附录3中.我们所选用的数码管是共阴极的,置1时导通,所以将单片机的P1。

单片机课程设计报告(秒表)绝对你满意!!本报告属于原创,故质量等方面都可靠。

单片机课程设计报告(秒表)绝对你满意!!本报告属于原创,故质量等方面都可靠。

单片机课程设计报告秒表设计电子科学系班级:姓名:学号:指导老师:2012.12.01课程设计任务书摘要:在生活中我们常常用到秒表作为计时器,为了更深刻理解它的工作原理。

本次课程设计以STC89S51单片机为控制核心,以2位共阴数码管作为显示器。

并用外部中断0控制秒表的清零和用外部中断1控制秒表的开始/暂停。

利用Altium.Designer 10.0设计原理图和PCB。

设计完成后在面包板上搭建电路进行验证和调试。

实验成功后,利用化学方法进行腐蚀刻板。

通过一个个多次实验修改,最后设计出了一个能从00~99秒计时的秒表。

此外后文还对对本次课程设计进行了归纳与总结。

关键词:单片机、数码管、中断、Altium.Designer、腐蚀刻板目录一、设计要求: (5)二、方案论证: (5)2.1总方案设计方框图: (5)2.2方案选择: (5)2.2.1显示电路: (5)2.2.2按键控制: (5)三、硬件设计: (6)3.1系统主芯片STC89C51单片机介绍: (6)3.2电源电路: (6)3.3时钟电路: (7)3.4复位电路: (7)3.5显示电路: (7)3.6键盘电路: (8)3.7扩展电路: (8)3.8硬件总电路图设计: (8)四、软件设计 (9)4.1系统主程序设计 (9)4.2定时器T1中断: (9)4.3 外部中断0流程图: (10)4.4 外部中断1流程图: (10)4.5数码管显示程序: (10)五、设计中遇到的问题及解决方法: (11)5.1设计原理图和画PCB遇到问题及解决方法: (11)5.1.1设计原理图: (11)5.1.2 绘制PCB: (11)5.2 在面包板调试时遇到问题及解决方法: (11)5.3在腐蚀刻板时遇到问题及解决方法: (11)5.3.1打印PCB印菲林纸: (11)5.3.2在涂蓝油过程中: (11)5.3.3在显影过程中: (11)5.4焊接完成后遇到问题及解决方法: (11)结束语 (12)谢辞 (12)参考文献: (12)附录A:秒表设计的源程序 (13)附录B:元件清单: (15)附录C: 秒表的原理图和PCB图: (16)附录D:成绩评定表: (17)附录E:实物图(已通过验证) (18)秒表设计一、设计要求:1.1用89C51设计一个2位的LED数码作为“秒表”。

单片机0-99计数器 秒表报告

单片机0-99计数器 秒表报告

姓名班级指导老师时间信息工程学院图1 硬件电路连接图(二)显示电路两位数码管循环显示00~99电路数码管只要就是用于数字得显示.数码管有共阴与共阳得区分,单片机都可以进行驱动,但就是驱动得方法却不同。

两位数码管循环电路就是由电阻、二极管与数码管组成,电源+5V通过560得电阻直接给数码管得7个段位供电,P0、0—P0、7对应了两个接数码管得A,B,C,D,E,F,G与小数点位,P2、6接显示个位数得数码管得3、8引角,P2、7则接十位数得。

P2、6与P2、7端口分别控制数码管得十位与个位得供电,当相应得端口变成低电平时,驱动相应得三极管会导通,+5V通过二极管与驱动三极管给数码管相应得位供电,这时只要P0口送出数字得显示代码,数码管就能正常显示需要得数字。

图2 十位显示动态数码管(共阳数码管)图3 个位显示静态数码管(共阴数码管)(三)时钟电路时钟电路得晶振频率越高,系统得时钟频率越高,单片机得运行速度也越快。

晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中得电容应选择为30pF左右。

图4 时钟电路(四)复位电路MCS—51单片机得复位就是靠外部电路实现得。

MCS—51单片机工作之后,只要在她得RST引线上加载10ms以上得高点平,单片机就能有效地复位。

MCS-51单片机通常采用上电自动复位与按键复位两种方式。

最简单得复位电路如图5:图5 复位电路上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上得高电平,就能使单if(i++==100)//如果i=0{i=0;count++;P0=CODE[count/10];P2=~CODE[count%10];if(count==99)count=0; //如果到了99,则重新从0开始计数}}结果与分析(可以加页):(一)调试结果1.初始状态图7:初始状态结果图2.开始计时后按下按键暂停图8:中间状态图示(二)问题分析及解决措施1、一开始时没有分清楚数码管就是共阴数码管还就是共阳数码管,C语言程序中默认数码管就是共阴,所以两个P接口得值都就是按照共阴去写得,导致数码管选段及位显有问题,后来经过老师得指点,将共阳数码管P2得接口改成了共阴。

基于单片机的秒表设计与实现课程设计报告

基于单片机的秒表设计与实现课程设计报告

基于单片机的秒表课程设计报告一、设计题目秒表系统设计——用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。

另设计一个“开始”按键和一个“复位”按键。

二、增加功能增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)三、设计提要本实验利用单片机的定时器/计数器定时和记数的原理,结合dvcc实验箱上的集成电路芯片8032、LED数码管以及实验箱上的按键来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

其中本实验设计了四个开关按键:其中一个按键按下去时以1秒加一开始计时,即秒表开始键(本实验中当开关从1变为0时开始计时),另一个按键按下去时暂停计时,使秒表停留在原先的计时(本实验中当相应开关从1变为0时即停止计时),第三个按键按下去时清0(本实验中当相应开关从1变为0时即停止计时),第四按键按下去则是以每10ms秒快速加一计时(本实验中当开关从1变为0 时开始计时)。

本实验中开始时都要使各按键回到各初始位置,即都处于1状态。

三、课设目的1、通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

四、意义该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、快加功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。

五、本人所做工作根据相关的单片机材料,利用所学的单片机知识,结合DVCC系列单片机微机仿真实验系统中的软件和硬件(集成电路芯片8032,七段数码管,开关电路及时钟信号电路,按键等),编写能够实现该项目的软件程序,最后将软、硬件有机的结合起来,进行有效的调试,达到完成该实验课程设计的目的要求。

六、实验内容用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。

简易秒表设计实验报告完整

简易秒表设计实验报告完整

简易秒表设计实验报告(可以直接使用,可编辑实用优秀文档,欢迎下载)实 验 报 告 系别信工系专业班级姓名学号课题名称:简易秒表设计 实验目的:1、 熟悉Keil C51软件的使用方法及proteus 仿真软件的使用;2、 综合运用所学的理论知识(数码管、按键),通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。

3、 通过本次试验,增强自己的动手能力。

认识单片机在日常生活中的应用的广泛性,实用性。

设计要求:制作简易秒表,用三个按键分别实现秒表的启动、停止与复位,利用两位共阴级的数码管显示时间。

设计思路:硬件设计:数码管部分采用2位共阴极的数码管,在P0口接上拉电阻,公共端低电平扫描。

按键电路部分,将按键一侧与单片机任一I/O 口相连。

软件设计:模块化思想,使用定时器T0的工作方式1,编写显示子程序,延时子程序,初始化程序,主程序设计时注意按键消抖。

原理图:XTAL218XTAL119ALE 30EA 31PSEN 29RST 9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C11nFC21nF R110k C31uF 234567891RP1RESPACK-8源代码:#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit key1=P3^0; //定义"启动"按钮sbit key2=P3^1; //定义"停止"按钮sbit key3=P3^2; //定义"复位"按钮sbit wei1=P2^6; //定义位选sbit wei2=P2^7;uchar aa;uchar temp;uchar shi;uchar ge;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码真值表void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar shi,uchar ge) //显示子程序{shi=temp/10;ge=temp%10; //分离个位和十位wei1=0; //送位选P0=table[shi];//使用动态扫描的方法实现数码管显示delay(1);wei1=1; //关闭位选wei2=0;P0=table[ge];delay(1);wei2=1;}void init() //初始化程序{aa=0;temp=0;TMOD=0x01; //使用定时器T0的方式1TH0=0x4c;TL0=0x00; //定时50ms中断一次EA=1; //终端总允许ET0=1; //允许定时器T0中断}void timer0() interrupt 1{TH0=0x4c; //重装初值TL0=0x00;aa++; //中断计数值加1if(aa==20) //中断20次后,定时时间为20*50ms=1000ms=1s{aa=0;temp++;if(temp==60) //秒表到达60s后回零{temp=0;}}}void main(){init(); //调用初始化子程序while(1){if(key1==0) //检验启动按钮是否按下{delay(10);//延时去抖动if(key1==0);//再次检测启动按钮{while(!key1);//松手检测TR0=1; //启动定时器开始工作}}if(key2==0) //{delay(10);if(key2==0){while(!key2);TR0=0;}}if(key3=0){delay(10);if(key3==0){while(!key3);temp=0;shi=0;ge=0;TR0=0;}}display(shi,ge);}}实验结果:在proteus中编写程序,编译调试后生成hex文件,将hex文件加到仿真电路中,通过对简易秒表进行演示,达到设计要求。

单片机-设计报告-秒表 2

单片机-设计报告-秒表 2

单片机秒表课程设计前言本设计主要是对51单片机的一个方面的扩展,是能实现一般定时功能的设计。

系统采用单片机AT89C51作为本设计的核心元件,在其基础上外围扩展芯片和外围电路,附加时钟电路,复位电路,键盘接口及LED显示器,键盘采用独立连接式。

外围设备有LED显示驱动器及相应的显示数字电子钟设计与制作可采用数字电路实现,也可以采用单片机来完成。

若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计与制作中采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。

片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外, AT89C51的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。

按键电路设有两个按键:从上往下为k1和k2键。

按下k1键用于启动和暂停秒表;k2键用于复位。

另外还有一个单片机的复位按键,此按键用于总复位,使单片机和LED数码管同时复位。

目录一、设计任务和要求 (2)(一)系统功能任务 (2)(二)系统设计要求 (2)二、方案设计与论证 (2)三、硬件设计 (3)(1)时钟电路 (3)(2)按钮电路 (4)(3)显示电路 (6)(4)动态显示原理 (7)(5)80C51中断的控制 (7)(6)定时/计数器的控制 (7)(7)单片机 (8)(8)MAX7219 (8)四、总原理图及元器件清单 (9)(1)总原理图 (10)(2)元器件清单 (11)五、源程序.......................................................................................................... ........... . (11)六、结论与心得 (15)七、参考文献..................................................................................... 错误!未定义书签。

单片机秒表实训报告

单片机秒表实训报告

目录一、设计题目 (2)二、方案设计 (2)三、硬件设计 (2)1电路图 (2)2.I/O口的分配 (3)3、电路的工作原理 (3)4原件明细 (3)四、软件设计 (4)1、软件设计的思路 (4)2、程序流程图 (4)3、总体结构框架介绍 (6)4、程序清单 (6)五、制作和调试 (8)六、心得体会 (8)七、参考文献 (9)一、设计题目利用AT89C51单片机设计并制作秒表电路。

要求如下:通过LED显示器(数码管)显示秒的十位和个位;设计一个按键,使按键按下去时秒表开始计时,即秒表开始键;设计一个按键,按键按下去时秒表暂停计时,使秒表停留在原先的计时,即计时停止键;设计一个按键,作为秒表的清零按钮,使秒表计数结束后可以清零。

二、方案设计1、该秒表主要由51系列单片机及开关控制数码显示管的显示情况,此秒表可现实显示两位数从00到99的计数,即开始计数、停止计数和清零三种,由手动控制三个开关K1、K2、K3来实现。

2、当接通电源时数码管显示00,然后按动K1使秒表开始计时,在0秒到99秒之间的任何时间均可;若要定时,如只需计时到32秒则在显示器显示到32时按下定时键K2即可;在计时过程中若需要清零,则需按下K3键。

3、设计过程中除了向老师请教外,还通过上网查阅资料及翻阅书籍。

上单片机课程时我曾做过关于数码显示器的实验,所以在焊接电路板时可参照实验报告书上的连接方式。

要特别注意两数码管引脚的连接及com端和三极管的连接,其决定了共阴极和共阳极,此处涉及到编程中初值的写入,为在焊接电路时简洁,因此我采用下面的com端,即数码管采用共阴极方式。

主要设计思路是编写相应程序后由单片机的P0口输出到数码管上,实现数据的显示。

P2.6口控制个位的显示和P2.7口控制十位的显示,P3.5、P3.6、P3.7口分别控制秒表的开始、停止和清零。

三、硬件设计1电路图使用Proteus工程软件制图,如下图所示:2.I/O口的分配P0口是一个漏极开路8位准双向复用I/O端口,它的P0.0~P0.7口分别接电阻R1~R8,但因为该设计中不需要小数点的显示,即dp端不用接,所以只用接7个阻值为100欧的电阻。

单片机实验——秒表(详细步骤)

单片机实验——秒表(详细步骤)
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图5-50所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。本子情境中采用软件去抖。
{
delay(10);//延时去抖动
if(key3==0) //再次检测"复位"按钮是否按下
{
while(!key3); //松手检测
temp=0; //将变量temp的值清零
shi=0; //将十位清零
ge=0; //将个位清零
TR0=0; //关闭定时器
}
}
display(shi,ge); //调用显示子函数
sbit key1=P3^0; //定义"启动"按钮
sbit key2=P3^1; //定义"停止"按钮
sbit key3=P3^2; //定义"复位"按钮
uchar temp,aa,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
TR0=1; //启动定时器开始工作
}
}
if(key2==0) //检测"停止"按钮是否按下
{
delay(10); //延时去抖动
if(key2==0) //再次检测"停止"按钮是否按下
{

单片机秒表实训报告

单片机秒表实训报告

目录一、设计题目 (2)二、方案设计 (2)三、硬件设计 (2)1电路图 (2)2.I/O口的分配 (3)3、电路的工作原理 (3)4原件明细 (3)四、软件设计 (4)1、软件设计的思路 (4)2、程序流程图 (4)3、总体结构框架介绍 (6)4、程序清单 (6)五、制作和调试 (8)六、心得体会 (8)七、参考文献 (9)一、设计题目利用AT89C51单片机设计并制作秒表电路。

要求如下:通过LED显示器(数码管)显示秒的十位和个位;设计一个按键,使按键按下去时秒表开始计时,即秒表开始键;设计一个按键,按键按下去时秒表暂停计时,使秒表停留在原先的计时,即计时停止键;设计一个按键,作为秒表的清零按钮,使秒表计数结束后可以清零。

二、方案设计1、该秒表主要由51系列单片机及开关控制数码显示管的显示情况,此秒表可现实显示两位数从00到99的计数,即开始计数、停止计数和清零三种,由手动控制三个开关K1、K2、K3来实现。

2、当接通电源时数码管显示00,然后按动K1使秒表开始计时,在0秒到99秒之间的任何时间均可;若要定时,如只需计时到32秒则在显示器显示到32时按下定时键K2即可;在计时过程中若需要清零,则需按下K3键。

3、设计过程中除了向老师请教外,还通过上网查阅资料及翻阅书籍。

上单片机课程时我曾做过关于数码显示器的实验,所以在焊接电路板时可参照实验报告书上的连接方式。

要特别注意两数码管引脚的连接及com端和三极管的连接,其决定了共阴极和共阳极,此处涉及到编程中初值的写入,为在焊接电路时简洁,因此我采用下面的com端,即数码管采用共阴极方式。

主要设计思路是编写相应程序后由单片机的P0口输出到数码管上,实现数据的显示。

P2.6口控制个位的显示和P2.7口控制十位的显示,P3.5、P3.6、P3.7口分别控制秒表的开始、停止和清零。

三、硬件设计1电路图使用Proteus工程软件制图,如下图所示:2.I/O口的分配P0口是一个漏极开路8位准双向复用I/O端口,它的P0.0~P0.7口分别接电阻R1~R8,但因为该设计中不需要小数点的显示,即dp端不用接,所以只用接7个阻值为100欧的电阻。

单片机秒表设计实验报告(1)

单片机秒表设计实验报告(1)

本科学生设计性实验报告
学号姓名
学院物理与电子专业、班级
实验课程名称简易秒表设计
教师及职称
开课学期2013 至2014 学年下学期
填报时间2014 年 6 月 5 日
云南师范大学教务处编印
摘要:单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低,安全性高,使用方便等优点。

本次设计内容为以 89C51 单片机为核心的秒表,它采用键盘输入,单片机技术控制。

设计内容以硬件电路设计,软件设计和PCB 板制作三部分来设计。

利用单片机的定时器/计数器定时和计数的原理,用集成电路芯片、LED 数码管以及按键来设计计时器。

将软、硬件有机地结合起来,使他拥有正确的计时、暂停、清零、并同时可以用数码管显示,在现实生中应用广泛。

单片机秒表实验报告(一)

单片机秒表实验报告(一)

单片机秒表实验报告(一)单片机秒表实验报告实验目的通过本次实验,掌握单片机外部中断的使用方法,并实现一个简单的秒表功能。

实验材料•STC89C52单片机开发板•12864液晶屏•面包板、杜邦线若干•USB转串口模块及数据线•电脑实验原理本次实验的主要原理是单片机外部中断。

当按下按键时,引脚的电平会发生变化,从而触发外部中断。

单片机在中断服务程序中可以对计数器进行增加或减少等操作,从而实现秒表的功能。

实验步骤1.将按键连接至单片机的外部中断引脚(如P3.2)。

2.在程序中配置外部中断,使单片机可以正确响应按键。

3.编写程序,在中断服务程序中对计数器进行增加或减少,并将计数值显示在LCD液晶屏上。

程序设计#include <reg52.h>sbit sw = P3 ^2;// 定义按键接口sbit rs = P0 ^0;sbit rw = P0 ^1;sbit en = P0 ^2;void delay(unsigned int i){while(i--);}void write_command(unsigned char tt){P2 = tt;rs =0;rw =0;en =1;delay(5);en =0;delay(100);}void write_data(unsigned char tt){P2 = tt;rs =1;rw =0;en =1;delay(5);en =0;delay(100);}void init(){write_command(0x38);// 8位数据口,双行显示,5x7字符 write_command(0x0c);// 关闭光标显示write_command(0x06);// 清屏后光标移动方向设为右write_command(0x01);// 显示开启}void display(unsigned int num){unsigned int i, j, k;i = num /100;j = num %100/10;k = num %10;write_command(0x80);write_data(i +'0');write_data(j +'0');write_data(k +'0');}void main(){unsigned int num =0;init();display(num);IE =0x88;// 打开中断允许while(1){}}void int0() interrupt 0{if(sw ==0){delay(100);if(sw ==0){num ++;display(num);}while(!sw);}}实验结果经过调试,成功实现了秒表实验功能。

单片机秒表实验报告

单片机秒表实验报告

单片机秒表实验报告实验目的:本实验旨在通过使用单片机搭建一个简单的秒表,掌握单片机的基本输入输出方法和定时器的使用,提高对单片机的编程能力。

实验器材:1. STC89C52单片机开发板2. 4位共阳数码管3. 74HC595移位寄存器4. 按钮开关5. 连接线实验原理:秒表是一种测量时间的工具,通常用于计时。

在本实验中,我们将使用单片机来实现一个简单的秒表功能。

通过使用定时器中断,每隔一定的时间更新数码管上显示的时间,实现秒表的计时功能。

同时,通过按下按钮开关,可以控制秒表的启动、暂停和复位。

实验步骤:1. 将STC89C52单片机开发板与4位共阳数码管、74HC595移位寄存器和按钮开关连接。

2. 将开发板上的相应引脚与数码管和移位寄存器的引脚连接,确保连接正确。

3. 在单片机的主函数中初始化定时器和外部中断,并设置定时器的中断时间为1秒。

4. 在定时器中断函数中,每隔1秒更新数码管上的显示时间。

可以使用循环方式实现时间的累加和更新。

5. 在外部中断函数中,根据按钮开关的状态,实现秒表的启动、暂停和复位功能。

6. 编译、下载程序到单片机开发板,并将开发板上电。

7. 按下按钮开关开始计时,再次按下暂停计时,再次按下继续计时,再次按下复位计时。

8. 观察数码管上显示的时间是否正确,并测试秒表功能是否正常。

实验结果:经过测试,本实验搭建的单片机秒表功能正常,能够准确计时,并可以通过按钮开关实现启动、暂停和复位功能。

结论:通过本实验,我们成功地使用单片机搭建了一个简单的秒表,并实现了基本的计时功能。

同时,通过掌握单片机的定时器和外部中断的使用,我们提高了对单片机的编程能力。

这对于进一步深入学习和应用单片机具有重要的意义。

单片机c语言秒表显示实验

单片机c语言秒表显示实验

秒表显示实验一.实验目的1. 这个实验是设计一个程序,可以通过单片机让数码管显示从00开始每秒自动加一至99(不熟练的可先设计一个数码管的显示)到99后自动清零,从00开始继续计时。

2. 在做这个实验时要用到更新显缓存这种方法。

3. 让学生更熟悉keil软件的应用,对单片机C语言能更好的应用。

二. 实验过程1.对程序开发环境进行处理(打开软件,建工程,保存工程,建文件,文件加到工程里)。

2编程序,用更新显缓存:#include"AT89X51.H"//************************#define uchar unsigned char#define uint unsigned int//************************uint second;uchar disbuf[4];uchar codeLED[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00}void delay_nms(unit nms){}//延时void update_disbuf(void){uint tmp16bit;tmp16bbit = second;disbuf[0] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[1] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[2] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[3] = LED[tmp16bit%10]}void main(void){sp = 0x70;P1_4 = 0;P0 = 0xff;second = 0;update_disbuf();while(1){P0 = disbuf[0];delay nms(1000);second++;update_disbuf();}} //end3.完成整个程序:#include"AT89X51.H"#include"intrins.h"//==============================#define uint unsigned int#define uchar unsigned charuint second;uchar disbuf[4];sbit wei=P2^7;sbit duan=P2^6;uchar codeLED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f };//============================== void delay_ms(uint nms){uint i,j;for(i=0;i<nms;i++){for(j=0;j<99;j++){_nop_();_nop_();}}}//============================== void update_disbuf(){delay_ms(1000);second++;disbuf[0]=second%10;disbuf[1]=second/10%10;disbuf[2]=second/100%10;disbuf[3]=second/1000%10;}//============================== void main(){second=0;wei=1;P0=0xdf;wei=0;duan=1;P0=LED[0];while(1){update_disbuf();P0=LED[ disbuf[0]];}}4.对程序进行保存编译,无错后,点击target options,在点击OUTPUT后,生成.hex文件,将程序下载到开发板上,观察实验效果。

MCU实验报告--3-基于单片机的简易秒表设计制作.doc

MCU实验报告--3-基于单片机的简易秒表设计制作.doc

MCU实验报告--3-基于单片机的简易秒表设计制作MCU实验报告--3-基于单片机的简易秒表设计制作项目二基于单片机的简易秒表设计制作一、实验目的和要求1、实验目的熟悉LED数码管与单片机的接口电路及其设计方法,掌握动态显示方式及其典型的应用电路;掌握LED八段数码管秒表显示器的程序编制方法。

通过调试简易秒表整体程序,学会编制含LED动态显示、定时器中断等多种功能的综合程序,初步掌握复杂应用程序的编制和调试技巧。

2、实验要求A仿真试验,完成用数码管显示0-9或A-F并不断循环;B简单秒表的设计及实现,每过1S,LED数码管显示的秒数加1,设计制作0-59S不断运行的秒表。

二、实验仪器设备1、PC机(Keil,PROTEUS)3、面包板4、元器件2、实验仿真板(用dpj.dll实验仿真板验证)三、实验步骤1、器件准备元器件清单列表元件名称AT89S51晶振电容1数码管12MHz参数数量1112电阻1电阻2电容1其它元件名称参数数量2、硬件设计试验A仿真原理图试验B仿真原理图实验B根据电路原理图,对各个硬件模块在面包板上进行搭试。

3、软件设计及调试1)、启动Keil软件2)、源程序(供参考)试验ACounterEQU57H;计数器,显示程序通过它得知现正显示哪个数码管DISPBUFEQU58H;显示缓冲区为58H-5DH……试验B2……3)、调试程序A、根据程序确定调试目的,即调试时所需观察的内容结果。

B、调试程序。

4、固化程序将以上ASM编译生成HEX文件,利用编程器将HEX文件烧录到AT89S51。

5、秒表显示(照片)四、总结与体会扩展阅读:简易秒表的制作简易秒表的制作1.实训目的(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。

(2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。

(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。

单片机原理与应用实验报告5——秒表定时器实验

单片机原理与应用实验报告5——秒表定时器实验

大连理工大学软件学院《单片机原理与应用》实验报告姓名:学号:班级:姓名:学号:班级:组号:实验箱编号:实验时间:月日实验室:嵌入式实验室实验台:Embest Edukit-III平台指导教师:侯刚成绩:实验五:秒表定时器实验一、实验目的和要求题目:秒表定时器实验实验目的1. 学习单片机的基本接口技术。

2. 学习74HC595、74HC138使用及与51单片机的控制方法。

实验要求1.通过按键控制,完成数码管的显示计数控制。

2. 用汇编语言设计程序,完成8个数码管的显示控制。

当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。

当再次按下INT 按钮时,停止计数。

二、实验原理和内容实验内容:用汇编语言设计程序,完成8个数码管的显示控制。

当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。

当再次按下INT 按钮时,停止计数。

实验原理:1.根据原理图,分析工作原理,有P0进行取段码,P2.0 P2.1 P2.2进行取位码。

2.使用定时器进行计时。

根据所给开发板上的晶振频率,计算出计时器所付初值,设置计时器TO在模式下工作,每次计时100ms后,转入数码管显示中断处理程序。

3.实验板为共阴极数码管显示,将对应的显示0~9的电信号依次存储在“数组表”中。

4.使用key1,key2两个按键,按下key1,开始计时。

按下key2,计时停止。

5.根据实验要求,采用T0,T1两个定时器,其中T0用来增加时间显示,T1为按暂停键时为LED显示管循环上电所用。

6.每部分中断程序用寄存器间接寻址的方式获取显示数字的电信号量。

并进行循环上电,保证数字的亮度。

三、主要仪器设备及软件编程环境主要仪器:计算机编程软件,51电路开发板编程环境:uVision2 ,progisp烧写软件四、实验步骤与编程实验步骤:编写代码,编译,调试,烧写,完成实验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安徽科技学院机电与车辆工程学院《电子电路课程综合实训》验收材料题目: 电子秒表姓名(学号) 胡斌**********李绪1609110214王增龙1609110227段鑫鹏专业: 电气工程及其自动化班级: 112班****:***2013 年 12 月 29日目录第一章单片机课程设计任务书 (1)一、目的意义 (1)二、设计时间、地点和班级 (1)三、设计内容 (1)四、参考电路图形 (2)五、单片机的相关知识 (3)第二章硬件设计 (5)一、单片机简介 (5)二、电源电路 (5)三、晶振振荡电路 (5)四、复位电路 (5)五、显示电路 (6)六、键盘电路 (6)七、硬件主电路图设计 (7)八、元件清单 (7)第三章软件设计 (8)一、软件设计概述 (8)二、主程序流程图 (8)三、程序中各函数设计 (8)四、C语言主程序设计 (10)第四章课程设计体会 (13)..五、单片机相关知识本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了AT89C51。

AT89C51单片机采用40引脚的双列直插封装方式。

图1.2为引脚排列图,40条引脚说明如下:主电源引脚Vss和Vcc①Vss接地②Vcc正常操作时为+5伏电源外接晶振引脚XTAL1和XTAL2①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。

当采用外部振荡器时,此引脚接地。

②XTAL2内部振荡电路反相放大器的输出端。

是外接晶体的另一端。

当采用外部振荡器时,此引脚接外部振荡源。

图1.2 AT89C51单片机引脚图控制或与其它电源复用引脚RST/VPD,ALE/PROG,PSEN和EA/Vpp①RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。

②ALE/PROG正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。

因此,它可用作对外输出的时钟,或用于定时目的。

但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL电路。

对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(PROG功能)③PSEN外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,PSEN在每个机器周期内两次有效。

PSEN同样可以驱动八LSTTL输入。

④EA/Vpp、EA/Vpp为内部程序存储器和外部程序存储器选择端。

当EA/Vpp为高电平时,访问内部程序存储器,当EA/Vpp为低电平时,则访问外部程序存储器。

对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(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口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,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负载。

AT89C52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89C52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

CPU是单片机的核心部件。

它由运算器和控制器等部件组成。

(1)运算器运算器的功能是进行算术运算和逻辑运算。

可以对半字节(4位)、单字节等数据进行操作。

例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。

89C51运算器还包含有一个布尔处理器,用来处理位操作。

它是以进位标志位C为累加器的,可执行置位、复位、取反、等于1转移、等于0转移、等于1转移且清0以及进位标志位与其他可寻址的位之间进行数据传送等位操作,也能使进位标志位与其他可移位寻址的位之间进行逻辑与、或操作。

(2)程序计数器PC程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。

执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。

(3)令寄存器指令寄存器中存放指令代码。

CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。

第二章硬件设计本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等。

一、单片机简介本系统设计采用C51系列单片机。

ST89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容(由于在微机原理中学过C-51的具体知识,这里不再详细说明)。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ST89C51是一种高效的微控制器。

二、电源电路电源电路是系统最基本的部分,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7809电源提供+5V稳压电压。

三、晶体振荡电路MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线 XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。

这里,我们选用51单片机12MHZ的内部振荡方式,电路如下:电容器C1,C2起稳定振荡频率,快速起振的作用,C1和C2可在20-100PF之间取,这里取30P复位电路五、显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示。

我们采用的是数码管显示电路。

用2个共阴极LED显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各二极管的亮灭组合成字符。

在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示温度,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O 口。

在设计中,我们采用LED动态显示,用P0口驱动显示。

由于P0口的输出极是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平。

六、键盘电路在按键电路中,我们可以在I/O口上直接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有按键按下等。

键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,用部分P1口做开关,P1.0复位,P1.1开始和暂停,用外中断INT1开始,另外用软件法消除抖动。

电路图如下所示:七、硬件主电路图设计用Protues画出其硬件主电路图如下:秒表原理图八、元器件清单名称与规格数量名称与规格数量按键2个AT89C51 1块两位共阴极数码2个RESPACK-8 1个管电路板1块电阻4个电容3个晶振1个第三章软件设计一、软件设计概述在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。

把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。

应用系统的程序由包含多个模块的主程序和各种子程序组成。

各程序模块都要完成一个明确的任务,实现某个具体的功能,在具体需要时调用相应的模块即可。

功能描述:用2位LED数码显示"秒表",显示时间00——99秒,每秒自动加1;一个"开始""暂停"键,一个"清零"键。

二、主程序流程图这里采用顺序结构,通过对按键的扫描,判断要实现什么功能。

如下所示:三、程序中各函数设计(1)初始化函数设计void init(){TMOD=0x10;//定时器1工作方式1TL1=0xf0;//延时初始化设置//TR1=1;EA=1;//开总开关ET1=1;//开定时器}(2)显示函数设计void writeled(uchar num,uchar addr) {//关显示P2=0xff;//送数据P0=dulatab[num];//开显示P2=welatab[addr];delay(4);}void display(uchar sec){uchar sech,secl;sech=sec/10;secl=sec%10;writeled(sech,0);writeled(secl,1);}(3)按键函数设计void keyscan(){if(start==0){delay(2);if(start==0){TR1=~TR1;while(start==0){display(sec);}}}if(stop==0&&TR1==0){delay(2);{sec=0;while(stop==0){display(sec);}}}}(4)延时函数设计void delay(uchar time)//延时{uchar i,j;for(i=0;i<time;i++){for(j=0;j<110;j++);}}四、C语言主程序设计#include<reg51.h>#define uchar unsigned charsbit start=P1^1;sbit stop=P1^0;uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数字编码0-9 uchar code welatab[]={0xfe,0xfd};//位控制字uchar msec,sec;void delay(uchar time)//延时{uchar i,j;for(i=0;i<time;i++){for(j=0;j<110;j++);}}void writeled(uchar num,uchar addr){P2=0xff;P0=dulatab[num];P2=welatab[addr];delay(4);}void display(uchar sec) {uchar sech,secl;sech=sec/10;secl=sec%10; writeled(sech,0); writeled(secl,1);}void init(){TMOD=0x10;TH1=0xd8;TL1=0xf0;//TR1=1;EA=1;ET1=1;}void keyscan(){if(start==0){delay(2);//延时防抖if(start==0){TR1=~TR1;while(start==0){display(sec);}}}if(stop==0&&TR1==0) {delay(2);//延时防抖if(stop==0){sec=0;while(stop==0) {display(sec);}}}}void main(){init();while(1){display(sec);keyscan();}}void timer1() interrupt 3 {TH1=0xd8;TL1=0xf0;msec++;if(msec==100){msec=0;sec++;if(sec==100){sec=0;}}}第四章课程心得体会经过两个星期的课程设计,使我加深了单片机课程的了解,我们花费了很多的时间和精力,比如说重新温故C语言的书籍和以前所学单片机不太懂的知识,我觉得这几天让我过的十分的充实,我相信其余的队友也有相同的看法,下面是我的一些心得体会:1.将学习的理论知识通过实验融会贯通,让我对它的理解更加的深刻,对程序的编译过程也有一定了解。

相关文档
最新文档