51单片机-系列-数码管中断和定时器

embedded/2024/9/25 21:06:15/

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

 数码管

80单片机>51单片机的最小系统

  • 电源(5V)
  • 复位电路
  • 晶振(单片机的心脏
  • 如果要使用PO口,必须加4.7K-10K上拉电阻(这是因为PO口的内部没有上拉电阻
  • 如果下载程序,必须要与电脑连接的串口下载通道

电容两端的电压是不会突变的

复位分为自动复位和手动复位:

对于自动复位而言,有一个高电平要持续超过24个时钟周期,即两个机器周期,一个指令周期,24个时钟周期结束之后变成低电平(结束复位状态)

看门狗,帮助单片机更加稳定的运行,作为产品,看门狗是要打开的

 数码管的显示原理

在这张图中的a图是共阴极,b图是共阳极,对于共阴极而言,我们需要给高电平那边给1,对于共阳极而言,我们需要给低电平那边给0,来让他们显示。

 共阴数码管列表0-9

										0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

在这里,我们加上了code,这代表着我们告诉编译器,将此数组存放在程序存储区,而不是放在SRAM中 

接下来,我们就用这个实现一下数码管的简单代码。

#include<stc89c5xrc.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define beep P23
#define dula P26
#define wela P27
uchar num,temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void DelayMs(uint c);
uint Sum(uchar i,uchar j);
void main()
{while(1){temp=0xfe;for(num=0;num<6;num++){wela=1;P0=temp;//11111110 打开第一个数码管的位选temp=_crol_(temp,1);wela=0;dula=1;P0=table[num+5];dula=0;DelayMs(2);}}
}
uint Sum(uchar i,uchar j)
{uint k;k=i+j;return k;
}
void DelayMs(uint c)
{uint a,b;for(a=c;a>0;a--)for(b=115;b>0;b--);
}

 然后,我们将这里的数码管呈现的代码可以进行一下修改,使得我们利用数组的形式对数码管呈现的数字进行控制。

void Display(uint shu)
{wela=1;P0=0xfe;//11111110wela=0;P0=0;dula=1;P0=table[shu/100];dula=0;DelayMs(2);wela=1;P0=0xfd;//11111101 打开第二个数码管的位选wela=0;P0=0;dula=1;P0=table[shu/10%10];dula=0;DelayMs(2);wela=1;P0=0xfb;//11111011 打开第三个数码管的位选wela=0;P0=0;dula=1;P0=table[shu%10];dula=0;DelayMs(2);
}

中断和定时器

中断的概念

在主程序运行的途中,会发生一些中断请求,进行中断响应,然后执行中断处理程序,最后中断返回,在中断响应的过程中,会根据中断的不同的优先级从而发生中断嵌套。

高优先级的可以打断低优先级的

同一优先级中的中断产生多个时,则有中断优先权排队问题,由中断系统硬件确定的自然优先级决定哪个中断先响应。

对于STC而言,最多可以有四级嵌套

 

中断响应条件

  1. 中断源有中断请求.
  2. 此中断源的中断允许位为1
  3. CPU开总中断(EA(总中断)=1)

TCON中当IT0为1时为下降沿触发,当IT0为0时为低电平触发

	EA=1;//打开总中断EX0=1;//打开外部中断IT0=0;//设置中断类型为下降沿

 

 中断函数

可位寻址的寄存器可以直接进行操作,能被8整除的都是可位寻址的。

在中断号当中,中断号不能重复出现。

void Int0() interrupt 0
{beep=0;
}

定时器装初值的计算方法

从0加满需要65535个机器周期,再加1后溢出,产生中断,共65536个机器周期,每个机器周期是12个时钟周期。

如果是11.0592M晶振,每个时钟周期为:1/11.0059200=0.09us. 

定时器/计数器介绍

定时器/计数器的核心部件是一个加法(也有减法)的计数器,其本质是对脉冲进行计数,只是让脉冲来源不同,如果计数脉冲来自系统时钟(内部),此时定时器每12个时钟得到一个计数脉冲,计数值+1,如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个脉冲+1;

定时器/计数器控制寄存器TCON

TCON为定时器/计数器T0,T1的控制寄存器,同时也锁存T0,T1溢出中断源和外部请求中断源。

这是它的格式:

TF0:定时器/计数器T0溢出中断标志,T0被允许计数之后,从初值开始加1计数,当最高位产生溢出的时候,由硬件置“1”TF0,向CPU请求中断,一直保持CPU响应应该中断时,才由硬件清“0”TF0

TR0:全手动,定时器T0的运行控制位,该位由软件置位和清零,(GATE=0)TR0=1时,允许T0开始计数,TR0=0时禁止T0计数,(GATE=1),TR1=0且INT0=高电平,才能允许T0计数。

定时器/计数器工作模式寄存器TMOD

好了,本次的文章就到这里了,我们下次再见。 


http://www.ppmy.cn/embedded/116828.html

相关文章

linux命令行快捷键

第一章 linux之帮助命令 第二章 linux命令行快捷键 文章目录 linux命令行快捷键 linux命令行快捷键 Tab 命令补全或文件补全Ctrlu 删除或剪切光标之前的命令Ctrla 将光标移动到命令行开头Ctrle 将光标移动到命令行结尾ctrlc 终止当前命令ctrll 清屏ctrly 粘贴ctrlu的内容 参考…

众数信科 AI智能体政务服务解决方案——AI法律助手

政务服务解决方案 AI法律助手 一款基于AI大模型的智能鼠标 搭裁“寻知AI法律助手” 众数信科AI智能体 产品亮点 能够结合全国各地案例数据 为用户提供法律咨询、文书生成、案例研判 类案推荐、法规检索等法律服务 同时结合Al office插件 具备AI智能办公、PPT生成等功能 …

gnome Files管理文件学习

Files文件夹页可以非常高效的使用&#xff0c;接下来介绍一些有用的快捷命令和tricks 首先是快捷键&#xff1a; **Ctrl T**Ctrl N**Ctrl WClose window or tab**Ctrl FSearch**Ctrl LEnter location**BackspaceGo Back to a Previous FolderCtrl Zoom inCtrl -Zoom outCtrl 0…

echarts图表刷新

图表制作完成&#xff0c;点击刷新图标&#xff0c;可以刷新。 <div class"full"><div id"funnel" class"normal"></div><div class"refreshs"><div class"titles_pic"><img src"./…

QT 带箭头的控件QPolygon

由于对当前项目需要绘制一个箭头控件&#xff0c;所以使用了QPainter和QPolygon来进行绘制&#xff0c;原理就是计算填充&#xff0c;下面贴出代码和效果图 这里简单介绍下QPolygon QPolygon是继承自 QVector<QPoint>那么可以很简单的理解为&#xff0c;他就是一个点的…

Vue3 Day7-全局组件、指令以及pinia

7.1 全局组件 App.vue <template><div><h2>我是父组件&#xff0c;下面是全局组件的内容</h2><HelloWorld></HelloWorld></div> </template> ​ <script setup> ​ </script> <style scoped></style&g…

git 命令

reset all file to a commit-id &#xff08;退code&#xff09; git reset --hard HEAD^ /commit id only return one change &#xff08;推其中的一笔&#xff09; git revert commit id reback one specific file to latest&#xff08;恢复那…

Linux基础---13三剑客及正则表达式

一.划水阶段 首先我们先来一个三剑客与正则表达式混合使用的简单示例&#xff0c;大致了解是个啥玩意儿。下面我来演示一下如何查询登录失败的ip地址及次数。 1.首先&#xff0c;进入到 /var/log目录下 cd /var/log效果如下 2.最后&#xff0c;输入如下指令即可查看&#xf…