⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex4_4.c

📁 单片机应用技术(C语言版)程序源代码.rar
💻 C
字号:
//程序:ex4_4.c
//功能:交通灯控制程序
#include <REG51.H>
unsigned char t0,t1;		//定义全局变量,用来保存延时时间循环次数
//函数名:delay0_5s1
//函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定
//          时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒
//形式参数:无 
//返回值:无
void delay0_5s1()
{  
   for(t0=0;t0<0x0a;t0++)	// 采用全局变量t0作为循环控制变量
   {     	
      TH1=0x3c;			// 设置定时器初值
      TL1=0xb0;
      TR1=1;	               	// 启动T1
      while(!TF1);		// 查询计数是否溢出,即定时50ms时间到,TF1=1
      TF1=0;			// 50ms定时时间到,将定时器溢出标志位TF1清零
   }
}
//函数名:delay_t1
//函数功能:实现0.5秒~128秒延时
//形式参数:unsigned char t;
//          延时时间为0.5秒×t
//返回值:无
void delay_t1(unsigned char t)
{
   for(t1=0;t1<t;t1++)		// 采用全局变量t0作为循环控制变量
      delay0_5s1();
}
//函数:int_0
//函数功能:外部中断0中断函数,紧急情况处理,当CPU响应外部中断0的中断请求时,
//          自动执行该函数,实现两个方向红灯同时亮10秒
//形式参数:无
//返回值:无
void int_0() interrupt 0	// 紧急情况中断
{
   unsigned char i,j,k,l,m;
   i=P1;			// 保护现场,暂存P1口、t0、t1、TH1、TH0
   j=t0;
   k=t1;
   l=TH1;
   m=TH0;
   P1=0xdb;			// 两个方向都是红灯
   delay_t1(20);		// 延时10秒
   P1=i;			// 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
   t0=j;
   t1=k;
   TH1=l;
   TH0=m;
}
//函数:int_1
//函数功能:外部中断1中断函数,特殊情况处理,当CPU响应外部中断1的中断请求时,
//          自动执行该函数,实现A道放行5秒
//形式参数:无
//返回值:无
void int_1() interrupt 2	// 特殊情况中断
{
   unsigned char i,j,k,l,m;
   EA=0;			//关中断
   i=P1;			// 保护现场,暂存P1口、t0、t1、TH1、TH0
   j=t0;
   k=t1;
   l=TH1;
   m=TH0;
   EA=1; 			// 开中断
   P1=0xf3;			// A道放行
   delay_t1(10);		// 延时5秒
   EA=0;			// 关中断
   P1=i;			// 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
   t0=j;
   t1=k;
   TH1=l;
   TH0=m;
   EA=1;			//开中断
}
void main()			//主函数			
{
   unsigned char k;
   TMOD=0x10;			// T1工作在方式1
   EA=1;			// 开放总中断允许位
   EX0=1;			// 开外部中断0中断允许位
   IT0=1;			// 设置外部中断0为下降沿触发
   EX1=1;			// 开外部中断1中断允许位
   IT1=1;			// 设置外部中断1为下降沿触发
   while(1) {
      P1=0xf3;			// A绿灯,B红灯,延时5秒
      delay_t1(10);				  
      for(k=0;k<3;k++){		// A绿灯闪烁3次
      P1=0xf3;
      delay0_5s1();		// 延时0.5秒
      P1=0xfb;
      delay0_5s1();		// 延时0.5秒
            }
   P1=0xeb;			// A黄灯,B红灯,延时2秒
   delay_t1(4);
   P1=0xde;			// A红灯,B绿灯,延时5秒
   delay_t1(10);
   for(k=0;k<3;k++)		// B绿灯闪烁3次
   {		
      P1=0xde;
      delay0_5s1();		// 延时0.5秒
      P1=0xdf;
      delay0_5s1();		// 延时0.5秒
   }
   P1=0xdd;			// A红灯,B黄灯,延时2秒
   delay_t1(4);				
           }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -