📄 main._c
字号:
#include<iom16v.h>
#include<macros.h>
#define ROOM1_SHOW asm("cbi 0x1b,0")
#define ROOM1_DOWN asm("sbi 0x1b,0")
#define ROOM2_SHOW asm("sbi 0x1b,1")
#define ROOM2_DOWN asm("cbi 0x1b,1")
unsigned char flag_twinkle1;
unsigned char flag_twinkle2;
unsigned char flag_stake;
unsigned char stakeout_key;
unsigned char data;
unsigned char data_stake;
unsigned char r_data[10];
unsigned int second1,second2;
//延时us级
void Delay_1us(void)
{
unsigned int i;
for(i=1;i<1000;i++)
;
}
//延时ms级
void Delay_1ms(void)
{
unsigned int i;
for(i=1;i<900;i++)
;
}
// 延时
void Delay(unsigned int n)
{
unsigned int i=0;
for(i=0;i<n;i++)
Delay_1ms();
}
//查询接收
unsigned char Uart_Read_Data(void)
{
if(UCSRA&0x80) {data=UDR; data_stake=data;}
//else ;
}
//查询发送
void Uart_Write_Data(unsigned char r_data)
{
if(!(UCSRA&0x40)) UDR=r_data;
//else;
}
//*************************************************
//照明控制系统
//*************************************************
//房间选择
void Room_Select()
{
if(((data&0xc3)==0x01)|(data==0x00)) Room1_Handle(); //房间1处理
else if(((data&0xc3)==0x02)|((data&0xc3)==0x03)) Room2_Handle(); //房间2处理
//else ;
}
//房间1处理
unsigned char Room1_Handle(void)
{
if(data&0x01) {flag_twinkle1=0; PORTB=(0xfe&PINB);}
else if(data==0x00) {flag_twinkle1=0; PORTB=(0xfd|PINB);}
//if(FLAG_TWINKLE1) Room_Twinkle(SECOND1,SECOND2);
if((data&0x1c)==0x1c) {flag_twinkle1=1; second1=500;}//Room_Twinkle(500,SECOND2);} //房间1_0.5s闪烁
else if((data&0x1c)==0x10) {flag_twinkle1=1; second1=1000;}//Room_Twinkle(1000,SECOND2);} //房间1_1s闪烁
else if((data&0x1c)==0x14) {flag_twinkle1=1; second1=2000;}//Room_Twinkle(2000,SECOND2);} //房间1_2s闪烁
else if((data&0x1c)==0x18) {flag_twinkle1=1; second1=3000;}//Room_Twinkle(3000,SECOND2);} //房间1_3s闪烁
//else ;
}
//房间1闪烁处理
void Room_Twinkle(unsigned int second1,unsigned int second2)
{
if(flag_twinkle1)
{
PORTB=(0xfe&PINB); //1开
Delay(second1);
PORTB^=0x01; //1关
//PORTA=0xff; //2关
Delay(second1);
PORTB=(0xfe&PINB); //1开
}
if(flag_twinkle2)
{
PORTB=(0xfd&PINB); //2开
Delay(second2);
PORTB^=0x02; //2关
//PORTA=0xff; //1关
Delay(second2);
PORTB=(0xfd&PINB); //2开
}
}
//房间2处理
unsigned char Room2_Handle(void)
{
if((data&0x03)==0x02) {flag_twinkle2=0; PORTB=(0xfd&PINB);}
else {flag_twinkle2=0; PORTB=(0xfe|PINB);}
//if(FLAG_TWINKLE2) Room_Twinkle(SECOND1,SECOND2);
if((data&0x1c)==0x1c) {flag_twinkle2=1; second2=500;}//Room_Twinkle(SECOND1,500);} //房间2_0.5s闪烁
else if((data&0x1c)==0x10) {flag_twinkle2=1; second2=1000;}//Room_Twinkle(SECOND1,1000);} //房间2_1s闪烁
else if((data&0x1c)==0x14) {flag_twinkle2=1; second2=2000;}//Room_Twinkle(SECOND1,2000);} //房间2_2s闪烁
else if((data&0x1c)==0x18) {flag_twinkle2=1; second2=3000;}//Room_Twinkle(SECOND1,3000);} //房间2_3s闪烁
//else ;
}
//********************************************
//安防监视系统
//********************************************
void stakeout(void)
{
if(data==0x41) flag_stake=1;
else {flag_stake=0; stakeout_key=0;}
if((!(PIND&0x04))&flag_stake) stakeout_key=1;
while(flag_stake&stakeout_key)
{
Uart_Read_Data();
if(data_stake==0x45) {data_stake=0; Uart_Write_Data(0x45);}
if(data==0x40) {flag_stake=0; stakeout_key=0;}
else
{
PORTB=0xfb;
Delay_1us();
PORTB^=0x04;
Delay_1us();
}
}
}
//***************************************
//电视系统
//***************************************
void tv_
//主函数
void main(void)
{
PORTA=0xff;
DDRA=0xff;
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
UBRRH=0x00; //初始化串口9600
UBRRL=0x33;
UCSRB=0x18; //发送接收允许
Delay_1ms();
while(1)
{
Uart_Read_Data();
Room_Select();
Room_Twinkle(second1,second2);
stakeout();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -