欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 0基础 | Proteus | 中断 | 点阵

0基础 | Proteus | 中断 | 点阵

2025/5/1 13:06:04 来源:https://blog.csdn.net/2302_77523399/article/details/147562413  浏览:    关键词: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 点阵屏显示图形

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词