基于51单片机秒表的程序设计[1]

合集下载

基于51单片机的秒表设计

基于51单片机的秒表设计

江西理工大学应用科学学院信息工程系单片机原理与应用课程设计报告设计题目:基于51单片机的秒表设计专业:电子信息工程班级:电信121学号: 08060312109参与人员:贺佳、周代元、周昶旭、张浥中指导老师:王苏敏完成日期: 2015年1月20日目录1 设计任务和性能指标 (1)1.1 课题内容 ....................... 错误!未定义书签。

1.2 课题要求 ........................ 错误!未定义书签。

2 设计方案............................. 错误!未定义书签。

2.1 需求分析 (3)2.2 方案论证 (3)3系统软件设计 (5)4.1 系统软件流程图................... 错误!未定义书签。

4.2 实验程序清单 .................... 错误!未定义书签。

4 系统硬件设计 (10)5.1 调试步骤 (11)5.2 性能分析 ........................ 错误!未定义书签。

5系统硬件设计.......................... 错误!未定义书签。

参考文献.. (14)1 设计任务和性能指标1 课题内容要求及目的1.1课题内容用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。

综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。

通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。

本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。

模拟利用AT89C51单片机、LED 数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。

51单片机 秒表程序

51单片机 秒表程序
Dis_Gewei=tab[msecond%10]; //个位显示处理
}
void ISR_INT0(void) interrupt 0 using 1
{
TR0=!TR0; //利用外部中断打开和关闭定时器0 用于开始和停止计时
}
void ISR_INT1(void) interrupt 2 using 1
{
if(TR0==0)//停止时才可以清零
CLR();
}
void CLR(void)
{
second=0; //利用外部中断清零
msecond=0;
Dis_Shiwei=tab[msecond/10];//十位显示值处理
Dis_Gewei=tab[msecond%10]; //个位显示处理
//共阴数码管 0-9
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
unsigned char S_Dis_Shiwei;//定义秒十位
unsigned char S_Dis_Gewei; //定义秒个位
unsigned char second,msecond;
void CLR(void);
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
EX0=1;//外部中断0设置(打开外部中断0)
IT0=1;
EX1=1;//外部中断1设置
/*
1、清零
2、硬件要求:数码管、晶振12M
*/

51单片机实验 秒表设计

51单片机实验 秒表设计

实验报告一、实验名称10秒计时的秒表设计二、实验内容精确到0.1秒的秒表三、相关模块led数码管、usb、独立键盘四、实验代码#include "reg52.h"typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit k1=P3^1;sbit k2=P3^0;sbit k3=P3^2;sbit k4=P3^3;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};u16 s,sec;unsigned int i;unsigned int j;unsigned int a,b,c,d;u8 mb[2];void Timer0Init(){TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;TR0=0;//打开定时器}void delay(u16 n){while(n--);}void DigDisplay1(u16 i){switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==1){P0=smgduan[mb[i]]+0x80;//发送段码}else{P0=smgduan[mb[i]];}delay(1); //间隔一段时间扫描P0=0x00;//消隐}void DigDisplay2(u16 i){i=i+3;switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==4){P0=smgduan[a]+0x80;}else{P0=smgduan[b];}delay(1);P0=0x00;}void DigDisplay3(u16 i){i=i+6;switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==7){P0=smgduan[c]+0x80;}else{P0=smgduan[d];}delay(1);P0=0x00;}void key1(){delay(10);if(k1==0){TR0=!TR0;while(!k1);}}void key2(){delay(10);if(k2==0){s=0;sec=0;while(!k2);}}void key3(){delay(10);if(k3==0){if (j==0) j=1;else j=0;if (j==1){a=mb[1];b=mb[0];}if (j==0){c=mb[1];d=mb[0];}while(!k3);}}void key4(){delay(10);if(k4==0){s=0;sec=0;a=0;b=0;c=0;d=0;while(!k2);}}void main(){Timer0Init();i=0;j=0;while(1){delay(10);key1();if(TF0==1){TF0=0;TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;s++;}if(s==60){s=0;sec++;if(sec==100)sec=100;}key2();mb[0]=sec%10;mb[1]=(sec/10)%10;key3();DigDisplay1(i);DigDisplay2(i);DigDisplay3(i);i++;i=i%2;key4();}}五、实验效果K1作用:启动、开始或暂停计时K2作用:计数位清零K3作用:记录当前时间并显示K4作用:清零所有的数码管六、实验遇到的问题经过前几次的实验,0到10秒的计数已经不成问题,本次实验的难点主要在几个按键的功能实现上。

基于51单片机的数字秒表课程设计

基于51单片机的数字秒表课程设计

电气与自动化工程学院卓越工程师培养计划暑期实训报告题目秒表系统的设计年级11级专业自动化班级卓越班学号*********姓名俞雷地点大学生创新实验室日期2012年8月12日~2012年8月20日目录一、单片机简介............................................................................- 2 -二、设计目标................................................................................- 3 -1、设计目的: (3)2、具体操作: (3)三、硬件设计................................................................................- 4 -原理图:. (4)四、系统的软件设计....................................................................- 5 -1、软件整体设计思路: (5)2、软件流程图: (5)3、程序: (6)(1)数码管秒表显示程序: ...................................................- 6 -(2)1602液晶秒表显示程序:............................................ - 13 -五、系统的调试及设计结果..................................................... - 18 -1602液晶——秒表显示效果图:. (18)LED数码管——秒表显示效果图: (18)六、创新实验室课程设计小结................................................. - 19 -一、单片机简介单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

基于51单片机秒表的程序的设计[1]

基于51单片机秒表的程序的设计[1]

基于51单片机秒表的程序设计1.设计目的:(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。

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

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

(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。

2.设计步骤与要求(1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。

以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。

用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。

(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。

二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。

秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。

由上述设计思路可设计出软件流程图如图1.1所示。

(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。

(完整版)基于51单片机的秒表设计1

(完整版)基于51单片机的秒表设计1

实训报告题目秒表系统的设计年级专业班级学号姓名地点日期目录一,目⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 3 二,系硬件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 4 三,系件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7 四,系与果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12 五,片机小⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13设计目标最近几年来跟着科学技术的发展,单片机的应用范围愈来愈广,也成为好多专业的必修课。

本文简单论述了鉴于单片机的秒表设计。

本设计的主要特色是计时精度达到 0.01 秒,能够用来为各样体育比赛计时等。

本设计的数字秒表采纳AT89才 51 单片机为主要器件,利用其准时器的原理,结LED数码管以及外面中止电路来设计计时器。

将软硬件联合起来,使得系统能实现 0~99.99 秒的计时,计时精度位 0.01 秒。

当按下一个键 1 时,开始显示数字,即计时开始,再按下键 2 时,暂停计时并显示方才的结果,这个时候假如再按键 1,则持续计时,也就是显示的数字包含方才的数据。

按下键 3 时,数据清零。

系统硬件设计1 、1整体方案的设计数字秒表拥有显示直观、读取方便、精度高等长处,在计时中宽泛应用。

本设计顶用单片机和数码管构成数字秒,力争构造简单。

设计中包含硬件电路的设计和系统程序的设计。

硬件电路主要有主控制器、控制按钮与显示电路构成。

主控制器采纳单片机AT89才 51,显示电路采纳四位共阴极数码管显示计不时间。

本设计利用 AT89才 51 单片机的准时器,使其能精准计时。

利用键盘上的独立按键实现开始计时和暂停以及清零。

P0口输出段码数据, P2.0~P2.2 连上译码器作为位选。

设计的基本要求是正确性。

计时器采纳 T0 中止实现,准时溢出中止周期为1ms,当溢出中止后向CPU 发出溢出中止恳求,每发出10 次中止恳求就对 10ms位(即最后一位)加一,达到 100 次就对 100ms位加一,以此类推,直到99.99s 为止。

基于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单片机的秒表。

基于51单片机的秒表设计

基于51单片机的秒表设计

单片机课程设计课程题目:基于51单片机的秒表设计专业:电子信息工程班级:电信121学号:姓名:1 课题内容要求及目的1.1课题内容用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。

综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。

通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。

本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。

模拟利用AT89C51单片机、LED 数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。

计秒数码管采用三位的数码管,当计数超过范围是所有数码管全部清零重新计数。

1.2课题要求本课题是基于单片机的秒表系统设计,它的具体要求有以下几点:(1)用单片机AT89C51实现;(2)以0.1秒为最小单位进行显示;(3)秒表量程为0.0-99.9秒,用LED显示;(4)有清零、开始、停止功能。

1.3课题目的通过课程设计,进一步熟悉和掌握AT89C51单片机的结构及工作原理,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。

通过完成一个包括电路设计和程序开发的完整过程,进一步了解开发一单片机应用系统的全过程,通过此综合训练,为以后毕业设计打下一定的基础。

(1)利用单片机定时器计数器中断设计秒表,从而实现秒、十分之一秒的计时。

(2)综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对单片机课程的全面认识。

基于51单片机的数字秒表设计

基于51单片机的数字秒表设计

单片机系统课程设计成绩评定表设计课题:数字秒表学院名称:电气工程学院专业班级:自动1204学生:学号:指导教师:王黎设计地点:31-630设计时间:2013-12-29~2013-1-9单片机系统课程设计课程设计名称:数字秒表专业班级:自动1204学生姓名:学号:指导教师:王黎课程设计地点:31-630课程设计时间:2013-12-29~2013-1-9单片机系统课程设计任务书目录1绪论 (3)2系统概述 (4)2.1数字式秒表的设计意义 (4)2.2设计要求与分析 (5)3 硬件电路设计 (6)3.1基准脉冲的获取 (6)3.2键盘及控制电路 (12)3.3计数、译码及显示电路 (14)4 数字秒表系统软件设计 (16)4.1 主程序软件设计 (16)4.2 中断服务程序设计 (16)5调试与仿真 (19)5.1软件调试与烧写 (19)5.2 硬件仿真 (20)6. 结论 (21)参考文献: (23)附录 (24)附录一系统原理图 (24)附录二源程序代码 (25)1绪论21世纪,单片机的发展非常的迅速。

单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。

它是一种集计数和多种接口于一体的微控制器,被广泛应用在智能产品和工业自动化上,而51单片机是个单片机中最为典型和最有代表性的一种。

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。

该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是Atmel的AT89系列,它广泛应用于工业测控系统之中。

很多公司都有51系列的兼容机型推出,今后很长的一段时间将占有大量市场。

本次的设计任务是一个数字秒表,而秒表与普通的钟表不同,它的目的是对从某一时刻到另一时刻的时间间隔进行计时。

秒表的数字化常给人们的生活带来极大的方便,它广泛应用于社会的各个领域。

51单片机秒表程序设计

51单片机秒表程序设计

51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。

本文将介绍如何使用51单片机设计一个简单的秒表程序。

2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。

2.初始化LCD液晶显示屏。

3.设置按键开关为输入模式。

3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。

2.等待用户按下开始/暂停按钮。

3.如果用户按下开始按钮,则开始计时,进入计时状态。

4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。

5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。

6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。

3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。

2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。

3.定义一个变量start_time用于存储计时器开始的时间点。

4.定义一个变量pause_time用于存储计时器暂停的时间点。

5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。

6.在暂停状态下,保持time的值不变。

3.4 按键检测1.检测按键开关是否被按下。

2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。

3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。

4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。

4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。

基于51单片机的数字秒表课程设计、毕业设计论文

基于51单片机的数字秒表课程设计、毕业设计论文

单片机课程设计报告基于51单片机的数字秒表设计专业:通信工程学号:11100640225姓名:罗宏时间:2014-6-26目录一、课程名称 (1)二、设计目的和意义 (1)三、任务要求 (1)四、任务分析、设计方案 (1)五、具体实现过程 (9)六、仿真、实验验证过程及实现结果、现象 (12)七、结论 (14)八、总结与体会 (14)一、课题名称基于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、复位按钮。

51单片机时钟秒表课程设计

51单片机时钟秒表课程设计

51单片机时钟秒表课程设计
这个是我写的作业的方案,单片机课程结课作业,以下是我写的设计方案,写的不咋滴欢迎拍砖。

一、详细功能设计
1、基于51 单片机倒计时秒表,最大值为9999 秒,计时单位为0.1 秒;
2、计时的初始值为组员学号后4 位,键盘启动/停止计时;
3、设计多个按键,使用键盘选择不同成员的学号作为初始值。

二、8031 最小系统设计
1、最小系统设计原理图如图1.0 所示:
2、8031 最小系统概述;
8031 最小系统包含晶振电路与复位电路。

晶振选择12MHZ 晶振,晶振电容使用30pf 电容瓷片电容。

复位电路选择上电复位。

三、硬件设计
1、数码管电路
在本设计中,使用7 段共阴极数码管,选择数码管的型号为7SEG-MPX6- CC;
2、数码管片选电路;
由于本设计需要显示五位数字,同时为了驱动数码管,使用了74HC154 芯片。

与此同时,使用74HC154 芯片还可以扩展数码管显示数字的个数。

三、软件设计
1、程序流程图如图3.0 所示:
图3.0 程序流程图
2、程序流程说明
数码管显示和扫描键盘子函数放在0.1 秒的定时器中断里,而主函数的while(1)函数向数码管显示数据变量送数据。

数码管显示函数接受键盘状态,根。

51单片机秒表程序设计

51单片机秒表程序设计

51单片机秒表程序设计51单片机秒表程序设计班级:姓名:学号指导老师时间一、课题任务要求用*****设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。

即数码显示管在原先的计数上快速加一。

二、设计思路1、使用单片机,设计秒表,能显示分分秒秒;2、使用三个按键停止,开始,复位,其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时;3、使用液晶或数码管显示;4、使用定时器中断;三、硬件设计1、单片机介绍单片机:*****是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

*****主要特性:与MCS-51 兼容低功耗的闲置和掉电模式4K字节可编程闪烁存储器全静态工作:0Hz-24MHz 寿命:1000写/擦循环数据保留时间:10年三级程序存储器锁定128×8位内部RAM 片内振荡器和时钟电路32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道管脚说明:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

基于51单片机的秒表设计

基于51单片机的秒表设计

单片机课程设计课程题目:基于51单片机的秒表设计专业:电子信息工程班级:电信121学号:姓名:1 课题内容要求及目的1.1课题内容用AT89C51设计一个秒表,该秒表课可显示0.0~99.9秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。

综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。

通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。

本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。

模拟利用AT89C51单片机、LED 数码管以及控件来控制秒表的计数以及计位!其中有三位数码管用来显示数据,显示秒(两位)和十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。

计秒数码管采用三位的数码管,当计数超过范围是所有数码管全部清零重新计数。

1.2课题要求本课题是基于单片机的秒表系统设计,它的具体要求有以下几点:(1)用单片机AT89C51实现;(2)以0.1秒为最小单位进行显示;(3)秒表量程为0.0-99.9秒,用 LED显示;(4)有清零、开始、停止功能。

1.3课题目的通过课程设计,进一步熟悉和掌握AT89C51单片机的结构及工作原理,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。

通过完成一个包括电路设计和程序开发的完整过程,进一步了解开发一单片机应用系统的全过程,通过此综合训练,为以后毕业设计打下一定的基础。

(1)利用单片机定时器计数器中断设计秒表,从而实现秒、十分之一秒的计时。

(2)综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对单片机课程的全面认识。

基于51单片机的秒表设计

基于51单片机的秒表设计

51单片机秒表设计程序清单#include<reg52.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint); //延时程序sbit k1=P3^4; //定义开始键sbit k2=P3^5; //定义暂停键sbit k3=P3^6; //定义清零键sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar tt,i,j,k,l;void display(uchar i,uchar j,uchar k,uchar l); //数码管显示数void main(){tt=0;i=0;j=0;k=0;l=0; //数码管显示0TMOD=0x01; //设置定时器为模式1TH0=(65536-5000)/256; //给定时器赋定时初值TL0=(65536-5000)%256;EA=1; //开总中断ET0=1;TR0=0;while(1){if(k1==0) //判断是否按下开始键{delay(10); //消抖if(k1==0)TR0=1;}if(k2==0) //判断是否按下暂停键{delay(10); //消抖if(k2==0)TR0=0;}if(k3==0) //判断是否按下清零键{delay(10);if(k3==0){i=0;j=0;k=0;l=0;TR0=0; //清零}}display(i,j,k,l); //数码管显示}}void delay(uint z){uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--); //延时}void exter0() interrupt 1 //定时器溢出中断{TH0=(65536-5000)/256; //重装计时初值TL0=(65536-5000)%256;tt++;if(tt==2){tt=0;i++; //溢出两次,0.01秒位加1if(i==10){i=0;j++; //0.01秒位到10,0.1位加1 }if(j==10){j=0;k++; //0.1秒位到10,1秒位加1 }if(k==10){k=0;l++; //1秒位到10,10秒位加1 }if(l==10){l=0; //10秒位到10,清零}}}void display(uchar i,uchar j,uchar k,uchar l){dula=1;P0=table[i]; //显示数值dula=0;wela=1;P0=0xf7; //0.01秒位显示wela=0;delay(1);dula=1; //数值显示P0=table[j];dula=0;wela=1;P0=0xfb; //0.1秒位显示wela=0;delay(1);dula=1; //数值显示P0=table[k]|0x80; //始终在1秒位后面显示小数点dula=0;wela=1;P0=0xfd; //1秒位显示wela=0;delay(1);dula=1;P0=table[l]; //数值显示dula=0;wela=1;P0=0xfe; //10秒位显示wela=0;delay(1);}。

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

基于51单片机秒表的程序设计1.设计目的:(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。

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

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

(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。

2.设计步骤与要求(1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。

以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。

用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。

(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。

二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。

秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。

由上述设计思路可设计出软件流程图如图1.1所示。

(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。

8位LED显示的数据由显示缓冲区30H~37H单元中的数据决定,顺序是从左至右,动态显示时,每位显示持续时间为1ms,1ms延时由软件实现,8位显示约耗时8ms。

主程序、按键查询子程序采用第0组工作寄存器,显示子程序采用第1组工作寄存器。

1秒定时采用定时器T0方式1中断,每50ms中断一次,用21H做50 ms计数单元,每20次为一个循环,计满20次,60秒计数单元(20H)计数1次。

60秒计数采用定时器T1方式2计数,计数脉冲采用软件置位、复位P3.5口的方法实现,用20H单元做60秒计数单元,如定时器T1溢出,则20H单元被清零,20H单元的数据采用十进制计数,该数据被拆成个位和十位两个数据后分别送至显示缓冲区的30H、31H单元。

按照上述思路可编制源程序如下:ORG 0000HAJMP M AINORG 000BHAJMP CONT;主程序;――――――――――初始化程序―――――――――――MAIN:MOV TMOD,#61H ;置T0方式1定时,T1方式2计数MOV TH0,#3CH ;T0置初值MOV TL0,#0B0HMOV TH1,#0C4H ;T1置初值MOV TL1,#0C4HMOV DPTR,#4400H ;8155控制口地址送DPTRMOV A,#43H ;设置8155工作方式字MOVX @DPTR,A ;设置PA、PB口输出,PC口输入MOV 20H,#00H ;60秒计数单元置初值MOV 21H,#14H ;50ms计数单元置初值MOV SP,#3FH ;堆栈指针置初值MOV R2,#08H ;LED待显示位数送R2MOV R0,#30H ;显示缓冲区首址送R0STAR:MOV @R0,#00H ;显示缓冲区清零INC R0DJNZ R2,STARCLR A ;累加器清零;―――――――――――键盘查询程序――――――――――KEY:ACALL KS ;调按键查询子程序判是否有键按下JNZ K1 ;有键按下转移ACALL DISP ;无键按下,调显示子程序延时AJMP KEY ;继续查询按键;―――――――――――键盘扫描程序――――――――――K1:ACALL DISP ;键盘去抖延时ACALL DISPACALL KS ;再次判别是否有键按下JNZ K2 ;有键按下转移AJMP KEY ;无按键,误读,继续查询按键K2: MOV R3,#0FEH ;首列扫描字送R3MOV R4,#00H ;首列号送R4K3:MOV DPTR,#4401H ;PA口地址送DPTR,开始列扫描MOV A,R3MOVX @DPTR,A ;列扫描字送PA口INC DPTR ;指向PC口INC DPTRMOVX A,@DPTR ;读取行扫描值JB ACC.0,L1 ;第0行无键按下,转查第1行MOV A,#00H ;第0行有键按下,行首键号送AAJMP LK ;转求键号L1:JB ACC.1,L2 ;第1行无键按下,转查第2行MOV A,#08H ;第1行有键按下,行首键号送AAJMP LK ;转求键号L2:JB ACC.2,L3 ;第2行无键按下,转查第3行MOV A,#10H ;第2行有键按下,行首键号送AAJMP LK ;转求键号L3:JB ACC.3,NEXT ;第3行无键按下,转查下一列MOV A,#18H ;第3行有键按下,行首键号送A AJMP L KLK:ADD A,R4 ;形成键码送APUSH ACC ;键码入栈保护K4:ACALL DISPACALL KS ;等待键释放JNZ K4 ;未释放,等待POP ACC ;键释放,弹栈送AAJMP PR ;转键盘处理程序NEXT:INC R4 ;修改列号MOV A,R3JNB ACC.3,KEY ;4列扫描完返回按键查询状态RL A ;未扫描完,改为下列扫描字MOV R3,A ;扫描字暂存R3AJMP K3 ;转列扫描程序;―――――――――――键盘处理程序―――――――――――――――PR:CJNE A,#00H,PR01 ;不是KE0键码,转KE1键AJMP KE0 ;转KE0键处理程序PR01:CJNE A,#01H,PR02 ;不是KE1键码,转KE2键AJMP KE1 ;转KE1键处理程序PR02:CJNE A,#02H,PR03 ;不是KE2键码,返回按键查询AJMP KE2 ;转KE2键处理程序PR03:AJMP KEYKE0:SETB TR0 ;启动定时器T0SETB TR1 ;启动定时器T1SETB ET0 ;允许定时器T0中断SETB EA ;开中断AJMP KEY ;返回键盘查询状态KE1:CLR EA ;关中断CLR ET0 ;禁止定时器T0中断CLR TR1 ;关定时器T1CLR TR0 ;关定时器T0AJMP K EYKE2:CLR EA ;关中断AJMP MAIN ;返回主程序进行初始化;――――――――――按键查询子程序―――――――――――――― KS:MOV DPTR,#4401H ;置8155PA口地址MOV A,#00HMOVX @DPTR,A ;全扫描字#00H送PA口INC DPTR ;指向PC口INC DPTRMOVX A,@DPTR ;读入PC口状态CPL A ;变正逻辑,高电平表示有键按下ANL A,#0FH ;屏蔽高4位RET ;返回,A≠0表示有键按下;―――――――――LED动态显示子程序―――――――――――――DISP:PUSH ACC ;A入栈保护SETB RS0 ;保护第0组工作寄存器,启用第1组工作寄存器MOV R2,#08H ;LED待显示位数送R2MOV R1,#00H ;设定显示时间MOV R3,#7FH ;选中最右端LEDMOV R0,#30H ;显示缓冲区首址送R0MOV A,@R0 ;秒显示个位送ADISP1:MOV DPTR,#TAB ;指向字形表首址MOVC A,@A+DPTR ;查表取得字形码MOV DPTR,#4402H ;指向8155PB口(段码口)MOVX @DPTR,A ;字形码送PB口MOV A,R3 ;取位选字MOV DPTR,#4401H ;指向8155PA口(位选口)MOVX @DPTR,A ;位码送PA口DJNZ R1,$ ;延时0.5msDJNZ R1,$ ;延时0.5msRR A ;位选字移位MOV R3,A ;移位后的位选字送R3INC R0 ;指向下一位缓冲区地址MOV A,@R0 ;缓冲区数据送ADJNZ R2,DISP1 ;未扫描完,继续循环CLR RS0 ;恢复第0组工作寄存器POP ACC ;A弹栈,恢复现场RETTAB:DB 3FH,06H,5BH,4FH,66H ;共阴极LED字形表DB 6DH,7DH,07H,7FH,6FH;――――――――――定时器中断服务程序――――――――――――― CONT:PUSH ACC ;保护现场MOV TH0,#3CH ;定时器T1重置初值MOV TL0,#0B0HMOV A,20H ;秒计数器送AAJMP CONT1REN:AJMP REN1CONT1:DJNZ 21H,REN ;1秒定时未到,中断返回MOV 21H,#14H ;重置50ms计数初值CLR P3.5 ;软件产生定时器T1计数脉冲NOPNOPSETB P3.5INC A ;1秒计数值加1DA A ;换算为10进制计数JBC TF1,CONT2 ;60秒到,转清零CONT3:MOV 20H,A ;计数值送60秒计数单元20HANL A,#0FH ;屏蔽高4位MOV 30H,A ;秒表个位待显示数据送显示缓冲区MOV A,20HSWAP A ;60秒计数单元高、低4位数据互换ANL A,#0FH ;屏蔽高4位MOV 31H,A ;秒表十位待显示数据送显示缓冲区AJMP R EN1. CONT2:MOV A,#00HAJMP C ONT3REN1:POP ACC ;恢复现场RET ;中断返回END3.总结与分析(1)实验采用七段码LED设计(数码管),显示直观;采用定时器中断,计时更准确;功能齐全,可随时启动、停止、清零,后者智能化程度更高。

(2)设计、调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。

调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。

本例子将整个程序划分为键盘程序,动态显示程序,秒计时程序三大模块,根据各自的特点确定键盘程序为主程序,动态显示程序为子程序,秒计时程序为定时器中断服务程序。

相关文档
最新文档