基于51单片机秒表设计,独立按键实现启动、复位、暂停功能

基于51单片机秒表设计,独立按键实现启动、复位、暂停功能

功能说明:

按键功能
K1开始
K2暂停
K3复位
#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;  //使用中断  清零  

//数码表
u8 code smgduan[17]={0x3f,0x06,0x5b,
	                 0x4f,0x66,0x6d,
	                 0x7d,0x07,0x7f,
                     0x6f,0x77,0x7c,
                     0x39,0x5e,0x79,
                     0x71};

u8 ssec,sec,min; //毫秒,秒,分
u8 DisplayData[8];

										 
void delay(u16 i)
{
	while(i--);	
}


void Timer0Init()
{
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
	TH0=0Xd8;	//给定时器赋初值,定时10ms
	TL0=0Xf0;	
	ET0=1;//打开定时器0中断允许
	
	//注:稍后用K2控制总中断,实现暂停功能
	EA=1;//打开总中断
	
	TR0=1;//打开定时器			
}


void DigDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=1;LSB=1;LSC=1; break;//显示第7位
			case(1):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(2):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(3):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(4):
				LSA=1;LSB=1;LSC=0; break;//显示第3位 
			case(5):
				LSA=0;LSB=1;LSC=0; break;//显示第2位 
			case(6):
				LSA=1;LSB=0;LSC=0; break;//显示第1位 
			case(7):
				LSA=0;LSB=0;LSC=0; break;//显示第0位	
		}
		P0=DisplayData[i];//发送段码
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}
}

//处理时间,拆分数位
void datapros()
{
	DisplayData[0]=smgduan[min/10];
	DisplayData[1]=smgduan[min%10];
	DisplayData[2]=0x40;	
	DisplayData[3]=smgduan[sec/10];
	DisplayData[4]=smgduan[sec%10];
	DisplayData[5]=0x40;
	DisplayData[6]=smgduan[ssec/10];
	DisplayData[7]=smgduan[ssec%10];
}

//设置外部中断1 (K3)
void Int0Init()
{
      IT1=1;
	  EX1=1;
	  EA=1; 
}

//中断服务函数(按键)
void Int0()  interrupt 0
{
    //消抖
	delay(1000);
	if(K3==0)
	{
	//清零
	   min=0;
	   sec=0;
      ssec=0;
	}
}

//开始计时函数
void start()
{
      datapros();
	  DigDisplay();	
}

//主函数
void main()
{	
	Timer0Init(); //设置外部中断
    Int0Init();
	while(1)
	{
		if(K1==0)
		{
			delay(1000);//消抖
			while(1)
			{
				if(K2==0)
				{
				  EA=0;      //总中断关闭
				}
				
				  start();   //开始计时
				  
				  //退出
				 if(K3==0)
				 {
					 break;
				 }
			}
		}
	     //跳出循环 
		if(K3==0)
		{
		  break;
		}
	}		
}


void Timer0() interrupt 1
{
	TH0=0Xd8;	//给定时器赋初值,定时10ms
	TL0=0Xf0;
	ssec++;
	if(ssec>=100)  //1s
	{
		ssec=0;
		sec++;
		if(sec>=60)
		{
			sec=0;
			min++;
			if(min>=60)
			{
				min=0;
			}
		}	
	}	
}


  • 52
    点赞
  • 434
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
单片机技术》 课程设计报告 题 目: 基于MCU-51单片机秒表设计 班 级: 学 号: 姓 名: 同组人员: 指导教师: 王瑞瑛、汪淳 2014年6月17日 目 录 1 课程设计的目的 3 2 课程设计题目描述和要求 3 2.1实验题目 3 2.2设计指标 3 2.3设计要求 3 2.4增加功能 3 2.5课程设计的难点 3 2.6课程设计内容提要 4 3 课程设计报告内容 4 3.1设计思路 4 3.2设计过程 5 3.3 程序流程及实验效果 6 3.4 实验效果 12 4 心得体会 13 基于 MCS-51单片机秒表设计 摘要:单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体 化高科技产品,具有功耗低,安全性高,使用方便等优点。本次设计内容为以 8051 单片机为核心的秒表,它采用键盘输入,单片机技术控制。设计内容以硬件电路设计, 软件设计和 PCB 板制作三部分来设计。利用单片机的定时器/计数器定时和计数的原理,用集成电路芯片 、LED 数码管以及按键来设计计时器。将软、硬件有机地结合起来,使他拥有正确的计时、暂 停、清零、并同时可以用数码管显示,在现实生中应用广泛。 关键词:秒表;8051;定时器;计数器 1 课程设计的目的 《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的 目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合 应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片 机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力 和能力转化为工程素质的重要阶段。 2 课程设计题目描述和要求 2.1实验题目 开始时,显示"00.0",第一次按下按钮后开始从0- 99.9s计时,显示精度为0.1s;对用有4个功能按键,第1个按键复位00.0,第2个按键正 计时开始按钮,第3个按键复位99.9,第4个按钮倒计时开始。 2.2设计指标 了解8051芯片的的工作原理和工作方式,使用该芯片对 LED 数码管进行显示控制,实现单片机的端口控制数码管,显示分、秒,并能用按钮实现 秒表起动、停止、99.9秒、倒计时清零功能,精确到0.1秒。 要求选用定时器的工作方式,画出使用单片机控制LED 数码管显示的电路图,并实现其 硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零功能。 2.3设计要求 (1) 画出电路原理图(或仿真电路图); (2) 软件编程与调试; 2.4增加功能 增加一个"复位 00.0"按键(即清零),一个"暂停"和"开始"按键,一个"复位 99.9" 按键(用来99.9秒倒计时),一个倒计时"逐渐自减"按键。 2.5课程设计的难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时 ,一个控制倒计时)的使用;二是如何实现 LED 的动态扫描显示;三是如何对键盘输入进行编程。 2.6课程设计内容提要 本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LE D 数码管以及实验箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正 确 地进行计时,数码管能够正确地显示时间。其中本课程设计有四个开关按键:其中key2 按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key1按键按下去时数码管 清零复位为"00.0",key3 按键按下去时数码管复位为"99.9"(用于倒计时),key4 按键按下去则是数码管开始"逐渐自减"倒计时。 3 课程设计报告内容 3.1设计思路 3.1.1 系统硬件方案设计 单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的 存 储器、I\O 接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。 在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信 息输出进行控制。与单片机配套的有相应的时钟电路如图3.1所示以及扩展的存储器和 I\O 接口,使单片机应用系统能够运行。 在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。 在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显 示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配 置的键盘 和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个 LED 指示灯就可以进行处理了。在单片机应用系统在中配置的键盘可以是独立键盘,也可能 是矩阵键盘。这里我们选择独立键盘如图3.2所示。系统硬件结构整体如图3.3所示。 图3.1 时钟电路 图3.2 按键电路 图3.3 系统硬件结构框图 3.2设
课程设计任务书 学生姓名: 池孙煌 专业班级: 电信1204 指导教师: 陈德军 工作单位: 信息工程学院 题 目:基于51单片机秒表设计 初始条件: 具备Keil编程能力和Proteus仿真能力; 熟悉定时器/计数器的实现原理; 提供编程所需要的计算机一台 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要 求) 1、用定时器/计数器设计一个简单的秒表,能显示计时状态和结果。 2、进行电路实验或仿真,并使用C语言进行程序的开发。 3、完成符合学校要求的设计说明书 时间安排: 一周,其中3天程序设计,2天程序调试 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 摘要 单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体化高 科技产品,具有功耗低,安全性高,使用方便等优点。本次设计内容为以 8051 单片机为核心的秒表,它采用键盘输入,单片机技术控制。设计内容以硬件电路设计, 软件设计和制作三电路板部分来设计。利用单片机的定时器/计数器定时和计数的原理, 用集成电路芯片、LCD1602液晶以及按键来设计计时器。将软、硬件有机地结合起来,使 它拥有正确的计时、暂停清零、所计时间的存储和查看、并同时可以用液晶显示,在 现实生中应用广泛。 关键词:秒表;8051;定时器 1.概述 《单片机应用实践》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的 目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合 应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片 机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力 和能力转化为工程素质的重要阶段。 本次设计内容为以 8051 单片机为核心的秒表,它采用键盘输入,单片机技术控制。设计内容以硬件电路设计, 软件设计和制作三电路板部分来设计。利用单片机的定时器/计数器定时和计数的原理, 用集成电路芯片、LCD1602液晶以及按键来设计计时器。将软、硬件有机地结合起来,使 它拥有正确的计时、暂停清零、所计时间的存储和查看、并同时可以用液晶显示。 2.理论分析 2.1 设计内容 开始时,显示"00:000",按下按钮1后开始从0计时,显示精度为0.001s;共有5个功 能按键,第1个按键开始计时,第2个按键暂停,第3个按键复位,第4个按键记录时间, 第五个按键查看时间。 根据8051芯片的的工作原理和工作方式,对LCD1602液晶进行显示控制,并能用按钮 实现秒表起动、停止、复位、所计时间的存储和查看、清零功能,精确到0.001秒。 要求选用定时器的工作方式,画出使用单片机控制LCD1602液晶显示的电路图,并实 现其硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零功能。 2.2 具体步骤 单片机电子秒表需要解决三个主要问题: 一是有关单片机定时器的使用; 二是如何实现LCD1602液晶的显示; 三是如何对键盘输入进行编程。 定时器:51有4种工作方式,本方案采用工作方式1,即为16位定时器。在高八位和低 八位分别置数。由于定时器做的是加法计数,则应该将要定时的数以补码的形式,存放 在定时器中。 LCD1602液晶:液晶用RS、RW、EA三个控制端口进行显示等控制。D0- D7口分别接单片机的P0并行口,进行数据的传输。液晶的具体显示方式及其时序图在其 资料中进行查阅并应用。 键盘:键盘函数可以作为一个子程序,在main函数中循环查找调用,根据按键的功能 ,我们在按键中写入相应的程序,在按键1中开中断,并且对定时器进行设初值。即可实 现开始计时。在按键2中关中断,则可实现计时暂停。按键3即为复位键,则可复位为初 始值00:000。按键4即为记录键,对时间进行记录。按键5即为查看键,对所记录的时间 进行查看。 3 程序设计 3.1设计思路 单片机应用系统由硬件系统和软件系统两部分组成。硬件系统是指单片机以及扩展的 存储器、I\O 接口、外围扩展的功能电路。软件系统包括监控程序和各种应用程序。 在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信 息输出进行控制。与单片机配套的有相应的时钟电路如图3.1所示以及扩展的存储器和 I\O 接口,使单片机应用系统能够运行。 在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。 在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显 示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配 置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键 和几个 LED 指示灯就可以进行处理了。在单片机应用
要在51单片机的时分秒秒表实现中断暂停启动复位功能,可以在主函数中通过按键输入来实现。具体的代码示例如下: ```c // 定义时分秒变量 unsigned int hour = 0; unsigned int minute = 0; unsigned int second = 0; // 定义计数器变量 unsigned int counter = 0; // 定义计时器状态变量,0表示计时暂停,1表示计时运行 unsigned int timer_state = 1; // 定义中断服务函数 void timer0_isr() interrupt 1 { if(timer_state) { // 将计数器的值加1 counter++; // 判断秒数是否达到60秒 if(counter >= 60) { counter = 0; second++; // 判断分钟是否达到60分钟 if(second >= 60) { second = 0; minute++; // 判断小时是否达到24小时 if(minute >= 60) { minute = 0; hour++; } } } } } // 主函数中初始化定时器和中断,以及按键输入 void main() { // 初始化定时器0为16位定时器,工作模式1,计数器初值为0xFFFF-5000 TMOD = 0x01; TH0 = 0x50; TL0 = 0x00; // 使能定时器0中断 ET0 = 1; // 开始定时器0计数 TR0 = 1; // 初始化按键输入口 P3 = 0xFF; // 主循环中处理按键输入 while(1) { // 判断是否按下暂停/启动键 if(P3_0 == 0) { // 等待按键弹起 while(P3_0 == 0); // 切换计时器状态 timer_state = !timer_state; } // 判断是否按下复位键 if(P3_1 == 0) { // 等待按键弹起 while(P3_1 == 0); // 将时分秒和计数器清零 hour = 0; minute = 0; second = 0; counter = 0; } // 读取时分秒的值 unsigned int h = hour; unsigned int m = minute; unsigned int s = second; // 进行其他操作 // ... } } ``` 在上述代码中,通过按键输入来实现计时器的暂停/启动复位功能。按下暂停/启动键可以切换计时器状态,按下复位键可以将时分秒和计数器清零。在中断服务函数 `timer0_isr()` 中,只有当计时器处于运行状态时才会更新时分秒变量。这样就可以实现中断暂停启动复位功能的时分秒秒表了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1-0-1 C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值