?? laserbeam._c
字號:
/*
電子窗戶防盜網(wǎng)
main.c
硬件:CA-M8
時(shí)鐘:1MHz
*/
#include <io8515v.h>
#include <macros.h>
void DelayUs(unsigned int t)
{
int a;
for (a = 1; a<t; a++){;}
}
void DelayMs(unsigned int t)
{
int a, b;
for (a = 1; a<t; a++){
for (b = 1; b<150; b++){;}
}
}
void main()
{
unsigned char i,a,b,d;
int Alarm1_triggered,Alarm2_triggered; //,Burglar_Triggered;
int Time_Alarm,Alarm1_Time,Alarm2_Time;
Alarm1_triggered =0; //警報(bào)1觸發(fā)標(biāo)記,沒有觸發(fā)為0,觸發(fā)為1
Alarm2_triggered =0; //警報(bào)2觸發(fā)標(biāo)記,沒有觸發(fā)為0,觸發(fā)為1
//Burglar_Triggered=0; //同時(shí)觸發(fā)兩條激光線標(biāo)記,沒有觸發(fā)為0,觸發(fā)為1
Alarm1_Time = 30; //第一級(低音)報(bào)警時(shí)間(毫秒)
Alarm2_Time = 40; //第二級(高音)報(bào)警時(shí)間(毫秒)
DDRC = 0xFF; //整個(gè)C口設(shè)置為輸出
PORTC =0; //C口輸出為0
while (1){
if((Alarm1_triggered==0) && (Alarm2_triggered==0)){
DDRD = 0; // 整個(gè)D口設(shè)置為輸入
PORTD =0xFF; // D口上拉電阻全部有效
PORTC = PORTC & (~1); // C口第3腳C1輸出低電平
PORTC = PORTC | 2; // C口第2腳C2輸出高電平
a =1;
for(i = 0; i < 8; i++){
DDRB = a; // B口第i腳設(shè)置為輸出
PORTB = 0xFF; // B口第i腳輸出高電平,其他腳為輸入腳,上拉電阻有效
DelayUs(50); // 延時(shí)50微秒(20微秒不工作,25微秒以上就可以很好工作)
b = PINB;
d = ~PIND;
if((d!=a) || (b!=0xFF)){ //如果沒有報(bào)警發(fā)生,并且產(chǎn)生了警情,就輸出報(bào)警信號
Alarm1_triggered =1; //標(biāo)記產(chǎn)生了警情
Time_Alarm =0; //報(bào)警計(jì)時(shí)器清0
PORTC = PORTC | BIT(3); //觸發(fā)第一級報(bào)警
goto AlarmStatus;
}
a = a<<1;
}
DDRB = 0; // 整個(gè)B口設(shè)置為輸入
PORTB =0xFF; // B口上拉電阻全部有效
PORTC = PORTC & (~2); // C口第2腳C1輸出低電平
PORTC = PORTC | 1; // C口第3腳C2輸出高電平
a = 1;
for(i = 0; i < 8; i++){
DDRD = a; // D口第i腳設(shè)置為輸出
PORTD = 0xFF; // D口第i腳輸出高電平,其他腳為輸入腳,上拉電阻有效
DelayUs(50); // 延時(shí)50微秒(20微秒不工作,25微秒以上就可以很好工作)
b = ~PINB;
d = PIND;
if((b!=a) || (d!=0xFF)){ //如果沒有報(bào)警發(fā)生,并且產(chǎn)生了警情,就輸出報(bào)警信號
Alarm1_triggered =1; //標(biāo)記產(chǎn)生了警情
Time_Alarm =0; //報(bào)警計(jì)時(shí)器清0
PORTC = PORTC | BIT(3); //觸發(fā)第一級報(bào)警
goto AlarmStatus;
}
a = a<<1;
}
}
AlarmStatus:
if((Alarm1_triggered ==1) || (Alarm2_triggered ==1)){
Time_Alarm = Time_Alarm+1; //報(bào)警時(shí)間計(jì)時(shí)
DelayMs(100); //延時(shí)100毫秒
if((Time_Alarm>Alarm1_Time) && (Alarm2_triggered ==0)){ //觸發(fā)第二級報(bào)警
Alarm1_triggered =0;
Alarm2_triggered =1;
PORTC = PORTC & (~BIT(3)); //第一級報(bào)警時(shí)間到了,報(bào)警關(guān)閉(電話鈴聲)
PORTC = PORTC | BIT(4); //接通第二級報(bào)警
}
if(Time_Alarm>(Alarm1_Time+Alarm2_Time)){
Alarm2_triggered =0; //清除報(bào)警標(biāo)記,停止報(bào)警
PORTC = PORTC & (~BIT(4)); //第二級報(bào)警(高音量)時(shí)間到了,報(bào)警關(guān)閉(高聲喇叭報(bào)警)
//if(Time_Alarm>600)PORTC = PORTC | BIT(5); //接通第五腳進(jìn)行報(bào)警(撥電話號碼報(bào)警)
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -