51单片机定时器数码管显示

news/2024/11/17 1:06:22/文章来源:https://www.cnblogs.com/helloyi/p/18550182

51单片机定时器数码管显示

本次的实现效果方式采用模拟进行,芯片为AT89C51,开发软件为keil5,proteus
通过定时器实现数码管0-99秒表计数

@

目录
  • 上代码
  • 效果展示
  • 介绍

上代码

代码如下:

#include  "reg51.h"  //包含头文件reg51.h,定义了51单片机的专用寄存器unsigned char count=0,miao=0;      //对50ms定时时间进行计数void timer_1() interrupt 3 //定时器T1z中断,T1的中断类型号为3{  TH1=(65536-50000)/256;   //重新设置T1计数初值高8位TL1=(65536-50000)%256;   //重新设置T1计数初值低8位if(count==20)              //50ms*20,1s时间到{count=0;                 //50ms计数器清0if(miao==100){miao=0;}else{miao++;}  //miao计数到100,则从0开始计数}else{count++;//如果count等于1s时为0,否则count加一}
}
void disp(unsigned char i)//将i的值显示在两个静态连接的数码管上
{
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
//定义0~9显示码,共阳极数码管
P1=led[i/10];   //显示i高位
P2=led[i%10];   //显示i低位}
void main()					//主函数
{TMOD=0x10;         	   	//设置T1为工作方式1TH1=(65536-50000)/256;   //设置T1计数初值高8位,定时时间50msTL1=(65536-50000)%256;   //设置T1计数初值低8位ET1=1;                      //开放T1中断允许EA=1;                       //开放总中断允许TR1=1;                      //启动T1开始计数  while(1){disp(miao);               //显示秒计数器值}
}

效果展示

keil5开发界面
在这里插入图片描述

proteus界面:
在这里插入图片描述

介绍

使用定时器的好处是无论它们工作于计数方式或计时方式,计数时都不占用CPU时间,因此定时器、计数器的工作并不影响CPU其他工作的执行,这就是采用定时、计数器的优点。

中断意思:

当程序在运行时,定时器同时运行,当开始中断时,执行中断程序,其他程序暂停运行

51内核单片机中,T1和T0都是增量计数器,因此不能直接将要计数的值作为初值放入寄存器中,而是将计数的最大值减去实际要计数的值的差存入寄存器中。可采用如下定时器/计数器初值计算公式:计数初值=2n-计数值 式中,n为由工作方式决定的计数器位数。
例如,当 T0工作于方式1时,n=16,最大计数值为65536,若要计数10000次,需将初 值设置为65536-10000=55536。如果单片机采用的晶振为11.0592MHz,则计数一次需要的时间为12分频后的一个脉冲周期

中断函数

interrupt 后面的数字用于指定该中断函数是为哪一个中断源编写的。不同的数字代表不同的中断源。例如:

  • 0:通常表示外部中断0。这是单片机的一个外部引脚上的中断,当该引脚上的电平发生变化(如从高到低或从低到高)时,会触发此中断。
  • 1:通常表示定时器/计数器T0的中断。当定时器/计数器T0溢出(即计数达到其最大值后)时,会触发此中断。
  • 2:通常表示外部中断1。这与外部中断0类似,但它是另一个外部引脚上的中断。
  • 3:通常表示定时器/计数器T1的中断。这与T0的中断类似,但它是另一个定时器/计数器的中断。
  • 4:在某些单片机中,可能表示串口中断。当串口接收到数据或发送数据时,会触发此中断。

在写定时器程序时,以下时对代码解释

EA=1;//开启总开关

ET0=1;//开启T0开关

TMOD=0x01; //将TMOD寄存器的低4位设置为0x01,表示定时器T0工作在方式1(16位定时器/计数器模式)

TH0=(65536-50000)/256; //设置定时器初值,定时时间50ms,12MHZ/12,50*1000,高八位

TL0=(65536-50000)%256;//低八位

定时器溢出时应进行重新赋值

定时器中断是由定时器计数器溢出而引发的中断。在51单片机中,定时器是一个内部计数器,它在时钟信号的作用下进行计数。每当一个时钟周期到来时,计数器就会加1。当计数器的值达到预设的最大值(即溢出值)时,会产生一个溢出信号,该信号会触发中断系统,使CPU跳转到中断服务程序去执行。中断服务程序执行完毕后,CPU会返回到原来被中断的地方,继续执行原来的程序。

二、51单片机定时器的配置
选择定时器:51单片机通常包含两个可编程的定时器/计数器T0和T1。这两个定时器都可以配置为定时器模式或计数器模式。
设置工作模式:定时器有多种工作模式可选,如13位定时器/计数器、16位定时器/计数器、8位自动重装模式等。通过配置TMOD寄存器来选择合适的工作模式。
计算并设置初值:定时器的初值决定了定时器从哪个数开始计数,从而决定了定时时间的长短。初值的计算需要根据定时器的位数、时钟频率和所需的定时时间来确定。一旦设置了初值,定时器就会在时钟信号的作用下从初值开始计数。
启动定时器:通过设置TR0或TR1寄存器来启动定时器。当TR0或TR1为1时,定时器开始计数;当TR0或TR1为0时,定时器停止计数。
三、定时器中断的实现
打开中断:要使定时器中断能够发生,首先需要打开全局中断和定时器中断。这通过设置EA(全局中断允许位)和ET0/ET1(定时器0/1中断允许位)来实现。
编写中断服务程序:中断服务程序是当定时器溢出时CPU要执行的代码。在51单片机中,通常使用特定的中断向量号来标识不同的中断源,并通过编写对应的中断服务函数来处理中断。中断服务程序通常包括保存现场、处理中断事件、恢复现场和返回指令等部分。
处理中断事件:在中断服务程序中,需要根据实际需求处理中断事件。例如,可以更新计数器、控制外设或执行其他任务。

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

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

相关文章

idea安装激活教程(2024.x.x,亲测有效)

前言 很多朋友简信告诉我,看不懂纯文字。好吧,如今重要部分带图片,自行阅读! 第一步 前往idea的官网,下载idea 2024.1.5(博主亲测版本)下载完成后,进行安装,next,安装完成 首次打开,会要求输入激活码才能使用 第二步 点击获取补丁文件 保存下载之后 进入文件夹*** /Je…

基于字符数组s[]的s,s

看这样一段代码: #include <iostream> using namespace std;int main() {const char s[] = "hello";cout << "Array content (s): " << s << endl; // 输出字符串内容cout << "Address of s (&s): " &…

UE5 打包安卓后出现permission required you must approve this premission in app settings: storage弹窗

论坛里面有人给出了利用UPL解决的方法但不会UPL,没有使用这个方法,而是参考了这篇知乎文章 其实都提到了在项目文件\Intermediate\Android\arm64_AndroidManifest.xml这个文件中的修改, 而在一开始的这个弹窗是其中的这条语句<meta-data android:name="com.epicgame…

20222405 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 经过高强度的攻击渗透操作,我现在已经熟练的掌握了Metasploit工具的用法,也深刻体会到漏洞的可怕之处,这些漏洞会严重威胁到我们的隐私安全。 2.实验过程 (1)前期渗透 ①主机发现 输入命令msfconsole进入控制台 再search arp_sweep搜索一下成功找到 输入use 0使…

第五章

5.1 节练习 练习 5.1 空语句是最简单的语句,空语句由一个单独的分号构成。如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句,空语句什么也不做。 一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。使用空语句…

AI独立开发完全指南:从Cursor到变现的实战攻略

大家好,我是加加,今天给大家分享的是用 cursor 实现复杂创意想法。近期参加了圈子里的 cursor 培训,当了回教练,以下是我分享的那节课的主要内容,分享给初学者想要入门AI独立开发的朋友。这几乎就是逐字稿了,但是生生的让我给读成了磕磕绊绊,我这口头表达能力啊,真是太…

OCS助手配置

使用准备:装有Edge浏览器的电脑鼠标眼睛一双灵活的手一颗勇敢不放弃的心♥安装流程 1.安装油猴插件 2.安装油猴脚本-OCS助手 3.配置OCS助手 4.启动刷课 教程开始 1.安装油猴插件打开Edge浏览器的主页2.点击三个点点点击扩展3.点击"打开MIcrosoft Edge加载项"4.在左边…

测试笔记1

测试笔记1 ​​

Win11安装kali子系统

Win11安装kali子系统 1. 开启服务,更新wsl2 启用或关闭Windows功能 -> 开启适用于Linux的Windows子系统wsl --update #更新到wsl2`wsl --status #检查一下`2. 安装kali,换源配置工具 wsl --install kali-linux #安装kali-linux`换源中科大源,会变快很多,将官方源…

002.测试2

002.测试2 ​​ ‍