📄 intmcu.c
字号:
#include "main.h"
Uchar DI_Status[3];
Uchar PINA_temp,PINB_temp,PINE_temp,PINF_temp;
unsigned char DI_data_cur[12],DI_data[12],DI_data_pre[12]; //状态寄存器
void port_init(void) //端口初始化
{
DDRA = 0x00;
DDRB = 0xe0;
DDRE = 0x00;
DDRF = 0x00;
DDRC = 0x00;
DDRD = 0x10;
PORTG = 0x08;
DDRG = 0x08;
}
void DI_handle(void) //开关状态读取
{
PINA_temp = PINA;
PINB_temp = PINB;
PINE_temp = PINE;
PINF_temp = PINF;
/**************Channel 1*****************/
if(PINA_temp & (1<<3))
DI_Status[0] |= (1<<0);
else
DI_Status[0] &= (~(1<<0));
if(PINF_temp & (1<<2))
DI_Status[0] |= (1<<1);
else
DI_Status[0] &= (~(1<<1));
/**************Channel 2*****************/
if(PINF_temp & (1<<3))
DI_Status[0] |= (1<<2);
else
DI_Status[0] &= (~(1<<2));
if(PINA_temp & (1<<2))
DI_Status[0] |= (1<<3);
else
DI_Status[0] &= (~(1<<3));
/**************Channel 3*****************/
if(PINE_temp & (1<<7))
DI_Status[0] |= (1<<4);
else
DI_Status[0] &= (~(1<<4));
if(PINE_temp & (1<<1))
DI_Status[0] |= (1<<5);
else
DI_Status[0] &= (~(1<<5));
/**************Channel 4*****************/
if(PINE_temp & (1<<0))
DI_Status[0] |= (1<<6);
else
DI_Status[0] &= (~(1<<6));
if(PINE_temp & (1<<6))
DI_Status[0] |= (1<<7);
else
DI_Status[0] &= (~(1<<7));
/**************Channel 5*****************/
if(PINA_temp & (1<<5))
DI_Status[1] |= (1<<0);
else
DI_Status[1] &= (~(1<<0));
if(PINF_temp & (1<<0))
DI_Status[1] |= (1<<1);
else
DI_Status[1] &= (~(1<<1));
/**************Channel 6*****************/
if(PINF_temp & (1<<1))
DI_Status[1] |= (1<<2);
else
DI_Status[1] &= (~(1<<2));
if(PINA_temp & (1<<4))
DI_Status[1] |= (1<<3);
else
DI_Status[1] &= (~(1<<3));
//PB1,PE3 PE2,PB0 PA7,PA1 PA0,PA6 PB3,PE5 PE4,PB2
/**************Channel 7*****************/
if(PINB_temp & (1<<1))
DI_Status[1] |= (1<<4);
else
DI_Status[1] &= (~(1<<4));
if(PINE_temp & (1<<3))
DI_Status[1] |= (1<<5);
else
DI_Status[1] &= (~(1<<5));
/**************Channel 8*****************/
if(PINE_temp & (1<<2))
DI_Status[1] |= (1<<6);
else
DI_Status[1] &= (~(1<<6));
if(PINB_temp & (1<<0))
DI_Status[1] |= (1<<7);
else
DI_Status[1] &= (~(1<<7));
/**************Channel 9*****************/
if(PINA_temp & (1<<7))
DI_Status[2] |= (1<<0);
else
DI_Status[2] &= (~(1<<0));
if(PINA_temp & (1<<1))
DI_Status[2] |= (1<<1);
else
DI_Status[2] &= (~(1<<1));
/**************Channel 10*****************/
if(PINA_temp & (1<<0))
DI_Status[2] |= (1<<2);
else
DI_Status[2] &= (~(1<<2));
if(PINA_temp & (1<<6))
DI_Status[2] |= (1<<3);
else
DI_Status[2] &= (~(1<<3));
/**************Channel 11*****************/
if(PINB_temp & (1<<3))
DI_Status[2] |= (1<<4);
else
DI_Status[2] &= (~(1<<4));
if(PINE_temp & (1<<5))
DI_Status[2] |= (1<<5);
else
DI_Status[2] &= (~(1<<5));
/**************Channel 12*****************/
if(PINE_temp & (1<<4))
DI_Status[2] |= (1<<6);
else
DI_Status[2] &= (~(1<<6));
if(PINB_temp & (1<<2))
DI_Status[2] |= (1<<7);
else
DI_Status[2] &= (~(1<<7));
///test
// if((DI_Status[0] != 0xaa) || (DI_Status[1] != 0xaa) || (DI_Status[1] != 0xaa))
// PORTB |= (1<<5);
data_tranfer(); //刷新DI_data_cur[]的值
}
void data_tranfer(void)
{
unsigned char i,j;
for(j=0;j<3;j++)
{
for(i=0;i<8;i=i+2)
{
if(((DI_Status[j]>>i) & 0x03) == 0x03)
DI_data_cur[(j<<2)+(i>>1)] = 0x5a;
else if(((DI_Status[j]>>i) & 0x03) == 0x00)
DI_data_cur[(j<<2)+(i>>1)] = 0;
else if(((DI_Status[j]>>i) & 0x03) == 0x02)
DI_data_cur[(j<<2)+(i>>1)] = 0xa5;
}
}
}
void timer0_init(void)
{
TCCR0A = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x83; //set count
OCR0 = 0x7D;
TCCR0A = 0x05; //start timer
}
void init_devices(void)
{
port_init();
timer0_init();
TIMSK0 = 0x01;
}
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -