基于51单片机实现旋转LED灯报警(Proteus仿真)

2023-02-01  

具体功能实现:

当按下开关时,蜂鸣器报警,同时LED旋转式亮灯。

使用器件:

AT89C51、按键、电阻、蜂鸣器(SOUNDER)、8只LED灯

Proteus仿真原理图:

仿真:

知识介绍:

Proteus布线

为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。

定时中断系统简图

定时器资源

定时器个数:3个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。

(T0和T1的操作方式是所有51单片机共有的)

中断号:

外部中断0 interrupt 0

定时器0 interrupt 1

外部中断1 interrupt 2

定时器中断1 interrupt 3

串口中断 interrupt 4

中断系统

执行现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

主要代码(C语言)KEIL5实现:

#include


#include


#define uint unsigned int


#define uchar unsigned char


sbit SPK = P3^7;


uchar FRQ = 0x00;


void Delayms(uint ms)


{


uchar i;


while(ms--)


{


for(i=0;i<120;i++);


}


}


void main()


{


P2 = 0x00;


TMOD = 0x11;


TH0 = 0x00;


TL0 = 0xff;


IT0 = 1;


IE = 0x8b;


IP = 0x01;


TR0 = 0;


TR1 = 0;


while(1)


{


FRQ++;


Delayms(1);


}


}


void EX0_INT() interrupt 0


{


TR0 = !TR0;


TR1 = !TR1;


if(P2 == 0x00)


P2 = 0xe0;


else


P2 = 0x00;


}


void T0_INT() interrupt 1


{


TH0 = 0xfe;


TL0 = FRQ;


SPK = ~SPK;


}


void T1_INT() interrupt 3


{


TH0 = -45000/256;


TL0 = -45000%256;


P2 = _crol_(P2,1);


}

问题解答:

Q

定时器计算如何快速得到?(无需计算)

打开51单片机烧录软件STC-ISP,找到“定时器计算器”,根据红色方框中的进行设置,可以快速得到定时器初始化代码,可直接使用。

Q

在此项目中为什么LED灯高电平有效?

A

LED灯的特性之一是单向导电性,阳极大于阴极才能够导通,阴极接地可以想象成0,所以阳极置1可以达到阳极大于阴极。



文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。