51单片机实验03-单片机定时/计数器实验

目录

一、实验目的

二、实验说明

1、51单片机有两个16位内部计数器/定时器(C/T, Counter/Timer)。

2、模式寄存器TMOD

1) M1M0工作模式控制位;

2) C/T定时器或计数器选择位:

3)GATE定时器/计数器运行门控位:

3、控制寄存器TCON

4、定时器T0的应用

5、定时器T0工作于模式1时初值的计算示例

三、电路原理图

四,前期知识 

 1,理论

2,实现小灯隔一秒亮起

1)效果

2)代码 

五、实验内容

1、数码管要求:

2、倒计时要求:

 1)效果

2)代码


一、实验目的


1.学习51单片机内部定时/计数器的使用和编程方法;
2.掌握单片机控制数码管进行数字和字母显示的方法。

二、实验说明


1、51单片机有两个16位内部计数器/定时器(C/T, Counter/Timer)。

若是对内部晶振驱动时钟进行计数,则是定时器;若是对8051的输入引脚的脉冲信号进行计数,则它是计数器。定时器实际上也是工作在计数方式下,只不过是对固定频率的脉冲计数。由于脉冲周期固定,则由计数值可以计算出相应时间,即定时功能。
定时器有关的寄存器有模式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作模式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。


2、模式寄存器TMOD

1) M1M0工作模式控制位;


2) C/T定时器或计数器选择位:


       C/T=1时,为计数器;  C/T =0时,为定时器。


3)GATE定时器/计数器运行门控位:


  当GATE=1时, C/T的启动受双重控制,即要求INT0 (或INT1)引脚为高电平且TR0(或TR1 )置 1 时, 相应的C/T才被选通工作。
若GATE=0, C/T的启动仅受TR0 (或 TR1)控制,即置1, C/T就被选通, 而不管 INT0 (或 INT1)的电平是高还是低。 


3、控制寄存器TCON

TF0、TF1分别是定时器/计数器T0、 T1 的溢出中断标志位, 加法计数器溢出时置1, 申请中断, 在中断响应后自动复0。TF产生的中断申请是否被接受, 还需要由中断是否开放来决定。TR1、TR0 分别是定时器/计数器T1、T0的运行控制位,通过软件置1 后, 定时器/计数器才开始工作,在系统复位时被清0。


4、定时器T0的应用


在使用51系列单片机的C/T前,应对它进行编程初始化,主要是对TCON和TMOD编程,还需要计算和装载C/T的计数初值。
一般地,定时器T0的使用需完成以下4个步骤:


第一步:设置特殊功能寄存器TMOD,配置好工作模式;
第二步:设置计数寄存器TH0和TL0的初值;
第三步:设置TCON,通过TR0置1来让定时器开始计数;
第四步:判断TCON寄存器的TF0位,监测定时器溢出情况。


5、定时器T0工作于模式1时初值的计算示例


写程序之前,要先学会计算如何用定时器定时时间。假如定时20ms:
对于标准架构下的51单片机,晶振是11.0592M时,则时钟周期就是(1/11059200)s,机器周期是(12/11059200)s。
现需要定时20ms,也就是0.02 秒。假设要经过x个机器周期得到0.02 秒,下面来具体计算一下:
 x*12/11059200=0.02,得到 x= 18432。16 位定时器的溢出值是65536(因65535 再加1才是溢出),于是我们就可以这样操作,先给TH0 和TL0一个初始值,让它们经过18432个机器周期后刚好达到65536,也就是溢出,溢出后可以通过检测TF0的值得知,就刚好是0.02秒。
那么初值y = 65536-18432=47104,转成十六进制就是0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。

如果定时器还不会用,请跳转到下面这篇文章中进行学习👇

 51单片机实验03-定时器T0/T1实现流水灯从左到右再从右到左-CSDN博客

三、电路原理图

四,前期知识 

 1,理论

电子书 :

 链接:https://pan.baidu.com/s/1QEDpuNhcYVB6lmxFNW2z4Q?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V1的分享

2,实现小灯隔一秒亮起

1)效果

使用定时器让小灯隔一秒亮起

从上面可以看到,小灯在奇数秒亮起来,偶数秒暗下去,其实就是小灯的一亮一灭都各花费一秒钟时间的原因。

2)代码 

#include<reg52.h>  // 头文件,包含有众多寄存器的地址
sbit led=P0^0;
sbit addr0=P1^0;
sbit addr1=P1^1;
sbit addr2=P1^2;
sbit addr3=P1^3;
sbit enled=P1^4;
void main(){ unsigned  char count=0;  // 统计溢出次数
enled=0;
addr3=1;
addr2=1;
addr1=1;
addr0=0;
TMOD=0x01;
TH0=0xB8;
TL0=0x00;
TR0=1;
while(1){if(TF0==1){TF0=0;TH0=0xB8;TL0=0x00;  count++;if(count==50){count=0;led=~led;}}
}
}

五、实验内容


利用定时器T0产生定时时钟,由P0口控制数码管的七个段abcdefg和小数点dp,完成10秒倒计时显示。

具体要求如下:


1、数码管要求:

学号末位是1-6的分别控制数码管LEDDS1-LEDS6, 学号末位是7、8、9、0的分别控制数码管LEDDS1-LEDS4;

(我学号为4,所以使用的是100,如果是1的就用001)

addr2=1;    // 控制数码管leds4
addr1=0;
addr0=0;


2、倒计时要求:


从本人学号的末位数开始,例如学号2132331131的末位是1,则需完成1-0-9-8-7-6-5-4-3-2并循环的倒计时。

例如我的学号是4,那么leds4这只数码管就需要显示:4-3-2-1-0-9-8-7-6-5

 1)效果

使用数码管从学号开始倒计时,并一直循环

2)代码

#include<reg52.h>  // 头文件,包含有众多寄存器的地址
//sbit led=P0^0;
sbit addr0=P1^0;
sbit addr1=P1^1;
sbit addr2=P1^2;
sbit addr3=P1^3;	     
sbit enled=P1^4; 
unsigned  char  code ledChar[]={    // 晶体管用于显示0~f的真值表
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
void main(){  
unsigned char i=0;
unsigned char count=0;
unsigned char xuehao=4;	    // 如果想要从其它数字开始,就修改这里
unsigned char j=0;	// 用于后几位数字
enled=0;
addr3=1;
addr2=1;    // 控制数码管leds4	,如果要修改成控制leds6,则addr2=1,addr1=1;0
addr1=0;
addr0=0;
TMOD=0x01;   
TH0=0xB8;   // 定时20ms
TL0=0x00;
TR0=1;
while(1){if(TF0==1){TF0=0;  TH0=0xB8;TL0=0x00;count++;if(count==50){   // 1s时间到count=0;if(i<=xuehao){  P0=ledChar[xuehao-i];	 }   // 4-3-2-1-0else if(i>xuehao){	 // 学号4 i=5//9-8-7-6-5P0=ledChar[xuehao+10-i];}i++;	 if(i>10){	  // 10个数字的计数i=0;	      // 让i再从0开始}}}	
} 
}

 

 有问题请在评论区留言或者是私信我,一天8h在线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309401.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python零基础从小白打怪升级中~~~~~~~模块+异常+Pycharm的debug调试

第十节&#xff1a;模块异常Debug 一、Python模块 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;模块能定义函数&#xff0c;类和变量&#xff0c;模块里也能包含可执行的代码。 1、导入模块 导入模块的5中方式 import 模块名fr…

C++ 之 【类与对象】从入门到精通一条龙服务 最终篇(static成员、友元、匿名对象。。。)

&#x1f4b4;到用时方恨早&#xff0c;白首方悔挣的少 车到山前没有路&#xff0c;悬崖勒马勒不住 一、再谈构造函数 1.构造函数体赋值 2.初始化列表 3.explicit关键字 二、Static成员 1.概念 2.特性 三、友元 1.友元函数 2.友元类 四、内部类 五、匿名对象 六、…

结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发布到InsCode

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

模型预测控制MPC(1)—— 基础概念

文章目录 1. 历史沿革1.1 控制论1.2 最优控制与强化学习 2. 模型预测控制 1. 历史沿革 我本科做机器人的时候接触过一点控制&#xff0c;主要做了大量 PID 在嵌入式控制系统的应用&#xff1b;硕士期间研究方向是强化学习。在我调研 MPC 的过程中&#xff0c;发现它同时出现在…

云笔记小程序的实现

1.前言 云笔记, 是基于HotApp小程序统计云后台提供的api接口开发的一个微信小程序。 2.功能 离线保存笔记 云端数据同步, 更换了设备也可以找到以前的笔记 接入了好推二维码提供的数据统计工具, 可以到平台上查看用户分析、留存分析、事件分析。 3.界面效果 ***HotApp云笔…

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对…

行云堡垒国密算法应用与信创支持

一、 国密算法和信创的介绍 1.1 什么是国密算法 国密算法是国家密码管理局制定颁布的一系列的密码标准&#xff0c;即已经被国家密码局认定的国产密码算法&#xff0c;又称商用密码&#xff08;是指能够实现商用密码算法的加密&#xff0c;解密和认证等功能的技术&#xff09;…

excel里如何的科学计数法的数字转换成数值?

比如下图&#xff0c;要想把它们转换成3250跟1780&#xff0c;有什么快捷的办法吗&#xff1f; 科学计数法在excel里的格式&#xff0c;与我们常规在数学上写的有差异。这个转换可以这样做&#xff1a; 1.转换后的效果&#xff1a; 2.问题分析 题目中所附截图&#xff0c;单元…

Day96:云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸

目录 云原生-Docker安全-容器逃逸&系统内核漏洞 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE-2019-5736 runC容器逃逸(需要管理员配合触发) CVE-2020-15257 containerd逃逸(启动容器时有前提参数) 云原生-Docker安全-容器逃逸&CDK自动化 知识点&#xff1…

Redis入门到通关之Set命令

文章目录 ⛄ 概述⛄ Set类型的常见命令⛄RedisTemplate API❄️❄️ 添加Set缓存(值可以是一个&#xff0c;也可是多个)❄️❄️设置过期时间(单独设置)❄️❄️根据key获取Set中的所有值❄️❄️根据value从一个set中查询,是否存在❄️❄️获取Set缓存的长度❄️❄️移除指定的…

云服务器安装Mysql、MariaDB、Redis、tomcat

前置工作 进入根目录 cd / 进入/user/local文件夹 上传压缩包 rz 压缩包 Mysql 1.下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-…

博途v17与winCC安装流程与踩坑记录

博途v17与winCC7.5安装教程与踩坑记录 安装教程博途安装流程第一步 注册表删除第二步 启用.NET Framework服务第三步 正式安装 winCC安装流程 博途v17与winCC安装记录win11家庭版 安装教程 首先说明&#xff0c;本文安装针对的是TIA portal V17 (64bit)与winCC 7.5SP2。安装在…

基于ollama搭建本地chatGPT

ollama帮助我们可以快速在本地运行一个大模型&#xff0c;再整合一个可视化页面就能构建一个chatGPT&#xff0c;可视化页面我选择了chat-ollama&#xff08;因为它还能支持知识库&#xff0c;可玩性更高&#xff09;&#xff0c;如果只是为了聊天更推荐chatbox 部署步骤 下载…

科研学习|科研软件——如何使用SmartPLS软件进行结构方程建模

SmartPLS是一种用于结构方程建模&#xff08;SEM&#xff09;的软件&#xff0c;它可以用于定量研究&#xff0c;尤其是在商业和社会科学领域中&#xff0c;如市场研究、管理研究、心理学研究等。 一、准备数据 在使用SmartPLS之前&#xff0c;您需要准备一个符合要求的数据集。…

1.MMD模型动作场景镜头的导入及视频导出

界面介绍 MIKUMIKUDANCE926版本 MMD的工具栏模型骨骼帧的窗口&#xff0c;在不同时间做不同动作&#xff0c;可以在这里打帧操作时间曲线操作窗口&#xff0c;控制模型两个动作之间的过渡模型操作窗口&#xff0c;导入模型选择模型相机操作&#xff0c;控制相机远近&#xf…

详解拷贝构造

拷贝构造的功能 写法&#xff1a; 拷贝构造函数的参数为什么是引用类型 系统自动生成的拷贝构造函数 拷贝构造的深拷贝与浅拷贝 概念 浅拷贝&#xff1a; 深拷贝 小结 拷贝构造的功能 拷贝构造函数可以把曾经实例化好的对象的数据拷贝给新创建的数据 &#xff0c;可见…

计算机网络常问面试题

一.HTTPS是如何保证安全传输的 https通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。 客户端向服务端发送数据之前&#xff0c;需要先建⽴TCP连接&#xff0c;所以需要先建⽴TCP连接&#xff0c;建⽴完TCP连接后&#xff0c;服务端会先给客户端发送公钥…

LabVIEW直流稳定电源自动化校准系统

LabVIEW直流稳定电源自动化校准系统 直流稳定电源正向着智能化、高精度、多通道、宽量程的方向发展。基于LabVIEW开发环境&#xff0c;设计并实现了一种直流稳定电源自动化校准系统&#xff0c;以提升校准过程的整体效能&#xff0c;实现自动化设备替代人工进行电源校准工作。…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序&#xff0c;以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上&#xff0c;会增加自己的理解、看法&#xff0c;希望本文章能够在您的学习中提供帮助。 如有错误的地方&#xff0c;欢迎指出纠错&…

SHARE 203S PRO:倾斜摄影相机在地灾救援中的应用

在地质灾害的紧急关头&#xff0c;救援队伍面临的首要任务是迅速而准确地掌握灾区的地理信息。这时&#xff0c;倾斜摄影相机成为了救援测绘的利器。SHARE 203S PRO&#xff0c;这款由深圳赛尔智控科技有限公司研发的五镜头倾斜摄影相机&#xff0c;以其卓越的性能和功能&#…