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

📄 trifficlight.txt

📁 做单片机课程设计时写的一点程序
💻 TXT
字号:

#include<reg51.h>               /*包含reg51.h头文件,该文件定义了8051内部所有的寄存器和I/O口*/
#include<absacc.h>
#define PORTA XBYTE[0X2000]     /* 定义外部口地址 */
#define PORTB XBYTE[0X2001]
#define PORTC XBYTE[0X2002]
#define PORTG XBYTE[0X2003]
#define uchar unsigned char 
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                    0x77,0x7c,0x39,0x5e,0x79,0x71};    /* 字型表 */                     
uchar data light;
uchar data count;
uchar data sum;
bit flag;
void disply();
void delay (uchar x)     // pA0--2  东西红黄绿     PA3--5 南北红黄绿
{			//PB0--7    数码管LED段选
 uchar i;		//PC0--2    对应数码管位选 与138 ABC相连
 while((x--)!=0)
 {
  for(i=0;i<125;i++)
  {;}
 }
}void T0_srv (void) interrupt 1 using 1 /* T0中断服务函数完成1s定时*/
{  
   TH0=-(50000/256);
   TL0=-(50000%256);
   count++;
   if(count==20) 
     { 
       count=0;
       flag=1;
     }
}
void int0_srv(void) interrupt 0 using 2  /* 外中断0完成当有救护车和消防车通过
                   时,两个方向均亮红灯,救护车和消防车通过后恢复原来状态。
                   用一个手动控制开关,接在INT0的输入端,当开关接通时,保存
                   P1口状态,使两个方向红灯亮,等开关断开后,恢复P1口状态。*/
{
   uchar a;
   delay(20);
   if(!INT0)
  {
     a=light;       /*保留P1鬃态*/
     PORTA=0xff;
     PORTA=0xf6;
     while(!INT0);     /*等待开关断开*/
     PORTA=a;             /*恢复P1状态*/
  }
}
void main()  
{ 
   PORTG=0x80;
   PORTA=0xff;
   PORTB=0x00;
   TMOD=0x01;
   TH0=-(50000/256);
   TL0=-(50000%256);
   EA=1;
   ET0=1;
   PX0=1;
   EX0=1;
   TR0=1;
   PORTA=0xff;
   while(1)
   {
     light=0xde;    /*(东西:红;南北:绿) 亮5秒*/
     PORTA=0xde;
     sum=5;
     while(sum>0)
      {
      	disply();
	while(!flag);
      	flag=0;
      	sum--;
      	disply();
      }
	sum=3;
	light=0xee;
     	PORTA=0xee;	/* 南北方向(绿灯灭,黄灯亮)3秒  */
      while(sum>0)
       {
        disply();
	while(!flag);
        flag=0;
        sum--;
	disply();
       }
     	sum=8;
	light=0xf3;
     	PORTA=0xf3;      /* 南北方向(黄灯灭,红灯亮) 8秒 */     /* 东西方向(红灯灭,绿灯亮)8秒 */
     while(sum>0)
      {
       	disply();
	while(!flag);
       	flag=0;
       	sum--;
	disply();
      }
	sum=3;
	light=0xf5;
     	PORTA=0xf5;/* 东西方向(绿灯灭,黄灯亮)3秒 */ 
     while(sum>0)
      {
      	disply();
      	while(!flag);
      	flag=0;
      	sum--;
	disply();
      }
      PORTA=0xff;  /* 东西方向黄灯灭  */       /* 南北方向红灯灭  */
   }
}
  void disply(void)
  {	
    		uchar ds1,ds2;
  		ds1=sum/10;
  		ds2=sum%10;
  		PORTB=table[ds1];
  		PORTC=0x00;
  		delay(20);
  		PORTB=table[ds2];
  		PORTC=0x01;
  		delay(20);
  	
  }





⌨️ 快捷键说明

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