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

📄 leson4._c

📁 rewtr y vruutuyukyuj
💻 _C
字号:
#include  <io2313v.h>
#include  <macros.h>
#define  uint   unsigned int 
#define  uchar  unsigned char
uchar   rdata;



void WDT_off(void)
{
//__disable_interrupt();
//__watchdog_reset();
//#asm("cli");
SREG &= ~0x80;
// Clear WDRF in MCUSR 
MCUSR &= ~0x08;
// Write logical one to WDCE and WDE
// Keep old prescaler setting to prevent unintentional time-out
WDTCSR |= 0x18;
// Turn off WDT 
WDTCSR = 0x00;
SREG |= 0x80;
//#asm("sei");
//__enable_interrupt();
}    

void USART_Init(unsigned int  baud)
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = 0x18;
/* Set frame format: 8data, 2stop bit */
UCSRC = 0x0E;
//U2X=0;
}


void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (UCSRA&0x20)) );
/* Put data into buffer, sends the data */
UDR = data;		 		 	   	   		  			 //Transmit 8  data  bits
}

/*
void USART_Transmit( unsigned int data )
{
//Wait for empty transmit buffer 
while (!( UCSRA & (1<<UDRE)));
// Copy 9th bit to TXB8 
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);
// Put data into buffer, sends the data 
UDR = data;		 		 	   	   		  			//Transmit 9  data  bits
}
*/


unsigned char USART_Receive( void )
{
// Wait for data to be received 
while ( !(UCSRA & (UCSRA&0x80)) );
//Get and return received data from buffer 
return UDR;		 		  	   			   			//Receive  8  data  bits
}

/*
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
// Wait for data to be received 
while ( !(UCSRA & (1<<RXC)) );
// Get status and 9th bit, then data 
// from buffer 
status = UCSRA;
resh = UCSRB;
resl = UDR;
// If error, return -1 
if ( status & (1<<FE)|(1<<DOR)|(1<<UPE) )
return -1;
// Filter the 9th bit, then return 
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);	   		//Receive   9 data bits
}
*/

void  delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
  {
  for(j=0;j<1141;j++);
  }
}
void  delayus(uint us)
{

uint i;
 
  for(i=0;i<us;i++)
  {
  NOP();NOP();NOP();NOP();
  }
}
void  senddata(uint data)               //  dm13a(led 驱动子程序)
{
uchar i;
for(i=0;i<16;i++)
{
PORTD&=~0x10;	
NOP();
if(data&0x8000)
PORTD|=0x20; 	 	  					        //置位操作
else	
PORTD&=~0x20;									//清零操作
NOP();
PORTD|=0x10;
NOP();
data=data<<1;
}		 		   	 	  				
PORTD|=0x08;
NOP();
PORTD&=~0x08;

//PORTD|=(1<<PORTD5);		 		   	 	  					//置位操作
//PORTD&=~(1<<PORTD5);		 	   	 		   			  		//清零操作
}

void main() 
{

DDRD|=0x38;

WDT_off();

USART_Init(9600);
delayms(20);
delayms(20);
delayms(20);

	  USART_Receive();
	  rdata=UDR;
	  switch(rdata)
	  {
	  case 55:goto start1;break;
	  case 66:goto start2;break;
	  case 77:goto start3;break;
	  case 88:goto start4;break;
	  }
while(1)
{      
uchar i;
uchar h;
uint  j=0x0001;
uint  k=0xffff;
uint  m=0x4000;
uint  n=0xffff;




start1:		
		for(i=0;i<16;i++)
		{
		senddata(j);
		delayms(20);                    //左到右逐渐亮
		j=j<<1;
		j=j+1;
		}


start2:		
    	for(i=0;i<15;i++)               //左到右逐渐灭
		{
		if((i>5)&&(i<10))
		{
		for(h=0;h<20;h++)
		{
		senddata(k);
		delayus(800);
		senddata(0x00);
		delayus(200);
		}
		k=k<<1;
		}
		else if(i>10)
		{
		for(h=0;h<20;h++)
		{
		senddata(k);
		delayus(600);
		senddata(0x00);
		delayus(400);
		}
		k=k<<1;
		
		}
		else
		{
		senddata(k);
		delayms(20);
		k=k<<1;
		}
		}
		

start3:		
		for(i=0;i<16;i++)                //右到左逐渐亮
		{
		senddata(m);
		delayms(20);
		m=m>>1;
		m=m+0x4000;
		}
		
	
start4:
		
		for(i=0;i<16;i++)                //右到左逐渐灭
		{
		if((i>5)&&(i<10))
		{
		for(h=0;h<20;h++)
		{
		senddata(n);
		delayus(800);
		senddata(0x00);
		delayus(200);
		}
		n=n>>1;
		}
		else if(i>10)
		{
		for(h=0;h<20;h++)
		{
		senddata(n);
		delayus(600);
		senddata(0x00);
		delayus(400);
		}
		n=n>>1;
		
		}
		else
		{
		senddata(n);
		delayms(20);
		n=n>>1;
		}
		
		}

}


}

⌨️ 快捷键说明

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