51单片机DIY_秒表计时器
计时表量程: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
51单片机DIY_秒表计时器相关推荐
- 51单片机 简易秒表计时器(100秒) 小数点后四位
51单片机制作简易秒表,精确到小数点后四位(即0.0001s)的制作,使用到单片机定时器部分,数码管部分. 程序上分为: 1.延时函数 用来延时让数码管动态显示 2.定时器/计数器初始化函数 3.显示 ...
- 59s计时器C语言程序步骤详解,51单片机00-59秒计时器 0-59s Timer
51单片机00-59秒计时器 0-59s Timer 1. 实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个 ...
- 单片机秒表c语言,单片机制作秒表计时器(c语言)
利用计数器中断,外部中断(按钮)编写的机遇c语言的秒表计时器 利用单片机制作秒表计时器 (c语言) #include//包含单片机对应的头文件 int MM=0,SS=0,MS=0; int time ...
- 51单片机中断与计时器
文章目录 1.配置下图中各寄存器 1. 定时器/计数器控制寄存器TCON 2.定时器.计数器模式控制寄存器TMOD 3.TH0及TL0 2.中断设置 二.中断程序 51单片机中断与计时器 # 一.定时 ...
- c51单片机秒表程序c语言,利用51单片机制作秒表的详细过程
前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才 ...
- 基于51单片机实现秒表_☆往事随風☆的博客
基于51单片机实现秒表 前言 一.实现功能 二.关键程序 (1)key函数 (2)display函数 (3)中断函数 三.完整程序 四.仿真 五.效果展示 六.项目地址 前言 基于51单片机实现一个共 ...
- 基于51单片机的秒表系统设计(源代码+Proteus仿真图)
目录 总体设计 晶体震荡电路 复位电路 按键控制电路 LCD1602显示电路 蜂鸣器电路 Proteus仿真图调试结果 源代码: Proteus仿真提取链接 总体设计 本设计是采用AT89C51单片机 ...
- 基于单片机的秒表计时器系统设计(#0400)
当今社会在很多比赛中,都要用到时间的长短来衡量比赛的结果.本设计是一个利用单片机控制的多功能秒表系统. 功能描述 1.采用51单片机作为控制芯片: 2.数码管前两位显示分钟,后两位显示秒: 2.正计时 ...
- 基于51单片机的倒计时器秒表定时器数码管显示原理图方案设计
系统的功能分析 (末尾附文件) 框架图: 原理图: 声光报警电路(低电平有效)设计 有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电 ...
最新文章
- Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
- Windows 技术篇-利用telnet方法ping端口通不通实例演示,如何测试服务器端口是否启用,windows启用telnet功能
- sqlite4java下载_使用sqlite4java的UnsatisfiedLinkError,没有sqlite4java-osx-amd64
- C#坏习惯:通过不好的例子学习如何制作好的代码——第5部分
- windows Azure平台开发
- 顾樵数学物理方法_圣彼得堡国立大学硕士研究生:物理与天文学
- NSSA区域和Totally NSSA区域
- error: Exited sync due to fetch errors
- 愚人节,这样的微信公众号图文排版方式你见过吗?
- oracle dba培训教程 第九章 创建数据库
- 机器学习笔记——从手写数字识别开始
- 当乐app官方下载android,当乐下载安卓最新版_手机官方版免费安装下载_豌豆荚
- c basic library framework - simplec 2.0.0
- 洛谷P1135:奇怪的电梯(lift)
- java API学习记录
- SMETA验厂咨询,SMETA参考实践指南BPG(本文件)的制作旨在提供一份一致的全球审核程序
- 解决Android10和Android11创建文件失败问题
- 低频工业读写器|读卡器|阅读器CK-LR03-A01与FX1N三菱PLC联机应用手册
- Java中的CAS操作
- java web毕业答辩_基于JAVA的WEB页面设计毕业答辩.ppt