📄 show.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 + -