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

📄 ex7_6.c

📁 单片机应用技术(C语言版)程序源代码.rar
💻 C
字号:
//程序:ex7_6.c
//功能:交通灯远程控制程序单片机程序,晶振为11.059MHz
#include<reg51.h>
#define uchar unsigned char
void delay0_5s();     			//0.5秒延时程序,参见任务9程序ex4_3.c
void delay_t(unsigned char t);		//0.5秒~128秒延时, 参见任务9程序ex4_3.c
void main()				//主函数
{	
   TMOD=0x21;    			//设置定时器0方式1(延时0.5秒函数),定时器1方式2
   TH1=0xf4; 
   TL1=0xf4;				//设置串行口波特率为2400bit/s,
   TR0=1;
   TR1=1;				//启动定时器
   SCON=0x50; 			        //串行口方式1、允许接收
   PCON=0x00;
   EA=1;				//开总中断允许位
   ES=1; 		     		//开串行口中断
   while(1)
   {
       P1=0xf3;			        //A道绿灯,B道红灯
       delay_t (10);			//延时5秒
       for(k=0;k<3;k++)   		//A道绿灯闪烁,B道红灯
       {
          P1=0xfb;			
          delay0_5s();			//延时0.5s
          P1=0xf3;
          delay0_5s();			//延时0.5s
       }
       P1=0xeb;		      		//A道黄灯,B道红灯
       delay_t(4);			//延时2s
       P1=0xde;		      		//A道红灯,B道绿灯
       delay_t(10);			//延时0.5s
       for(k=0;k<3;k++)			//A道红灯,B道绿灯闪烁
       {
          P1=0xdf;
          delay0_5s();			//延时0.5s
          P1=0xde;
          delay0_5s();  		//延时0.5s
       }
       P1=0xdd;   			//A道红灯,B道黄灯
       delay_t(4);			//延时2s
   }
}
//函数名:serial
//功能:串行口中断函数,接收主机命令,控制交通灯显示状态
//形式参数:无
//返回值:无
void serial()interrupt 4		//串行口中断类型号是4
{ 
   unsigned   char  i;
   EA=0;				//关中断     
   if(RI==1)				//接收到数据
   { 	
      RI=0;		                //软件清除中断标志位
      if(SBUF==0x01)			//判断是否01H亮灯命令
      { 
	 SBUF=0x01;			//将收到的01H命令回发给主机
	 while(!TI);			//查询发送
	 TI=0 ;				//发送成功,由软件清TI
	 i=P1;				//保护现场,保存P1口状态
	 P1=0xdb ;			//P1口控制的两路红灯全亮
	 while(SBUF!=0x02)		// 判断是否02H命令	
	 {
	    while(!RI) ;		//等待接收下一个命令
	    RI=0;			//软件清除中断标志位     		
	 }							
	 SBUF=0x02;			//将收到的02H命令回发给主机
	 while(!TI);			//查询发送
	 TI=0 ;				//发送成功,由软件清TI
	 P1=i;				//恢复现场,送回P1口原来状态
	 EA=1;				//开中断
      }
      else
      {
	 EA=1;
      }
   }
}

⌨️ 快捷键说明

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