利用中断消除数码管的显示抖动
中断
引例:烧水,电视,电话,在某个场景下同时发生,此刻人作为处理这些问题的唯一主体,就需要有一个轻重缓急,按照紧迫程度(优先级)去解决这些问题。
中断使能寄存器——IE的控制位(8位控制):
- 第7位 EA——总中断, 为1时打开(总开关)
- 第1位 ET0——定时器0中断使能,为1时打开(相当于闹钟开关)
注意:
- 中断函数不需要调用,达到中断条件自动进入。
- 刷新时间固定1ms,不会受到计算过程的影响。
- 中断函数定义时,格式为:
void InterruptTime0() interrupt 1
其中的1表示中断函数编号,其计算方式为:x*8+3=?,?为中断向量地址的十进制值,例如本例采用T0中断,对应地址为0x000B=11,所以x=1。
- 中断优先级分为固有优先级和抢占优先级:
固有优先级:几个中断同时发生时,先处理优先级默认高的程序,处理过程中对其他一切中断不予响应。
抢占优先级:同时发生中断,优先级高的西先响应,在处理中断过程中,出现更高级别优先级,则先执行更改级别优先级再回来处理当前优先级。
实验一:我们对【005-数码管的使用】中 方案三 的程序进行改动,使用中断函数以解决抖动问题。
#include<reg52.h> //头文件
sbit LS1 = P2^2; //74LS138控制端
sbit LS2 = P2^3;
sbit LS3 = P2^4;
unsigned char shu_ma_guan[16] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0~F的对应值
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//全局变量
unsigned char LedBuff[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义8个数码管初始状态均为00000000,即都不显示
unsigned char flag1s = 0; //一秒到达标志位,为1即表示到达一秒
unsigned int cnt = 0;
unsigned char i = 0;
void main() //主函数
{
unsigned long sec = 0;
TMOD = 0x01; //定时器定义,晶振12Mhz,每次1ms
TH0 = 0xFC;
TL0 = 0x18;
TR0 = 1; //打开定时器
EA = 1; //打开中断总开关
ET0 = 1; //打开定时器0中断开关
while(1)
{
if(flag1s == 1 ) //判断是否到一秒
{
flag1s = 0; //时间到达一秒,标志复位
sec++; //时间到达一秒自动加1
LedBuff[0] = shu_ma_guan[sec%10]; //确定数码管在某个时间时各个位的显示数字
LedBuff[1] = shu_ma_guan[sec/10%10];
LedBuff[2] = shu_ma_guan[sec/100%10];
LedBuff[3] = shu_ma_guan[sec/1000%10];
LedBuff[4] = shu_ma_guan[sec/10000%10];
LedBuff[5] = shu_ma_guan[sec/100000%10];
LedBuff[6] = shu_ma_guan[sec/1000000%10];
LedBuff[7] = shu_ma_guan[sec/10000000%10];
}
}
}
//中断函数
void InterruptTime0() interrupt 1 //函数名中在:Interrupt——中断函数,Time0——定时器0中断
//不要忘记interrupt关键字及1(1的计算看文章开头)
{
TH0 = 0xFC; /定义定时器
TL0 = 0x18; //注意:右移TF0溢出时,进入定时器中断硬件自动清零,不在需要软件清零,省略语句TF0=0;
cnt++; //TFO溢出一次,自动加1
if(cnt == 1000) /时间到达一秒
{
cnt = 0; //复位,从新计次
flag1s = 1; //1秒到达标志置1
}
P0 = 0x00; //消除鬼影,使得数码管的所有段全灭
switch(i) //数码管刷新
{
case 0: LS3=0;LS2=0;LS1=0;i++;P0=LedBuff[0];break;
case 1: LS3=0;LS2=0;LS1=1;i++;P0=LedBuff[1];break;
case 2: LS3=0;LS2=1;LS1=0;i++;P0=LedBuff[2];break;
case 3: LS3=0;LS2=1;LS1=1;i++;P0=LedBuff[3];break;
case 4: LS3=1;LS2=0;LS1=0;i++;P0=LedBuff[4];break;
case 5: LS3=1;LS2=0;LS1=1;i++;P0=LedBuff[5];break;
case 6: LS3=1;LS2=1;LS1=0;i++;P0=LedBuff[6];break;
case 7: LS3=1;LS2=1;LS1=1;i=0;P0=LedBuff[7];break;
default: break;
}
}
</reg52.h>
Original: https://www.cnblogs.com/Yang-shihao/p/14353178.html
Author: shihao_Yang
Title: 006-中断
相关文章
Python-Tensorflow图像数字验证码识别
啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可以到 建议专区 反馈...
pycharm安装TensorFlow的体会
本方法无需下载anaconda 1.官网安装python编译器(需3.7以上) 2.官网安装pycharm,配置环境 3.TensorFlow安装时的方法 (1)pycharm的界面:file-set...
深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测
文章目录 一、前期工作 导入库包 导入数据 主成分分析(PCA) 聚类分析(K-means) 二、神经网络模型建立 三、检验模型 大家好,我是微学AI,今天给大家带来一个利用卷积神经网络(pytorc...
你的声音价值百万,教你六个利用声音赚钱的方法
大家好,我是黄宇风。 如果我说用声音来赚钱,大家能想到些什么叫? 我想大多数人能想到靠声音赚钱的,只有那些少数"天之骄子",比如当红歌手、主持人、配音演员之类的。 但现在,因为有了互联网的放大效应,靠...
纯 PyTorch 语音工具包 SpeechBrain 开源,Kaldi:“ 我压力有点大”
转自:机器之心 【导语】:距离 Mirco Ravanelli 宣布打造新的语音工具包过去了一年多,SpeechBrain 真的如期而至。 语音处理技术的进步,是人工智能改变大众的生活的重要一环。深度...
仿今日头条音频_建议收藏|音频小白简单易上手的详细音频制作全过程
文|桃小真 内附录制音频小技巧,建议看完。本文大约需要2分钟左右。 前段时间有朋友私信我,问我是用什么来录制音频的。 今天给大家具体分享一下我录制音频全过程(如何开通音频,制作音频,上传音频) 大家都...
关于Focal Loss【转自以学习、回忆】
是解决样本不均衡问题的一种方法,面试常问,但是自己一知半解 遂寻文学习 来源:CSDN GHZhao_GIS_RS 链接:https://blog.csdn.net/u014311125/articl...
学习pandas下的dataframe画图参数 ——转载
学习pandas数据框的绘կ...
刚接触深度学习,如何用pycharm、pytorch、tensorflow等的环境配置
进入深度学习,就离开代码的运行、环境的配置,今天就来讲讲大致的流程,具体的细节大家可参考相关的文档。 step one: 什么语言、 软件,运行代码? 下载软件 python、pycharm step...
Tensorflow安装完成后Pycharm如何配置环境并测试Tensorflow
首先按照教程在电脑上配置Anaconda和安装对应Python版本的Tensorflow,具体版本对应可以参考官网,建议使用 conda 指令创建一个环境时名字取成自己想要的名字,此处我的环境名为te...
【Pytorch】基于卷积神经网络实现的面部表情识别
作者:何翔 学院:计算机学院 学号:04191315 班级:软件1903 转载请标注本文链接: https://blog.csdn.net/HXBest/article/details/1219812...
Python+scrcpy+pyminitouch实现自动化(四)——实现语音识别自动打卡机器人
首先要去网上下载一个想要实现自动化的软件,下载对应的 apk后拖拉到虚拟器的页面即可实现自动下载。 以上是对于AS打开的模拟器进行的下载安装,由于我找不到关于x86的企业微信,所以我就换了逍遥模拟器,...
git bash运行CycleGAN-TensorFlow问题(个人笔记)
啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可以到 建议专区 反馈...
Tensorflow手写数字识别
Tensorflow手写数字识别 前言 一、关于mnist数据集 二、搭建过程 * 1.导入数据集 2.数据集预处理 3.构建全连接层模型 4.梯度下降求最小Loss 5.测试集查看模型训练精度 6....
多激光雷达标定multi_LiDAR_calibration
多激光雷达标定multi_LiDAR_calibration 对于多激光雷达的标定主要采用ICP、NDT等配准方法进行估计多个激光雷达的外参变换矩阵T T T。在这里先介绍一些先前关于多激光雷达外参标...