当前位置: 首页 > news >正文

0基础 | Proteus | 中断 | 点阵

中断

中断概念

指的是由于内部或外部的某种原因,CPU暂时中止其正在执行的程序

转去执行请求中断的那个外设或事件的服务子程序

等处理完毕后再返回执行原来中止的程序

中断允许控制

EA:中断允许总控位

EA=0, 屏蔽所有的中断请求;   EA=1,开放中断

1:开放

0:屏蔽

ET2:定时器/计数器T2的溢出中断允许位

ES:串行口中断允许位

ET1:定时器/计数器T1的溢出中断允许位

EX1:外部中断INT1的中断允许位

ET0:定时器/计数器T0的溢出中断允许位

EX0:外部中断INT0的中断允许位

优先权控制

             PT2:定时器/计数器T2的中断优先级控制位,只用于52子系列

1,高优先级

0,低优先级

PS:串行口的中断优先级控制位

PT1:定时器/计数器T1的中断优先级控制位

PX1:外部中断INT1的中断优先级控制位

PTO:定时器/计数器T0的中断优先级控制位

PXO:外部中断INTO的中断优先级控制位

中断源

优先级顺序

外部中断0

最高

最低

定时/计数器T0中断

外部中断1

定时/计数器T1中断

串行口中断

定时/计数器T2中断

各中断服务程序的入口编号

中断源

入口编号

外部中断0(P3.2)

0

定时/计数器0

1

外部中断1(P3.3)

2

定时/计数器1

3

串行口

4

外部中断

外部引脚P3.2和P3.3输入,

有两种触发方式:电平触发 及 跳变(边沿)触发

由特殊功能寄存器TCON来管理.

ITO(IT1):外部中断0(1)触发方式控制位

IT0(IT1)被设置为0:电平触发方式;

IT0(IT1)被设置为1边沿触发方式

IEO(IE1):外部中断0(1)的中断请求标志位。

中断电路仿真(每按键按一次,数码管+1)

点阵的应用

点阵实物图

点阵内部原理图

0-9的点阵数值:

unsigned char code tab[]={

};(高电平有效)

0x00,0x7E,oxFF,0xC3,0xC3,0xFF,0x7E,0x00, //0

0x00,0x00,0x43,0xFF,0xFF,0x03,0x00,0x00, //1

0x00,0x63,0xC7,0xCF,0xDB,0xF3,0x63,0x00, //2

0x00,0x42,0xDB,0xDB,0xDB,0xFF,0x66,0x00, //3

0x00,0x3E,0x46,0xFF,0xFF,0x06,0x06,0x00, //4

0x00,0xF6,0xF7,0xD3,0xD3,0xDF,0xDE,0x00, //5

0x00,0x7E,0xFF,0xDB,0xDB,0xDF,0x4E,0x00, //6

0x00,0xC0,0xC0,0xC7,0xFF,0xF8,0xC0,0x00, //7

0x00,0xFF,0xFF,0xDB,0xDB,0xFF,0xFF,0x00, //8

0x00,0x72,0xFB,0xDB,0xDB,0xFF,0x7E,0x00, //9

8X8LED 点阵显示数字电路仿真

时钟电路:由 12M 晶振(X1)和两个 22pF 电容(C1、C2)构成,为单片机提供工作时钟。

复位电路:10k 电阻(R1)和 10μF 电容(C3)组成上电复位电路,确保单片机初始化。

总线驱动:P0 口通过排阻(RP1)连接到 74LS245(U2),74LS245 用于增强驱动能力,其 \(\overline{CE}\) 接地、\(AB/ \overline{BA}\) 接地,使数据从 A 端流向 B 端。

点阵模块:74LS245 输出连接到 LED 点阵,P3.0 - P3.7(标为 C0 - C7)也连接到点阵,共同实现对点阵的控制。

该电路通过 AT89C51 单片机,借助 74LS245 驱动 LED 点阵,晶振与复位电路保障单片机正常运行。

8X8LED 点阵显示数字1

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code Table_of_Digits[]={上面};

uchar i=0,t=0,Num_Index;

//主程序

void main()

{

P3=0x80;

Num_Index=0; //从0 开始显示

TMOD=0x00; //T0 方式0

TH0=(8192-2000)/32; //2ms 定时

TL0=(8192-2000)%32;

IE=0x82;

TR0=1; //启动T0

while(1);

}

//T0 中断函数

void LED_Screen_Display() interrupt 1

{

TH0=(8192-2000)/32; //恢复初值

TL0=(8192-2000)%32;

P0=0xff; //输出位码和段码

P0=~Table_of_Digits[Num_Index*8+i];

P3=_crol_(P3,1);

if(++i==8) i=0; //每屏一个数字由8 个字节构成

if(++t==250) //每个数字刷新显示一段时间

{

t=0;

if(++Num_Index==10) Num_Index=0; //显示下一个数字

}

}

8X8LED 点阵显示数字2

说明:每次按下K1 时,会使8X8LED点阵屏循环显示不同图形。

本例同时使用外部中断和定时中断。

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//待显示图形编码

uchar code M[][8]=

{{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1

{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2

{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //图3};

uchar i,j;

//主程序

void main()

{P0=0xff;

P1=0xff;

TMOD=0x01; //T0 方式1

TH0=(65536-2000)/256; //2ms 定时

TL0=(65536-2000)%256;

IT0=1; //下降沿触发

IE=0x83; //允许定时器0、外部0 中断

i=0xff; //i的初值设为0xff,加1 后将从0 开始

while(1);}

//T0 中断控制点阵屏显示

void Show_Dot_Matrix() interrupt 1

{TH0=(65536-2000)/256; //恢复初值

TL0=(65536-2000)%256;

P0=0xff; //输出位码和段码

P0=~M[i][j];

P1=_crol_(P1,1);

j=(j+1)%8;}

//INT0 中断(定时器由键盘中断启动)

void Key_Down() interrupt 0

{P0=0xff;

P1=0x80;

j=0;

i=(i+1)%3; //i在0,1,2 中取值,因为只要3 个图形

TR0=1;}

按键控制8X8LED 点阵屏显示图形

相关文章:

  • 移除生产环境所有console.log
  • Unity:Sprite Shapes(精灵形状)
  • 4.27算法题
  • 【计算机网络性能优化】从基础理论到实战调优
  • QT中的事件及其属性
  • 如何理解promise 续一
  • 2025 网络安全技术深水区探索:从 “攻防对抗” 到 “数字韧性” 的范式跃迁
  • ts全局导入接口
  • 深入浅出提示词工程(结合 DeepSeek)
  • C++翻转数相乘 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
  • 从数据孤岛到智能决策:健康管理系统如何打通企业健康大数据?
  • Shell脚本-while循环应用案例
  • Redux-Saga vs Redux-Thunk
  • 【C++QT】Layout 布局管理控件详解
  • 3G大一下安卓考核题解
  • 【Linux 线程与进程】线程与进程技术基础
  • MySQL 存储引擎与服务体系深度解析
  • Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南
  • 写读后感的时候,可以适当地引用书中的内容吗?
  • dma_buf学习记录之二核心接口
  • 外交部:对伊朗拉贾伊港口爆炸事件遇难者表示深切哀悼
  • 国家发改委:我国能源进口来源多元,企业减少甚至停止自美能源进口对国内能源供应没有影响
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 106岁东江纵队老战士、四川省侨联名誉主席邱林逝世
  • 魔都眼·上海车展⑥|周六客流超13.5万人次,创开展新高