设计一个基于51单片机的秒表计时器,实现如下功能: 计时器的计时精度为百分之一秒,即0.01秒。 计时时间显示格式:hh.mm.ss.SS。其中:hh表示小时数,mm表示分钟数ss表示秒数SS表示百分秒数如“1.59.59.99”表示1小时59分59秒99分秒的代码

时间: 2023-12-10 19:38:04 浏览: 43
以下是基于51单片机的秒表计时器的代码: ``` #include <reg51.h> #define uint unsigned int uint tick_count = 0; // 计时器累计计数器 uint ss = 0; // 秒 uint mm = 0; // 分钟 uint hh = 0; // 小时 void delay_ms(uint x) // 延时函数,x为毫秒数 { uint i, j; for (i = x; i > 0; i--) { for (j = 112; j > 0; j--); } } void timer0_init() // 定时器0初始化函数 { TMOD |= 0x01; // 设置为模式1(16位定时器) TH0 = 0xFC; // 定时器初值为65536-10000=0xFC18 TL0 = 0x18; ET0 = 1; // 开启定时器0中断 TR0 = 1; // 启动定时器0 } void timer0_isr() interrupt 1 // 定时器0中断服务函数 { TH0 = 0xFC; TL0 = 0x18; tick_count++; // 计时器累计计数器加1 } void display_time() // 显示时间函数 { uint i; uint buf[8] = {0}; // 字符串缓存 buf[0] = hh / 10; buf[1] = hh % 10; buf[2] = mm / 10; buf[3] = mm % 10; buf[4] = ss / 10; buf[5] = ss % 10; buf[6] = tick_count / 10 % 10; buf[7] = tick_count % 10; for (i = 0; i < 8; i++) { P0 = buf[i]; P2 &= 0x0F; P2 |= i << 4; delay_ms(2); } } void main() { timer0_init(); while (1) { if (tick_count >= 10000) { // 每10000次定时器中断为1秒 tick_count = 0; ss++; if (ss >= 60) { ss = 0; mm++; if (mm >= 60) { mm = 0; hh++; if (hh >= 24) { hh = 0; } } } } display_time(); // 显示时间 } } ``` 在此代码中,我们使用了定时器0来实现精确的计时。定时器0的时钟源为系统时钟12MHz,设置为模式1(16位定时器),初值为65536-10000=0xFC18,即定时10毫秒。每次定时器0中断服务函数被调用时,计时器累计计数器加1。当计时器累计计数器达到10000时,表示已经过去了1秒,此时秒数加1;当秒数达到60时,秒数清零,分钟数加1;当分钟数达到60时,分钟数清零,小时数加1;当小时数达到24时,小时数清零。 在显示时间函数中,我们将时间按照格式转换成字符串存储在缓存中,然后通过P0口输出数字,通过P2口控制数码管的位选。为了使数码管能够正常显示,我们还需要在每个位选之间加入一定的延时,这里我们使用了一个简单的延时函数```delay_ms```。

相关推荐

最新推荐

recommend-type

用软件延时实现00-59秒单片机计时器

用软件延时实现00-59秒单片机计时器:在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。
recommend-type

基于单片机的篮球比赛计时记分系统的设计

本文基于单片机的篮球比赛计时记分系统的设计,以89C5l单片机为核心器件,组成一个电子计时记分系统;系统显示由12位数码管组成,分别为记分牌与倒计时牌;可随时记分,随时暂停,随时开始。
recommend-type

基于单片机篮球赛计时计分器毕业设计.doc

篮球比赛的计时计分系由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感...
recommend-type

基于STC89C51单片机的出租车计费器设计

本文以单片机STC89C51 为核心设计一款出租车计费器, 使能够实现里程及对应价格的显示,由于采用芯片的自动定时计数,所以能够准确的计算出总的行车里程并能转换成对应的价格来,这样能够避免出租车司机作弊的可能性...
recommend-type

基于单片机的噪声报警器的设计

本设计由声音传感器和光敏传感器检测周围环境是否明亮和安静,通过51单片机做出判断后,控制串口向语音模块发送语音数据使扬声器发出语音提示或改变引脚高低电平使发光二极管导通。 附有电路图及程序源码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。