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

📄 xhj.c

📁 用单片机实现的道路交通灯设计
💻 C
📖 第 1 页 / 共 2 页
字号:


#include <at89x51.h> //包括一个52标准内核的头文件
#include <absacc.h>   //使用XBYTE

#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char //定义一下方便使用 
#define uint unsigned int 
#define ulong unsigned long 
#define COMA XBYTE[0x4000]
#define COMB XBYTE[0x2000]
#define Allstate 14

#define APGT XBYTE[0x8000+0x07F]
#define APGS XBYTE[0x8000+0x07E]
#define AGT XBYTE[0x8000+0x07D]
#define AGS XBYTE[0x8000+0x07C]
#define AYT XBYTE[0x8000+0x07B]
#define AYS XBYTE[0x8000+0x07A]
#define RT XBYTE[0x8000+0x079]

#define BPGT XBYTE[0x8000+0x06F]
#define BPGS XBYTE[0x8000+0x06E]
#define BGT XBYTE[0x8000+0x06D]
#define BGS XBYTE[0x8000+0x06C]
#define BYT XBYTE[0x8000+0x06B]
#define BYS XBYTE[0x8000+0x06A]

#define A10 XBYTE[0x8000+0x020]
#define A11 XBYTE[0x8000+0x021]
#define A12 XBYTE[0x8000+0x022]
#define A13 XBYTE[0x8000+0x023]
#define A14 XBYTE[0x8000+0x024]
#define A15 XBYTE[0x8000+0x025]
#define A16 XBYTE[0x8000+0x026]
#define A17 XBYTE[0x8000+0x027]
#define A18 XBYTE[0x8000+0x028]
#define A19 XBYTE[0x8000+0x029]

#define B10 XBYTE[0x8000+0x030]
#define B11 XBYTE[0x8000+0x031]
#define B12 XBYTE[0x8000+0x032]
#define B13 XBYTE[0x8000+0x033]
#define B14 XBYTE[0x8000+0x034]
#define B15 XBYTE[0x8000+0x035]
#define B16 XBYTE[0x8000+0x036]
#define B17 XBYTE[0x8000+0x037]
#define B18 XBYTE[0x8000+0x038]
#define B19 XBYTE[0x8000+0x039]

#define A20 XBYTE[0x8000+0x040]
#define A21 XBYTE[0x8000+0x041]
#define A22 XBYTE[0x8000+0x042]
#define A23 XBYTE[0x8000+0x043]
#define A24 XBYTE[0x8000+0x044]
#define A25 XBYTE[0x8000+0x045]
#define A26 XBYTE[0x8000+0x046]
#define A27 XBYTE[0x8000+0x047]
#define A28 XBYTE[0x8000+0x048]
#define A29 XBYTE[0x8000+0x049]

#define B20 XBYTE[0x8000+0x050]
#define B21 XBYTE[0x8000+0x051]
#define B22 XBYTE[0x8000+0x052]
#define B23 XBYTE[0x8000+0x053]
#define B24 XBYTE[0x8000+0x054]
#define B25 XBYTE[0x8000+0x055]
#define B26 XBYTE[0x8000+0x056]
#define B27 XBYTE[0x8000+0x057]
#define B28 XBYTE[0x8000+0x058]
#define B29 XBYTE[0x8000+0x059]


uchar state,set_state,set_state_max;
uchar state_man;
uint time,Alltime;


uchar a,b,c,d;

//#define DEBUG
void initsiu(void);
uchar inkey(void);
void set(void)	;	//设置
void display();
void display1(void);
void inkey1();
void init(void);
void Delay (unsigned int count);//长延时
void alloff(void);
void checkstate(void);
void control(void);

void checktime(void);

//void check_set_state(void);


void check(void);
void set(void);
void check_set(void);
void settime(void);

uchar count,count1;

uchar zxfa=0;

unsigned char data t_hour;

unsigned char data t_minute;

unsigned char data t_second;

uchar AYS_time,BYS_time;

bit s_flag,set_flag,settime_flag,start_flag,AYS_flag,BYS_flag,second_flag;

//uchar code tab[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
//uchar code tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
//                                                                  11A  12B  13D  14E  15F  16H  17L  18R  19U  20-
uchar code tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};

uchar code b_tab[]={0x91,0x73,0xE3,0xE3,0x91,0x91,0x03,0x03,0x9F,0x9F,0x25,0x25,0x0D,0x0D,0x99,0x99,0x49,0x49,0x41,0x41,0x1F,0x1F,0x01,0x01,0x09,0x09};
uchar code c_tab[]={0xC5,0x61,0xC7,0x49,0xC7,0x49,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1};


uchar code AOUT[]={0x1E,0x2E,0x2E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1B,0x1B,0x1D};
uchar code BOUT[]={0x1E,0x1E,0x1E,0x1E,0x1B,0x1B,0x1D,0x1E,0x2E,0x2E,0x1E,0x1E,0x1E,0x1E};

uchar code setmax1[]={9,59,5,9,9,2,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23};
uchar code setmax2[]={9,59,5,9,9,2,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59};

uchar code AOUT1[]={0x1E,0x2E,0x1E,0x1B};
uchar code BOUT1[]={0x1E,0x1B,0x1E,0x2E};

uchar code out[]={0xFE,0xFd,0xFB,0x1F,0x2F};

void set(void)
    {  uchar set1[26],set2[26],key,j,i,m,n;

	uint timea,timeb;
	second_flag=0;
set1[0]=RT;
set1[1]=APGT; 
set1[2]=APGS; 
set1[3]=AGS; 
set1[4]=AYT;
set1[5]=AYS;

set1[6]=A10;
set1[7]=B10; 
set1[8]=A11; 
set1[9]=B11; 
set1[10]=A12;
set1[11]=B12;

set1[12]=A13;
set1[13]=B13; 
set1[14]=A14; 
set1[15]=B14; 
set1[16]=A15;
set1[17]=B15;

set1[18]=A16;
set1[19]=B16; 
set1[20]=A17; 
set1[21]=B17; 
set1[22]=A18;
set1[23]=B18;
set1[24]=A19; 
set1[25]=B19;




set2[0]=RT;
set2[1]=BPGT; 
set2[2]=BPGS;
set2[3]=BGS; 
set2[4]=BYT; 
set2[5]=BYS;

set2[6]=A20;
set2[7]=B20; 
set2[8]=A21; 
set2[9]=B21; 
set2[10]=A22;
set2[11]=B22;

set2[12]=A23;
set2[13]=B23; 
set2[14]=A24; 
set2[15]=B24; 
set2[16]=A25;
set2[17]=B25;

set2[18]=A26;
set2[19]=B26; 
set2[20]=A27; 
set2[21]=B27; 
set2[22]=A28;
set2[23]=B28;
set2[24]=A29; 
set2[25]=B29;



	set_state=0;	
	j=200;
	do{	a=0xFD;b=b_tab[set_state];c=c_tab[set_state];d=0xFD;
	display();
	display1();

		}while(j--);


	do
	{
//循环开始
        key=inkey();
		switch (key)
             {
            case 0x7E:
			set_state++;
for(i=6;i<26;i++)
	{
		if(set1[i]==23&&set2[i]==59)
          {set_state_max=i+1;break;}
		  else 
		set_state_max=26;  
    }

	        if(set_state>=set_state_max)
			set_state=0;		
   		   	j=200;
			do{a=0xFD;b=b_tab[set_state];c=c_tab[set_state];d=0xFD;
			display();
			display1();
			}while(j--);

		for(m=0;m<9;m++)
			{         
 				timea=set1[2*m+7]*60+set2[2*m+7];

			for(n=m;n<10;n++)
				{
 		        timeb=set1[2*n+7]*60+set2[2*n+7];

					 if(timea<timeb)
					 {set1[2*m+9]=set1[2*n+7];
					  set2[2*m+9]=set2[2*n+7];
					  break;
					 }
				}

	 		
   		 }
			break;


		    case 0x7D:   //十位++
			set1[set_state]++;
			if(set_state>7&&set_state%2==1)
			{if(set1[set_state]>setmax1[set_state])
          		  set1[set_state]=set1[set_state-2];
				
		    }
			else
			{if(set1[set_state]>setmax1[set_state])
          		  set1[set_state]=0;
			}

			break;
		    case 0x7B:	//十位--
			if(set_state>7&&set_state%2==1)
			{	
			   if(set1[set_state]<=set1[set_state-2])
          			  set1[set_state]=setmax1[set_state];
					else
         		   set1[set_state]--;
						
					
		     }
		  	else
			{		if(set1[set_state]<=0)
          			  set1[set_state]=setmax1[set_state];
					else
         		   set1[set_state]--;
			}

			break;



	        case 0x77:	      //个位++
		

   		 if(set_state>7&&set_state%2==1)       //时间段设计
			{
            if(set1[set_state]>set1[set_state-2])
		  		 {	set2[set_state]++;
		 		  	if(set2[set_state]>setmax2[set_state])
         		    set2[set_state]=0;
					}


	         else if(set1[set_state]==set1[set_state-2])
	 			{
	 			set2[set_state]++;
		   		if(set2[set_state]>setmax2[set_state])
           		 set2[set_state]=set2[set_state-2];
				 }
		  
            }

			else
			{
			set2[set_state]++;
		 		  	if(set2[set_state]>setmax2[set_state])
         		    set2[set_state]=0;
			
			}
             

				break;


		    case 0x6f:	      //个位--			
	
	 	if(set_state>=7&&set_state%2==1)
		{

				if(set1[set_state]>set1[set_state-2])
		  		 {	
				    if(set2[set_state]<=0)
            		set2[set_state]=setmax2[set_state];
					else
            		set2[set_state]--;
					}





				else if(set1[set_state]==set1[set_state-2])
					{
					  if(set2[set_state]<=set2[set_state-2])
          			  set2[set_state]=setmax2[set_state];
				      else
          			  set2[set_state]--;
					}

		}	
		else
		{
		    if(set2[set_state]<=0)
            set2[set_state]=setmax2[set_state];
			else
            set2[set_state]--;
		}
		
		break;

					
			case 0x5F:	
			//回写
RT=set1[0];
APGT=set1[1]; 
APGS=set1[2]; 
AGS=set1[3]; 
AYT=set1[4];
AYS=set1[5];

A10=set1[6];
B10=set1[7]; 
A11=set1[8]; 
B11=set1[9]; 
A12=set1[10];
B12=set1[11];

A13=set1[12];
B13=set1[13]; 
A14=set1[14]; 
B14=set1[15]; 
A15=set1[16];
B15=set1[17];

A16=set1[18];
B16=set1[19]; 
A17=set1[20]; 
B17=set1[21]; 
A18=set1[22];
B18=set1[23];
A19=set1[24]; 
B19=set1[25];





BPGT=set2[1]; 
BPGS=set2[2];
BGS=set2[3]; 
BYT=set2[4]; 
BYS=set2[5];

A20=set2[6];
B20=set2[7]; 
A21=set2[8]; 
B21=set2[9]; 
A22=set2[10];
B22=set2[11];

A23=set2[12];
B23=set2[13]; 
A24=set2[14]; 
B24=set2[15]; 
A25=set2[16];
B25=set2[17];
A26=set2[18];
B26=set2[19]; 
A27=set2[20]; 
B27=set2[21]; 
A28=set2[22];
B28=set2[23];
A29=set2[24]; 
B29=set2[25];


second_flag=1;//返回

			 return;
			 break;
            }

        a=tab[set1[set_state]/10];b=tab[set1[set_state]%10];c=tab[set2[set_state]/10];d=tab[set2[set_state]%10];
		display();
    	display1();
	   


	}while(1);


}

void inttime0(void) interrupt 1 using 1
	{
	TH0=0Xd4;	//33ms中断一次,30次为一秒,调整时间一次
	TL0=0X98;
	//复位ds1232
		P3_5=0;
	    _nop_();
		P3_5=1;
		_nop_();
      	P3_5=0;	     
     count++;
	if (count==15)
		{
		count=0;
       	s_flag=~s_flag;





	     count1++;
        

        AYS_time++;
		BYS_time++;
		

		if(AYS==0)  AYS_flag=0;
        if(BYS==0)  BYS_flag=0;

        if(AYS_time==AYS)
		{	
		AYS_flag=~AYS_flag;
        AYS_time=0;
		}

        if(BYS_time==BYS)
		{BYS_flag=~BYS_flag;
        BYS_time=0;
        }



			if (count1==2)
	 			  {
                  count1=0;
				  checktime();
				   time++;
				   if(time>=Alltime)
			   		{time=0;
				  }
			}
		}				  
if(start_flag==1)
{
	switch (zxfa)
       {
        case 0:
		if(AGT==0&&BGT==0)
			{  
            
			if(AYS_flag)
			COMA=0xFD;	
			else
            COMA=0xFF;
             
			if(BYS_flag)
			COMB=0xFD;
			else
            COMB=0xFF;
	



	 		}


		else
				{
		       checkstate();
	   	       control();	
			   }
				break;
		case 1:	
	           control();
				break;
	    case 2:
              COMA=AOUT1[state_man];
              COMB=BOUT1[state_man];
				break;
				}

	  }

	}	


	void checktime(void)
	{
	 if(t_hour<B10|(t_hour==B10&&t_minute<B20))
	 {
	 AGT=A10;
	 BGT=A20;
	 }
	 else if(t_hour<B11|(t_hour==B11&&t_minute<B21))
	 {
	 AGT=A11;
	 BGT=A21;
	 }
	 else if(t_hour<B12|(t_hour==B12&&t_minute<B22))
	 {
	 AGT=A12;
	 BGT=A22;
	 }
	 else if(t_hour<B13|(t_hour==B13&&t_minute<B23))
	 {
	 AGT=A13;
	 BGT=A23;
	 }
	 else if(t_hour<B14|(t_hour==B14&&t_minute<B24))
	 {
	 AGT=A14;
	 BGT=A24;
	 }
	 else if(t_hour<B15|(t_hour==B15&&t_minute<B25))
	 {
	 AGT=A15;
	 BGT=A25;
	 }
	 else if(t_hour<B16|(t_hour==B16&&t_minute<B26))
	 {
	 AGT=A16;
	 BGT=A26;
	 }
	 else if(t_hour<B17|(t_hour==B17&&t_minute<B27))
	 {
	 AGT=A17;
	 BGT=A27;
	 }
	  else if(t_hour<B18|(t_hour==B18&&t_minute<B28))
	 {
	 AGT=A18;
	 BGT=A28;
	 }
	  else if(t_hour<B19|(t_hour==B19&&t_minute<B29))
	 {
	 AGT=A19;
	 BGT=A29;
     }
	}

void checkstate(void)
{  uint temp;
   temp=APGT+APGS+RT+BGT+BGS+BYT+RT;
   if(time<RT)
   state=0;
   else if(time<=APGT)
   state=1;
   else if(time<=APGT+APGS)
   state=2;
   else if(time<=APGT+APGS+RT)
   state=3;
   else if(time<=APGT+APGS+RT+BGT)
   state=4;
   else if(time<=APGT+APGS+RT+BGT+BGS)
   state=5;  
   else if(time<=APGT+APGS+RT+BGT+BGS+BYT)
   state=6;  
   else if(time<=APGT+APGS+RT+BGT+BGS+BYT+RT)
   state=7;  
   else if(time<=temp+BPGT)
   state=8;

⌨️ 快捷键说明

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