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

📄 show.c

📁 开发平台是ICCAVR的
💻 C
字号:
 
#include<iom16v.h>
#include<macros.h>
#define  codeaddr  0x09
#define  codemode  0x00
#define  lightaddr  0x0a
#define  lightmode  0x09
#define  scanaddr  0x0b
#define  scannum  0x07
#define  testaddr 0x0f
#define  testmode 0x01
#define  shutaddr 0x0c
#define  shutnormal 0x01

unsigned char addr1=0x00;
unsigned char addr2=0x05;
unsigned char addr3=0x02;
unsigned char addr4=0x06;
unsigned char data;
unsigned char n;
unsigned char count=0x07;
unsigned char count1=0xf3;
unsigned char temp1;
unsigned char temp2;
unsigned char temp3;
unsigned char temp4;

void select_1()
{
  if(data==0xac)   count++;
    else if(data==0xa8)  count--;
  if(count<0x0a)  temp1=count;
    else if(count>0x09)
	 { temp1=(count-0x0a);temp2=0x01;}
  
}
    
void select_2()
{ 
  unsigned char i;
  unsigned char j=0x00;
  if(data==0xc5)   count1++;
    else if(data==0xc9)  count1--;
  if(count1<=0x09) temp3=count1;
    else if(count1>0x09)
	  { 
	    for(i=0;i<count1;i++)
	       {  if((i==0x09)||(i==0x13)||(i==0x1d)) j++;}
	  temp3=(count1-10*j);temp4=j;
	  }
}

void data_select()
{  if((data&0xc0)==0x80) select_1();
   else if((data&0xc0)==0xc0)  select_2();
 }
    

	
	
//查询方式接收

unsigned char Uart_Receive( void ) {
     
	/* 等待接收数据*/
	while (!(UCSRA&(1<<RXC)));
	/* 从缓冲器中获取并返回数据*/
	data=UDR;
}

void Uart_Transmit(unsigned char k) 
{

	/* 等待发送缓冲器为空*/
	while (!(UCSRA&(1<<UDRE)));
	/* 将数据放入缓冲器,发送数据*/
	UDR=k;
}

void delay()
{ unsigned int i,j;
  
  for(i=1;i<1000;i++)
     { for(j=1;j<200;j++)
	     ;
	 }
}

void show(unsigned char addr,unsigned char content)
{ unsigned char i,j;
  addr=addr1;
  content=temp1;
  
  for(i=8;i>0;i--)
    { PORTA=(PINA&0x3f);
	  Uart_Transmit(PINA);
	  //PORTA=PINA&0xbf;
	  //Uart_Transmit(PINA);
	  //Uart_Transmit(addr);
	  PORTA=PINA&(((addr&0x80)>>2)|0x1f);
	   Uart_Transmit(PINA);
	  addr=addr<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	 
	}
   for(j=8;j>0;j--)
    { PORTA=(PINA&0x3f);
	  //PORTA=PINA&0x7f;
	  Uart_Transmit(content);
	  PORTA=PINA&(((content&0x80)>>2)|0x1f);
	   Uart_Transmit(PINA);
	  content=content<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	}
    PORTA=PINA|0x40;
  
  
    addr=addr2;
    content=temp2; 
  for(i=8;i>0;i--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(addr);
	  PORTA=PINA&(((addr&0x80)>>2)|0x1f);
	   Uart_Transmit(PINA);
	  addr=addr<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	 
	}
	 for(j=8;j>0;j--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(content);
	  PORTA=PINA&(((content&0x80)>>2)|0x1f);
	  content=content<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	}
    PORTA=PINA|0x40;
}
	
void show1(unsigned char addr,unsigned char content)
{ unsigned char i,j;
  addr=addr3;
  content=temp3;
  for(i=8;i>0;i--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(addr);
	  PORTA=PINA&(((addr&0x80)>>2)|0x1f);
	  Uart_Transmit(PINA);
	  addr=addr<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	}
    
	 
	
   for(j=8;j>0;j--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(content);
	  PORTA=PINA&(((content&0x80)>>2)|0x1f);
	  Uart_Transmit(PINA);
	  content=content<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	}
    PORTA=PINA|0x40;
  
    addr=addr4;
    content=temp4; 
  for(i=8;i>0;i--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(addr);
	  PORTA=PINA&(((addr&0x80)>>2)|0x1f);
	    Uart_Transmit(PINA);
	  addr=addr<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	 
	}
   for(j=8;j>0;j--)
    { PORTA=PINA&0xbf;
	  PORTA=PINA&0x7f;
	  Uart_Transmit(content);
	  PORTA=PINA&(((content&0x80)>>2)|0x1f);
	    Uart_Transmit(PINA);
	  content=content<<1;
	  delay();
	  PORTA=PINA|0x80; 
	  delay();
	}
    PORTA=PINA|0x40;
 }
 
 void main(void)
 { 	//show(codeaddr,codemode);  //编码方式设定,不采用编码
	//show(lightaddr,lightmode);  //设定亮度
	//show(scanaddr,scannum);  //设置扫描速率
	//show(testaddr,testmode); //检测方式
	//show(shutaddr,shutnormal);
  PORTA=0xff;
  DDRA=0xff;
  PORTB=0xfe;
  DDRB=0xff;
  PORTC=0xff;
  DDRC=0xff;
  UCSRA=0x02;  //倍速模式
  UCSRB=0x18;  //发送接收允许
  UCSRC=0x86;  //选择异步传输模式,设置数据长度8位,1位停止位
  UBRRH=0x00;  //初始化串口9600,f=8m
  UBRRL=0x67;
  
	while(1)
	{
	
	Uart_Receive();
	Uart_Transmit(data);
	delay();
	data_select();
	if((data&0xc0)==0x80) show(temp1,temp2);
      else if((data&0xc0)==0xc0)  show1(temp3,temp4);
	
	delay(); 
	
	}
}
	
	
	  
	  

⌨️ 快捷键说明

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