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

📄 traffic.c

📁 交通灯实验 1.掌握交通灯控制原理 2.掌握用DSP方法驱动交通灯的方法。 17.2 实验原理 在本实验中交通灯用发光二极管模拟。这种发光二极管有三个引脚。一个接地
💻 C
字号:
#include "2407c.h"   
volatile ioport unsigned int port802C; 
#define TRAFFIC port802C   
volatile ioport unsigned int port800C;  
#define KEY  port800C   
void delay_nus(long int n);   
void delay_ns(long int n);
void Max_CS(int ab,int val); 
void Max_CLK(int ab,int val);
void Max_DIN(int ab,int val);
void Max_SEND(unsigned int val); 
void LED_init(void);
void dly_nus(long int n);
int key_hit(void);
int READ_KEY(void);
void TREFFIC_test(void) ; 
int uWork;
void main(void)
{
   	asm(" setc INTM");
	*WDCR=0X6F;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;		/* 关闭看门狗 */
	*SCSR1=0x83fe;    	/* DSP运行频率2倍 */    
	uWork=(*MCRC);
	uWork&=0x0ff01;
	(*MCRC)=uWork;
	WSGR = 0x01C9; 
    TRAFFIC=0;
    LED_init();    
   TREFFIC_test() ;
}        
void watchdog(void)
{
     	asm(" nop");
     	asm(" nop");
}

void delay_nus(long int n)
{
	int i;
	long int j;
	for (j=1;j<=n;j++)
	{
		for (i=0;i<3;i++)
	    	{
	    		 watchdog();  
             }
	}
} 
void delay_ns(long int n)
{
	int i;
	long int j;
	for (j=1;j<=n;j++)
	{
		for (i=0;i<3;i++)
	    	{
	    		 		asm(" NOP "); 
	    		 		asm(" NOP "); 
	    		 		asm(" NOP "); 
	    		 		asm(" NOP "); 
             }
	}
} 


void Max_CS(int ab,int val)
{    
    watchdog();
 if (ab==0)
 {
   		*MCRC=(*MCRC)&0x0FF01;
   		*PEDATDIR=(*PEDATDIR)|0x07C00;
  		if (val!=0)
  		{
   			*PEDATDIR=(*PEDATDIR)|0x0010;
  		}
  		if(val==0)
  		{
   			*PEDATDIR=(*PEDATDIR)&0x0FFEF;
  		}
 }
 else
 {

 }

}

void Max_CLK(int ab,int val)
{    
    watchdog();
 if (ab==0)
 {
   		*MCRC=(*MCRC)&0x0FF01;
   		*PEDATDIR=(*PEDATDIR)|0x07C00;
  		if (val!=0)
  		{
   			*PEDATDIR=(*PEDATDIR)|0x0008;
  		}
  		if(val==0)
  		{
   			*PEDATDIR=(*PEDATDIR)&0x0FFF7;
   		}
  		
 }
 else
 {
    watchdog();
 }

} 


void Max_DIN(int ab,int val)
{    
    watchdog();
 if (ab==0)
 {
   		*MCRC=(*MCRC)&0x0FF01;
   		*PEDATDIR=(*PEDATDIR)|0x07C00;
  		if (val!=0)
  		{
   			*PEDATDIR=(*PEDATDIR)|0x0004;
  		}
  		if(val==0)
  		{
   			*PEDATDIR=(*PEDATDIR)&0x0FFFB;
  		}
 }
 else
 {

 }

}


void Max_SEND(unsigned int val)
{
 int i;    
 unsigned int tmp;
  
 Max_CS(0,1);
 Max_CLK(0,0);
 Max_CS(0,1);
 Max_CS(0,0);
  
 for (i=0;i<16;i++)
 {
     Max_CLK(0,0);
     tmp= 0x8000>>i; 
     Max_DIN(0,val&tmp);
     Max_CLK(0,0);
	 Max_CLK(0,1);
 }  
 
 Max_CS(0,1);
}  

void dly_nus(long int n)
{
	int i;
	long int j;
	for (j=1;j<=n;j++)
	{
		for (i=0;i<3;i++) 	 
		{
		watchdog();
		}
	}
}
 
int key_hit(void)
{   
	watchdog();
	if((KEY&0x000F)==0x000F) return (0);
	dly_nus(5000); 
	if((KEY&0x000F)==0x000F) return (0);
	return (1);
}

int READ_KEY(void)
{
	unsigned int row=0,col=0;
	unsigned int mask;
	unsigned int tmp;

	watchdog(); 
	KEY=0x0000;
	if (key_hit()==0)     return(255);
	mask=0x0001; 
	KEY=(~mask);
	tmp=KEY;
	while((((tmp&0x000F)==0x000F)&&(mask<0x0010)))
	{    
		watchdog();
		++row; 	mask*=2;
		KEY=(~mask); tmp=KEY;
	}

	mask=0x01; 
	
	while(tmp&mask)
	{
		++col; 	mask*=2; 
		mask=mask&0x000F;  watchdog();
	} 
	 
    KEY=0x0000;
	while(key_hit()==0)	{watchdog();}
	tmp=row*4+col;
	return (tmp);
}
void LED_init(void)
{   
		int j;
  		Max_SEND(0x0F00);
 	 	Max_SEND(0x0C01);
  		Max_SEND(0x0A04);
  		Max_SEND(0x0B07);
  		Max_SEND(0x09FF); 
  		Max_SEND(0x0F01); 
	 	delay_nus(10000); 
  		Max_SEND(0x0F00); 
		for (j=1;j<9;j++)
		{
  			Max_SEND(j*0x100+0x000F);
  		}
}      
    
void TREFFIC_test(void)
{
  int i;
   *XINT2CR=0x8001;

    LED_init();
while (READ_KEY()!=17)
{  
   
   TRAFFIC=0x00AA;
   delay_nus(20000);         

   TRAFFIC=0x0099;
   for ( i=9;i>=0;i--)
   {
    Max_SEND(0x0100+i);
   delay_nus(20000);
   }
    Max_SEND(0x010F);

   TRAFFIC=0x0066;
    delay_nus(20000);
   TRAFFIC=0x0022;
    delay_nus(20000);
   TRAFFIC=0x0066;
   delay_nus(20000);
   TRAFFIC=0x0022;
   delay_nus(20000);
   TRAFFIC=0x0066;
   delay_nus(20000);
   TRAFFIC=0x0022;
    delay_nus(20000);
   TRAFFIC=0x0066;
   delay_nus(20000);
   TRAFFIC=0x00EE;
   for ( i=3;i>=0;i--)
   {
    Max_SEND(0x0100+i);
    delay_nus(20000);
   }
    Max_SEND(0x010F);
   
   TRAFFIC=0x0099;
   for ( i=9;i>=0;i--)
   {
    Max_SEND(0x0100+i);
    delay_nus(20000);
   }
    Max_SEND(0x010F);

   TRAFFIC=0x0099;
   delay_nus(20000);
   TRAFFIC=0x0088;
   delay_nus(20000);
   TRAFFIC=0x0099;
   delay_nus(20000);
   TRAFFIC=0x0088;
   if(READ_KEY()==17) return;
   delay_nus(20000);
   TRAFFIC=0x0099;
   if(READ_KEY()==17) return;
   delay_nus(20000);
   TRAFFIC=0x0088;
   if(READ_KEY()==17) return;
   delay_nus(20000);
   TRAFFIC=0x0099;
   if(READ_KEY()==17) return;
   delay_nus(20000);

   TRAFFIC=0x00BB;
   for ( i=3;i>=0;i--)
   {
    Max_SEND(0x0100+i);
   if(READ_KEY()==17) return;
    delay_nus(20000);
   }

    Max_SEND(0x010F);

	}

}    



⌨️ 快捷键说明

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