51单片机DIY_秒表计时器

news/2024/11/20 23:14:08/

计时表量程:00:00:00--59:59:99(min:s:10ms)

可存储和回查5组数据。

代码:

#include<reg52.h>
#include<string.h>
/***********************定义管脚**********************/
#define seg P0
#define bitt P2typedef unsigned char u8;
typedef unsigned int u16;sbit start = P3^1;
sbit store = P3^0;
sbit playback = P3^2;
sbit reset = P3^3;
sbit beep = P1^5;/***********************定义变量**********************/
u8 code display_bit[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
u8 code display_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
u8 time_store[5][3] = {0};
u8 i,j,k,flag;													   //*******全局变量*********//
u8 n_10ms;													   
u8 n_s;
u8 n_min;/***********************延时函数**********************/
void delay(u8 ms)												   
{u16 x,y;for(x=ms;x>0;x--)for(y=110;y>0;y--);
}/**********************嗡鸣器函数*********************/
void beep_vibrate()
{beep = ~beep;delay(1);	beep = ~beep;delay(1);
}/*********************数码管显示**********************/
void led_display(u8 num_seg,u8 num_bit)							   
{	bitt = display_bit[num_bit];seg = display_seg[num_seg];
}/****************选择时间显示位置*********************/
void time_display(u8 time_bit, u8 time_num)						   
{u8 x,y,s;s = 1;x = time_num/10;                                //分离十位y = time_num%10;                                //分离个位if(time_bit == 1){led_display(y,0);delay(s);led_display(x,1);delay(s);		}else if(time_bit == 2){led_display(y,3);delay(s);	  led_display(x,4);delay(s);	}else if(time_bit == 3){led_display(y,6);delay(s);led_display(x,7);delay(s);}else{led_display(17,2);delay(s);led_display(17,5);delay(s);}	 
}/********************不断刷新三组数字****************/
void reflash()													   
{time_display(1,n_10ms);time_display(2,n_s);time_display(3,n_min);time_display(4,0);	
}/**********************定时器T0预设******************/
void  Init_timer0()												   
{IE = 0X82;										//中断允许TMOD = 0x01;TH0 = 0x0D8;TL0 = 0x0F0;
}/************************开始函数*********************/														
void start_k1()
{if(start == 0){delay(5);if(start == 0){flag = ~flag;}while(!start);}
}/************************存储函数*********************/
void store_k2()
{if(store == 0){delay(5);if(store == 0){if(i < 5){time_store[i][0] = n_10ms;time_store[i][1] = n_s;time_store[i][2] = n_min;i++;}while(!store);}}	
}/************************回显函数*********************/
void playback_k3()
{if(playback == 0){delay(5);if(playback == 0){if(i >= 0){i = i>4?4:i;n_10ms = time_store[i][0];n_s = time_store[i][1];n_min = time_store[i][2];i--;}while(!playback);}}	
}/************************清0函数*********************/
void reset_k4()
{if(reset == 0){delay(5);if(reset == 0){TR0 = 0;Init_timer0();flag = 0;i = 0;memset(time_store,0,sizeof(time_store));//将time_store[][]二维数组的元素全部设为0n_10ms = 0;n_s = 0;n_min = 0;while(!reset);}}	
}/************************主函数**********************/
void main()														   
{seg = 0x00;Init_timer0();n_10ms = 0;										//10毫秒n_s = 0;										//秒n_min = 0;										//分钟beep = 1;										//嗡鸣器初始化flag = 0;										//flag=1时,定时器打开i = 0;										while(1)										//大循环{start_k1();						            //开始if(flag){TR0 = 1;								//打开定时器store_k2();						        //存储	}else{TR0 = 0;								//关闭定时器playback_k3();							//回显}											reset_k4();						     		//清0reflash();									//刷新一次}
}/*******************定时器服务函数*******************/
void timer0_service() interrupt 1								   
{TH0 = 0x0D8;TL0 = 0x0F0;if(n_10ms < 99){n_10ms++;}else{n_10ms = 0;if(n_s < 59){n_s++;	}else{n_s = 0;if(n_min < 59){n_min++;}else{reset_k4();	}	}}
}

仿真图 

51单片机DIY


http://www.ppmy.cn/news/615629.html

相关文章

STC8H8k64U——定时器T0(60s倒计时)

60s倒计时 #include <STC8H.H> #include "delay.h"/*74HC245*/ #define OUTPUT P0/*3——8译码器*/ sbit A0 P2^2; sbit A1 P2^3; sbit A2 P2^4;unsigned char second 60; //秒计数 unsigned char count 200; //中断200次为1秒 unsigned char code LED_7…

单片机AT89C51六位(四位和两位)数码管秒表精度0.01s带启动、暂停、清零按钮

1.设计方案 本文主要研究基于单片机的秒表设计&#xff0c;主要是控制电路设计&#xff0c;数码管显示的设计&#xff0c;和软件程序的编写。该计时采用单片机定时器精确延时&#xff0c;秒表计时精度0.01秒。有启动&#xff0c;暂停&#xff0c;复位&#xff0c;提醒等功能。…

Python基础——time模块(制作秒表、倒计时)

time模块 利用Python完成自动化的任务&#xff0c;往往需要基于特定的时间和日期运行或定时运行。Python的内置的time模块便可以实现读取系统时钟的当前时间。time模块中最常用的就是time.time()和time.sleep()。 一、获取当前时间 time.time()函数 返回1970年1月1日0点以来…

基于51单片机倒计时秒表99-00仿真设计

基于51单片机倒计时秒表99-00仿真设计 这里写目录标题 基于51单片机倒计时秒表99-00仿真设计仿真电路程序主函数数码管显示 百度云下载链接 &#xff08;源码仿真&#xff09; 仿真原版本&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C…

c语言 自动计时的秒表,c语言实现的简单秒表计时器

#include #include #include #include struct tm //定义时间结构体&#xff0c;包括时分秒和10毫秒 { int hours,minutes,seconds; int hscd; }time,tmp,total; //time用以计时显示&#xff0c;tmp用以存储上一阶段时间&#xff0c;total记总时间 int cnt; FILE* fout; //每…

蓝桥杯STM32F103RB数码管计时(秒表)

STM32F103RB数码管定时&#xff08;秒表&#xff09; 硬件单路配置TIM2及其中断代码片如下(示例)中断执行函数代码片如下(示例)seg.c(数码管)代码片如下(示例)完整工程下载>>[GitHub](https://github.com/HDJ1839822/Github.git) 实验功能&#xff1a;三位数码管实现十分…

51单片机0-99秒表计数器+60秒倒计时(数码管两位数)

51秒表计数器倒计时&#xff08;数码管两位数&#xff09; 一&#xff1a;简介 我们实践的效果是用数码管显示0~99并在按下“转换键”后&#xff0c;实现60秒倒计时&#xff0c;并用蜂鸣器报警提示&#xff0c;兼并计数器和倒计时两种功能。 主要内容包括&#xff1a; 1.认识数…

使用定时器按键扫描数码管制作一个可存储数据的秒表

目录 1.前言 1.1实验现象 1.2 项目资源 2.主要程序及解释 2.1中断中进行按键扫描 2.2 中断中进行数码管扫描 2.3中断中进行秒表的驱动 2.4主函数 1.前言 1.1实验现象 实验现象&#xff1a;按下K1并松开按键秒表开始计时&#xff0c;按下K2并松开按键秒表停止计时&…