标题:
单片机交通灯不能触发外部中断0
[打印本页]
作者:
cbsakcbd
时间:
2020-3-24 21:52
标题:
单片机交通灯不能触发外部中断0
要求的是按按键之后,需要将支路变黄干路为红1秒 之后支路变红干路变绿 也就是led8红,led3绿 。采用的是外部中断和定时器中断,外部中断函数是按键变化。但是在仿真和板子上都不能实现这个要求,是中断优先级的问题还是程序其他地方有问题,求大佬看一下.
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P3^0;
uchar num;
uchar num1=0;
uint times=0;
uint flag;
uint i;
uint num2;
sbit nr=P2^0;
sbit ny=P2^1;
sbit ng=P2^2;
sbit wg=P2^5;
sbit wy=P2^6;
sbit wr=P2^7;
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=250;j>0;j--);
}
/****外部中断*****/
void Int0Init()
{
IT0=1;
EX0=1;
EA=1;
}
/***定时器中断***///
void Int1Init()
{
TMOD=0x10;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
PT0 = 1;
}
void Int0() interrupt 0 //外部中断函数
{
delay(50); //消抖
if(k1==0)
{
delay(50);
if(k1==0)
{
num=16;
while(num>=1)//干路亮16秒绿灯
{
ng=0;ny=1;nr=1;wr=0;wy=1;wg=1;
num--;
}
}
}
}
void Int1() interrupt 3//定时器函数
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num--;
}
}
void main()
{
Int0Init();
Int1Init();
while(1)
{
num=21;
while(num>=1)//干绿支红
{
if(num>=5)
{
ng=0;ny=1;nr=1;wr=0;wy=1;wg=1;
}
if(num<=4)//黄灯闪烁
{
if(num%2==1)
{
ng=1;ny=0;nr=1;wr=0;wy=1;wg=1;
}
else
ng=1;ny=1;nr=1;wr=0;wy=1;wg=1;
}
}
num=21;
while(num>=1)//干红支绿
{
if(num>=5)
{
ng=1;ny=1;nr=0;wr=1;wy=1;wg=0;
}
if(num<=4)//黄灯闪烁
{
if(num%2==1)
{
ng=1;ny=1;nr=1;wr=1;wy=0;wg=1;
}
else
ng=1;ny=1;nr=0;wr=1;wy=1;wg=1;
}
}
}
}
复制代码
51hei截图20200324215102.jpg
(74.13 KB, 下载次数: 158)
下载附件
2020-3-24 21:51 上传
作者:
cbsakcbd
时间:
2020-3-25 00:08
已解决
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1