// 蝙蝠龙51单片机开发学习系统 //
// 7天学会51单片机开发 //
// 合肥万里眼电子科技有限公司 www.hfmee.com //
#include<AT89X52.h> //调用51单片机的头文件
#define INT8U unsigned char
#define INT16U unsigned int
sbit RED_A=P1^0;
sbit YELLOW_A=P1^2;
sbit GREEN_A=P1^1;
sbit RED_B=P1^3;
sbit YELLOW_B=P1^5;
sbit GREEN_B=P1^4;
INT8U Flash_Count=0,Operation_Type=1;
void delay_ms(INT16U x)
{
INT8U t;
while(x--)
for(t=0;t<120;t++);
}
void INIT0(void) interrupt 0
{
//***此处用户自行添加外部INT0中断处理程序***
Operation_Type=0;
//******************************************
}
void INIT1(void) interrupt 2
{
//***此处用户自行添加外部INT1中断处理程序***
Operation_Type=1;
//******************************************
}
void Traffic_Light()
{
switch(Operation_Type)
{
case 1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
delay_ms(2000);
Operation_Type=2;
break;
case 2:
delay_ms(300);
YELLOW_A=~YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=3;
break;
case 3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
delay_ms(2000);
Operation_Type=4;
break;
case 4:
delay_ms(300);
YELLOW_B=~YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
//---------------------------------------
//名称: 主函数
//适用:蝙蝠龙51单片机开发学习系统
//公司:合肥万里眼电子科技有限公司
//网址:www.hfmee.com
//日期:20150201
//---------------------------------------
void main(void) //主函数,单片机开机后就是从这个函数开始运行
{
//***外部中断INT0初始化***
IT0=1; //下降沿触发方式
EX0=1; //外部INT0中断允许
//**********************
//***外部中断INT1初始化***
IT1=1; //下降沿触发方式
EX1=1; //外部INT1中断允许
//**********************
//***开全局中断设置****
//外部中断INT1设置了中断允许,此处要开全局中断
EA=1; //开全局中断
//*********************
while(1) Traffic_Light();
}
// 蝙蝠龙51单片机开发学习系统 //
// 7天学会51单片机开发 //
// 合肥万里眼电子科技有限公司 www.hfmee.com //
#include<AT89X52.h> //调用51单片机的头文件
#define INT8U unsigned char
#define INT16U unsigned int
sbit RED_A=P0^0;
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3;
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
INT8U Time_Count=0,Flash_Count=0,Operation_Type=1;
INT16U Tc=1;
void delay_ms(INT16U x)
{
INT8U t;
while(x--)
for(t=0;t<120;t++);
}
void INIT0(void) interrupt 0
{
//***此处用户自行添加外部INT0中断处理程序***
//Operation_Type=0;
//******************************************
if(++Tc==100)
{
Tc=1;
}
}
void T0_INT() interrupt 1
{
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
switch(Operation_Type)
{
case 1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
if(++Time_Count!=Tc*100) return;
Time_Count=0;
Operation_Type=2;
break;
case 2:
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=3;
break;
case 3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
if(++Time_Count!=Tc*100) return;
Time_Count=0;
Operation_Type=4;
break;
case 4:
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
void INIT1(void) interrupt 2
{
//***此处用户自行添加外部INT1中断处理程序***
Operation_Type=1;
//******************************************
if(--Tc==0)
{
Tc=99;
}
}
void Traffic_Light()
{
switch(Operation_Type)
{
case 1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
delay_ms(2000);
Operation_Type=2;
break;
case 2:
delay_ms(300);
YELLOW_A=~YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=3;
break;
case 3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
delay_ms(2000);
Operation_Type=4;
break;
case 4:
delay_ms(300);
YELLOW_B=~YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
//---------------------------------------
//名称: 主函数
//适用:蝙蝠龙51单片机开发学习系统
//公司:合肥万里眼电子科技有限公司
//网址:www.hfmee.com
//日期:20150201
//---------------------------------------
void main(void) //主函数,单片机开机后就是从这个函数开始运行
{
//***定时器Timer0初始化***
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //Timer0中断允许
//***外部中断INT0初始化***
IT0=1; //下降沿触发方式
EX0=1; //外部INT0中断允许
//**********************
//***外部中断INT1初始化***
IT1=1; //下降沿触发方式
EX1=1; //外部INT1中断允许
//**********************
//***开全局中断设置****
//外部中断INT1设置了中断允许,此处要开全局中断
EA=1; //开全局中断
//*********************
while(1);
}