📄 新建 文本文档.txt
字号:
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
#define baudrate 0x0033
unsigned char flag1=0x00; //主模式标志
unsigned char flag2=0x00; //从模式标志
unsigned char flag3=0x00; //从模式标志
unsigned char temp;
unsigned char temp1;
unsigned char temp2;
unsigned char temp3;
unsigned char temp4;
unsigned char temp5;
unsigned char temp6;
unsigned char temp7;
unsigned char temp8;
unsigned char temp9;
unsigned char temp10;
//unsigned char temp;
//unsigned char temp;
//unsigned char temp;
//unsigned char temp;
#pragma ctask delay_us
void delay_us(unsigned char d)
{
while(d)
{
asm("nop");
asm("nop");
d--;
asm("nop");
asm("nop");
}
return;
} //延时时间=0.125*((d*8-1)+9)=(d+1)us
/*#pragma ctask delay_1ms
void delay_1ms(void)
{
unsigned char i;
for(i=1;i<=10;i++)
{
delay_us(99);
}
}
#pragma ctask delay_ms
void delay_ms(unsigned char b)
{
unsigned char i;
for(i=1;i<=b;i++)
{
delay_1ms();
}
}*/
void delay_1ms(void)
{
unsigned char i=10;
while(i)
{
delay_us(99);
i--;
}
return;
}
void delay_ms(unsigned char b)
{
while(b)
{
delay_1ms();
b--;
}
return;
}
void delay_s(void)
{ unsigned char c=10;
while(c)
{
delay_ms(100);
c--;
}
}
/*void delay_ms(unsigned char b)
{char h;
h=b;
}*/
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0x00; //m103 output only
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
//PORTG = 0x00;
// DDRG = 0x00;
}
void uart_init(void) //baud率设置。。。
{
SREG=0x80;
UCSR0A=0x00;
UCSR0B=0x90;
UCSR0C=0x06;
UBRR0H=(baudrate>>8);
UBRR0L=baudrate;
}
#pragma interrupt_handler uart0_rx:19
void uart0_rx(void) //串口0中断接收
{
unsigned int i;
unsigned char tmpRecv;
EIMSK=0x00;
tmpRecv=UDR0;
if(!(flag1&0x01))
{
if(!(flag2&0x01))
{
if(tmpRecv==0x00)
{
temp1=tmpRecv; ///////////jilu
PORTA|=BIT(0);
//delay_ms(100);
delay_s();
PORTA&=~BIT(0);
flag2|=BIT(0);
}
else
{
PORTC|=BIT(4);
//delay_ms(100);
delay_s();
PORTC&=~BIT(4);
}
}
else if(!(flag2&0x02))
{
if(tmpRecv==0x00)
{
temp2=tmpRecv; ///////////jilu
PORTA|=BIT(0);
//delay_ms(100);
delay_s();
PORTA&=~BIT(0);
flag2|=BIT(1);
}
else
{
PORTC|=BIT(4);
//delay_ms(100);
delay_s();
PORTC&=~BIT(4);
flag2&=~BIT(0);
}
}
else if(!(flag2&0x04))
{
if(tmpRecv==0x00)
{
temp3=tmpRecv; ///////////jilu
PORTA|=BIT(0);
//delay_ms(100);
delay_s();
PORTA&=~BIT(0);
flag2|=BIT(2);
}
else
{
PORTC|=BIT(4);
//delay_ms(100);
delay_s();
PORTC&=~BIT(4);
flag2&=~BIT(0);
flag2&=~BIT(1);
}
}
else if(!(flag2&0x08))
{
PORTA&=~BIT(0);
if(tmpRecv==0x00)
{
temp4=tmpRecv; ///////////jilu
PORTA|=BIT(0);
//delay_ms(100);
delay_s();
PORTA&=~BIT(0);
flag2|=BIT(3);
}
else
{
PORTC|=BIT(4);
delay_ms(80);
PORTC&=~BIT(4);
flag2&=~BIT(0);
flag2&=~BIT(1);
flag2&=~BIT(2);
}
flag1|=BIT(0);
flag2&=~BIT(0);
flag2&=~BIT(1);
flag2&=~BIT(2);
flag2&=~BIT(3);
PORTC|=BIT(0);
//////delay_ms(300);
delay_s();
PORTC&=~BIT(0);
}
}
else if(!(flag1&0x02))
{
temp=tmpRecv;
//PORTC&=~BIT(1);
if(!(flag2&0x10))
{
temp5=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag2|=BIT(4);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag2|=BIT(4);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag2|=BIT(4);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag2|=BIT(4);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag2|=BIT(4);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag2|=BIT(4);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag2|=BIT(4);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag2|=BIT(4);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag2|=BIT(4);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag2|=BIT(4);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag2|=BIT(4);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag2|=BIT(4);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag2|=BIT(4);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag2|=BIT(4);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag2|=BIT(4);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag2|=BIT(4);
} //判断
//delay_ms(100);
delay_s();
if(temp<=0x07) //###### //清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
}
else
{
PORTB&=~BIT(temp-8);
}
}
else if(!(flag2&0x20))
{
temp6=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag2|=BIT(5);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag2|=BIT(5);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag2|=BIT(5);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag2|=BIT(5);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag2|=BIT(5);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag2|=BIT(5);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag2|=BIT(5);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag2|=BIT(5);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag2|=BIT(5);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag2|=BIT(5);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag2|=BIT(5);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag2|=BIT(5);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag2|=BIT(5);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag2|=BIT(5);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag2|=BIT(5);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag2|=BIT(5);
}
//delay_ms(100);
delay_s();
if(temp<=0x07) ////#####//清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
}
else
{
PORTB&=~BIT(temp-8);
}
flag1|=BIT(1);
flag2&=~BIT(4);
flag2&=~BIT(5);
PORTC|=BIT(1);
///////delay_ms(300);
delay_s();
PORTC&=~BIT(1);
PORTC|=BIT(2);
/////delay_ms(300); //发送两个信号
delay_s();
PORTC&=~BIT(2);
}
}
else if(!(flag1&0x04))
{
//PORTC&=~BIT(2);
temp=tmpRecv;
if(!(flag2&0x40))
{
temp7=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag2|=BIT(6);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag2|=BIT(6);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag2|=BIT(6);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag2|=BIT(6);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag2|=BIT(6);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag2|=BIT(6);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag2|=BIT(6);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag2|=BIT(6);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag2|=BIT(6);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag2|=BIT(6);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag2|=BIT(6);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag2|=BIT(6);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag2|=BIT(6);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag2|=BIT(6);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag2|=BIT(6);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag2|=BIT(6);
}
//delay_ms(100);
delay_s();
if(temp<=0x07) //##### //清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
}
else
{
PORTB&=~BIT(temp-8);
}
}
else if(!(flag2&0x80))
{
temp8=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag2|=BIT(7);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag2|=BIT(7);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag2|=BIT(7);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag2|=BIT(7);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag2|=BIT(7);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag2|=BIT(7);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag2|=BIT(7);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag2|=BIT(7);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag2|=BIT(7);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag2|=BIT(7);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag2|=BIT(7);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag2|=BIT(7);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag2|=BIT(7);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag2|=BIT(7);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag2|=BIT(7);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag2|=BIT(7);
}
//delay_ms(100);
delay_s();
if(temp<=0x07) //######## //清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
}
else
{
PORTB&=~BIT(temp-8);
}
flag1|=BIT(2);
flag2&=~BIT(6);
flag2&=~BIT(7);
PORTC|=BIT(1);
///////////delay_ms(300);
delay_s();
PORTC&=~BIT(1);
PORTC|=BIT(2);
////////delay_ms(300);
delay_s();
PORTC&=~BIT(2);
}
}
else if(!(flag1&0x08))
{
temp=tmpRecv;
if(!(flag3&0x01))
{
temp9=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag3|=BIT(0);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag3|=BIT(0);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag3|=BIT(0);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag3|=BIT(0);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag3|=BIT(0);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag3|=BIT(0);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag3|=BIT(0);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag3|=BIT(0);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag3|=BIT(0);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag3|=BIT(0);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag3|=BIT(0);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag3|=BIT(0);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag3|=BIT(0);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag3|=BIT(0);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag3|=BIT(0);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag3|=BIT(0);
}
//delay_ms(100);
delay_s();
if(temp<=0x07) ///###### //清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
}
else
{
PORTB&=~BIT(temp-8);
}
}
else if(!(flag3&0x02))
{
temp10=tmpRecv; ///////////jilu
if(tmpRecv==0x00)
{
PORTA|=BIT(0);
flag3|=BIT(1);
}
else if(tmpRecv==0x01)
{
PORTA|=BIT(1);
flag3|=BIT(1);
}
else if(tmpRecv==0x02)
{
PORTA|=BIT(2);
flag3|=BIT(1);
}
else if(tmpRecv==0x03)
{
PORTA|=BIT(3);
flag3|=BIT(1);
}
else if(tmpRecv==0x04)
{
PORTA|=BIT(4);
flag3|=BIT(1);
}
else if(tmpRecv==0x05)
{
PORTA|=BIT(5);
flag3|=BIT(1);
}
else if(tmpRecv==0x06)
{
PORTA|=BIT(6);
flag3|=BIT(1);
}
else if(tmpRecv==0x07)
{
PORTA|=BIT(7);
flag3|=BIT(1);
}
else if(tmpRecv==0x08)
{
PORTB|=BIT(0);
flag3|=BIT(1);
}
else if(tmpRecv==0x09)
{
PORTB|=BIT(1);
flag3|=BIT(1);
}
else if(tmpRecv==0x0a)
{
PORTB|=BIT(2);
flag3|=BIT(1);
}
else if(tmpRecv==0x0b)
{
PORTB|=BIT(3);
flag3|=BIT(1);
}
else if(tmpRecv==0x0c)
{
PORTB|=BIT(4);
flag3|=BIT(1);
}
else if(tmpRecv==0x0d)
{
PORTB|=BIT(5);
flag3|=BIT(1);
}
else if(tmpRecv==0x0e)
{
PORTB|=BIT(6);
flag3|=BIT(1);
}
else if(tmpRecv==0x0f)
{
PORTB|=BIT(7);
flag3|=BIT(1);
}
//delay_ms(100);
delay_s();
if(temp<=0x07) //清除前一位,使之只有一位为零
{
PORTA&=~BIT(temp);
flag1=0x00;
flag2=0x00;
flag3=0x00;
}
else
{
PORTB&=~BIT(temp-8);
flag1=0x00;
flag2=0x00;
flag3=0x00;
}
PORTC|=BIT(1);
//////delay_ms(300);
delay_s();
PORTC&=~BIT(1);
PORTC|=BIT(2);
//////delay_ms(300);
delay_s();
PORTC&=~BIT(2);
}
}
}
void main(void)
{
port_init();
uart_init();
//SEI();
for(;;)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -