您的位置 首页 知识

AVR中止运用报警2路指示

includeiom16h>includeintrinsicsh>defineucharunsignedchardefineuintunsignedint__flashucharseg[1

#include
#include
#define uchar unsigned char
#define uint unsigned int
__flash uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //段码
0x7f,0x6f};
__flash uchar tab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选码
uchar flag1=0; //初始化报警标志1为0
uchar flag2=0; //初始化报警标志2为0
void delay(uint k) //延时k ms子程序
{
uint i,j;
for(i=0;ifor(j=0;j<1140;j++);
}
void show(uint d) //显现数码管数值程序
{
uchar buf[8];
uchar i=0;
do
{
buf[i]=d%10;
d=d/10;
i++;
}
while(d);
while(i)
{
PORTA=seg[buf[i-1]];
PORTC=tab[i-1];
delay(100);
PORTA=0xff;
PORTC=0xff;
i–;
}
}

void port_init() //端口初始化设置
{
PORTA=0xff;
DDRA=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0xff;
PORTB=0xff;
DDRB=0xff;
}

void init() //中止寄存器设置
{
MCUCR=0x4a; //设置INT0 和 INT1 为下降沿触发 敞开睡觉形式
GICR=0xc0; //设置INT0 和 INT1 使能
SREG=0x80; //总中止开关使能
}

void main()
{
port_init();
init();
while(1)
{
if(flag1==1) //INT0时 数码管显现1
{
show(1);
delay(1000);
}
__sleep(); //调用休眠形式
if(flag2==1) //INT0时 数码管显现2
{
show(2);
delay(1000);
}
if(flag1&flag2) //当INT0 和INT1都按下去往后,表明2路都报警了 发光管取反报警显现
{
PORTB=0xff;
delay(100);
PORTB=0x00;
delay(100);
}
}
}

#pragma vector = 0x04
__interrupt void int0()
{
flag1=1;
}

#pragma vector = 0x08
__interrupt void int1()
{
flag2=1;
}

注: 调用休眠形式时 表明程序到此中止,只有用外部中止才干唤醒,持续下面程序。
数码管显现函数选用工程算法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/318406.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部