#include "reg52.h"
sbit led1 = P0^0;
sbit led2 = P0^7;
void Init_Hc138(int n) //译码器选择
{
switch (n)
{
case 4:
P2=(P2 & 0x1f) | 0x80;
break; //让Y4输出低电平
case 5:
P2=(P2 & 0x1f) | 0xa0;
break; //让Y5输出低电平
case 6:
P2=(P2 & 0x1f) | 0xc0;
break; //让Y6输出低电平
case 7:
P2=(P2 & 0x1f) | 0xe0;
break; //让Y7输出低电平
}
}
void Output_P0(unsigned char channel,unsigned char dat)
{
Init_Hc138(channel);
P0=dat; //P0口输出数据
}
unsigned char flag,count=0;
//定时器0
void init_timer0()
{
TMOD = 0x01;
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256; // 50ms
ET0 = 1;//定时器0开关
TR0 = 1;//定时器0启动位
EA = 1; //总开关
}
void service_timer0() interrupt 1
{
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
count++;
if (count==100&flag==1)
{
led1=1;
flag=0;
count=0;
}
}
//中断0
void init_INT0()
{
IT0 = 0; //下降沿触发
EX0 = 1; //打开中断0
EA = 1; //打开总开关
}
void service_INT0() interrupt 0
{
flag=1;
led2=~led2;
led1=0;
}
void main()
{
Output_P0(5,0x00);//关闭蜂鸣器
Output_P0(4,0xff);
Init_Hc138(4);
init_timer0();
init_INT0();
while(1)
{
}
}
蓝桥杯学习--外部中断与定时器中断应用
最新推荐文章于 2023-07-09 15:36:44 发布