蓝桥杯单片机之模块代码《秒表》

ops/2024/9/23 10:18:29/

文章目录

  • 定时器/计数器
    • 1.工作原理
    • 2.总代码
  • 省赛代码传送门


定时器/计数器

1.工作原理

  定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断请求,从而实现定时或计数功能的外设。定时器的基本工作原理是进行计数。

  举个栗子:你可以把定时器比喻成一个装了水的瓶子,每一次计数理解成向瓶子里面丢一个石子,当丢的石子足够多时,瓶子里面的水就会溢出,产生中断请求。

  当作为定时器使用时,计数信号的来源是周期性的内部时钟频率,在单片机的内部,有一个频率为12MHZ的晶振,可以稳定的产生的产生一个周期为12MHZ的时钟信号,那么定时器就可以实现在每隔一段时间加一,实现定时。我们可以来简单的计算一下一个定时器的溢出周期:
单片机的时钟周期:T=1/f(sys) = 1/12MHZ = 0.083us 这是一个时钟周期
单片机的指令周期:单片机的指令周期 = 12*时钟周期=12 * 0.083 = 1us;即定时器在工作的状态下每1us计数器就会加一(每1us向瓶子里面丢一个石子)。

  那么最大可以加到多少呢?我们这里以定时器0为例:在单片机内部有两个寄存器TH0和TL0,用来给定时器0计数,那么计数的最大值就是2^16-1 = 65535(最多丢65535个石子,瓶子里的水就会溢出),也就是说定时器可以对时钟信号从0开始计数一直到65535,然后溢出产生中断请求。那么最大的定时周期就是1us*65535 =65.535ms;

  当然:65.535ms的定时时间对于我们也许有一些鸡肋,但是我们可以认为的设置定时器初始的值(即可以设置这个瓶子里原来有多少石子),来控制定时的时间。

举个栗子:我们需要定时1ms,则我们可以设置:
TH0 = (65535-1000)/256 = 0xFC;
Tl0 = (65535-1000)%256 = 0x18;
这样,我们就可以控制定时器每1ms溢出一次

  PS:STC15系列单片机有两种计数模式,一种是12T模式,每12个时钟周期加一,与传统的8051单片机相同;另一种时1T模式,每一个时钟信号加一,速度时12T模式的12倍,但一般默认是12T模式。

  作为计数器使用时计数信号的来源是非周期性的外部输入信号。外部引号可以有对应的引脚的脉冲信号输入,其对应关系如下:
定时器0—>P3.4; 定时器1—>P3.5;定时器2—>P3.1;

2.总代码

#include<stc15f2k.h>
char dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
char disdula[]={0,0,0,0,0,0,0,0};
int diswei=0;
int s,f,m,a;void buzz(bit on)
{P2=((P2&0x1f)|0xa0);if(on)P0=0x40;elseP0=0x00;P2&=0x1f;P2=((P2&0x1f)|0x80);P0=0xff;P2&=0x1f;
}void din()
{TMOD=0X10;TH1=(65536-110592/12)/256;TL1=(65536-110592/12)%256;ET1=1;EA=1;TR1=1;
}void display()
{P2=((P2&0x1f)|0xe0);P0=0xff;P2&=0x1f;P2=((P2&0x1f)|0xc0);P0=1<<diswei;P2&=0x1f;P2=((P2&0x1f)|0xe0);P0=dula[disdula[diswei]];P2&=0x1f;if(diswei++>=8)diswei=0;
}void display_1()
{disdula[0]=s/10%10;disdula[1]=s/1%10;disdula[2]=10;disdula[3]=f/10%10;disdula[4]=f/1%10;disdula[5]=10;	disdula[6]=m/10%10;disdula[7]=m/1%10;
}void qa() interrupt 3
{TH1=(65536-11059/12)/256;TL1=(65536-11059/12)%256;	display();a++;if(a>=1000){a=0;m++;if(m>=60){m=0;f++;if(f>=60){f=0;s++;if(s>=24){s=0;}}}}
}void main()
{din();buzz(0);while(1){display_1();}}

省赛代码传送门

第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛
第八届蓝桥杯单片机省赛
第九届蓝桥杯单片机省赛
第十届蓝桥杯单片机省赛
第十一届蓝桥杯单片机省赛


http://www.ppmy.cn/ops/26127.html

相关文章

Stm32CubeMX 为 stm32mp135d 添加 spi

Stm32CubeMX 为 stm32mp135d 添加 spi 一、启用设备1. spi 设备添加2. spi 引脚配置2. spi 时钟配置 二、 生成代码1. optee 配置 spi 时钟和安全验证2. linux spi 设备 dts 配置 bringup 可参考&#xff1a;Stm32CubeMX 生成设备树 一、启用设备 1. spi 设备添加 选中spi设…

error loading module ‘cjson‘ from file ‘.\cjson.dll‘:找不到指定的程序。

编译lua-cjson 项目&#xff1a;https://github.com/openresty/lua-cjson 克隆下来后使用vs2022创建工程 添加三个文件即可 fpconv.c lua_cjson.c strbuf.c 配置项目工程 lua头文件目录 链接器lua库文件目录 配置lua头文件 luaxxx/src 配置lua库文件 luaxxx.lib 编译d…

selenium-webdriver 设置宽高 node

在使用 Node.js 的 Selenium WebDriver 进行自动化测试时&#xff0c;你可能会需要为浏览器窗口设置特定的宽度和高度。以下是如何设置浏览器窗口大小的示例&#xff1a; 首先&#xff0c;确保你已经安装了 selenium-webdriver 包。如果还没有安装&#xff0c;可以通过运行以下…

数据挖掘之基于Lightgbm等多模型消融实验的信用欺诈检测实现

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在当前的金融环境中&#xff0c;信用欺诈行为日益增多&#xff0c;给金融机构和消费者带来了巨大的损…

[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200

题目 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N,接 下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成 本各不相同&#xff0c;且有些节点之间已经存在光纤相连&#…

react中解决 Capture Value 问题

解决 Capture Value 问题通常涉及确保你的函数或 Hook 能够访问到最新的状态或 props。这里有几种常见的方法&#xff1a; 使用依赖数组&#xff1a; 对于 useEffect、useCallback 和 useMemo&#xff0c;你可以通过在依赖数组中列出所有外部依赖来确保捕获的值是最新的。当依赖…

Python urllib 爬虫入门(1)

本文主要为Python urllib类库函数和属性介绍及一些简单示例。 目录 urllib爬取网页 简单示例 写入文件 其他读取方法 readline函数 readlines函数 response属性 当前环境信息 返回状态码 返回url地址 对url进行编码与解码 写入文件 总结 urllib爬取网页 通过pyth…

WinDbg分析崩溃dump

1. 可以用everything软件工具搜索本机。如果没有windbg的话&#xff0c;可以去下载一个(根据需求选择x64或x86)。现在微软不提供单独的windbg下载&#xff0c;可以下载一个完整的windows sdk&#xff0c;在安装时只选择windbg即可。 2. 双击打开WinDgb.exe软件&#xff0c;Fil…