?? 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 + -