51单片机开发入门与典型实例

源代码在线查看: jt 21-4.c

软件大小: 6978 K
上传用户: kkkiii2008
关键词: 51单片机 典型
下载地址: 免注册下载 普通下载 VIP

相关代码

				/* 文件名:JT 21-4.c */
				/* 程序功能:交通信号灯控制(改进)*/
				  #include           /* 头文件 */  
				  char count;                   /* 声明count为字符变量 */
				  bit flag;                     /* 声明flag为位变量 */
				  char sum =0;                   /* 声明sum为字符变量并赋初始值0 */
				  xhd( );                       /* 信号灯函数xhd( ) */
				 /* ――――――――  主函数(主程序) ―――――――――――*/
				  main( )                       /* 主函数 */
				  {  
				    TMOD=0x01;                  /* 设定T0为模式1 */
				    TH0=-(50000/256);           /* 设定时器初始值50000 */
				    TL0=-(50000%256);  
				    EA=1;                       /* 总允许中断 */
				    ET0=1;                      /* 允许定时器T0中断 */
				    TR0=1;                      /* 启动定时器工作 */
				
				    EX0=1;                      /* 允许外部中断0中断 */
				    PX0=1;                      /* 外部中断0为高优先级 */
				 
				    P1=0xff;                    /* P1初始值,关闭所有信号灯 */
				    xhd( );                     /* 调用信号灯函数 */
				  }
				 /* ――――――― 中断函数(中断服务程序) ―――――――― */
				  T0_srv( ) interrupt 1 using 1  /* 中断服务程序 */
				  {
				    TH0=-(50000/256);            /* 重装定时器初始值 */
				    TL0=-(50000%256); 
				    count++;                     /* count加1 */ 
				    if(count==20)                /* 判断count是否等于20 */
				     { 
				      count=0;                   /* count清0,以便从新计数 */
				      flag=1;                    /* 标志位为1 */
				     } 
				  }
				 /* ――――――――  信号灯函数(子程序) ―――――――― */
				   xhd( )                        /* 信号灯函数 */
				   {                             
				     while(1)                    /* 无限循环 */ 
				     {
				 /* ―――――――――――――*/
				       P1_3=0; P1_2=0;           /*东西红灯亮,南北绿灯亮 */ 
				       while( sum				        {
				          while( ! flag );       /* 等待1秒 */
				          flag=0;                /* 标志位清0 */
				          sum++;                 /* sum加1 */
				        }
				      sum=0;                     /* sum清0,以便从新计数 */
				 /* ―――――――――――――*/
				      P1_2=1; P1_1=0;            /* 南北绿灯灭,黄灯亮 */      
				  while( sum				   {
				     while(! flag);
				     flag=0;
				     sum++;
				    }
				   sum=0;
				
				
				/*―――――――――――――*/
				   P1_1=1; P1_0=0;               /* 南北黄灯灭,红灯亮 */
				   P1_3=1; P1_5=0;               /* 东西红灯灭,绿灯亮 */
				  while( sum				   {
				    while(! flag);
				    flag=0;
				    sum++;
				   }
				  sum=0;
				 /* ―――――――――――――*/
				  P1_5=1; P1_4=0;                /*东西绿灯灭,黄灯亮 */
				  while( sum				    {
				     while(! flag);
				     flag=0;
				     sum++;
				    }
				   sum=0;
				 /* ――――――――――――― */
				   P1_4=1; P1_0=1;               /* 东西黄灯灭,南北红灯灭 */ 
				  }
				 }
				 /* ―――――― 外部中断函数(外部中断服务程序)――――― */
				 int0_srv( ) interrupt 0 using 2
				  {
				    char a;
				    unsigned int i;
					for (i=0;i				    if ( INT0==0)
				     {
				       a=P1;                     /* 保留P1状态*/
				       P1=0xff;
				       P1=0xf6;                  /* 使两边亮起红灯 */
				       while (INT0==0);          /* 等待开关断开*/
				       P1=a;                     /* 恢复P1状态*/
				     }
				  }
				
							

相关资源