📄 laserbeam._c
字号:
/*
电子窗户防盗网
main.c
硬件:CA-M8
时钟: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; //警报1触发标记,没有触发为0,触发为1
Alarm2_triggered =0; //警报2触发标记,没有触发为0,触发为1
//Burglar_Triggered=0; //同时触发两条激光线标记,没有触发为0,触发为1
Alarm1_Time = 30; //第一级(低音)报警时间(毫秒)
Alarm2_Time = 40; //第二级(高音)报警时间(毫秒)
DDRC = 0xFF; //整个C口设置为输出
PORTC =0; //C口输出为0
while (1){
if((Alarm1_triggered==0) && (Alarm2_triggered==0)){
DDRD = 0; // 整个D口设置为输入
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脚设置为输出
PORTB = 0xFF; // B口第i脚输出高电平,其他脚为输入脚,上拉电阻有效
DelayUs(50); // 延时50微秒(20微秒不工作,25微秒以上就可以很好工作)
b = PINB;
d = ~PIND;
if((d!=a) || (b!=0xFF)){ //如果没有报警发生,并且产生了警情,就输出报警信号
Alarm1_triggered =1; //标记产生了警情
Time_Alarm =0; //报警计时器清0
PORTC = PORTC | BIT(3); //触发第一级报警
goto AlarmStatus;
}
a = a<<1;
}
DDRB = 0; // 整个B口设置为输入
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脚设置为输出
PORTD = 0xFF; // D口第i脚输出高电平,其他脚为输入脚,上拉电阻有效
DelayUs(50); // 延时50微秒(20微秒不工作,25微秒以上就可以很好工作)
b = ~PINB;
d = PIND;
if((b!=a) || (d!=0xFF)){ //如果没有报警发生,并且产生了警情,就输出报警信号
Alarm1_triggered =1; //标记产生了警情
Time_Alarm =0; //报警计时器清0
PORTC = PORTC | BIT(3); //触发第一级报警
goto AlarmStatus;
}
a = a<<1;
}
}
AlarmStatus:
if((Alarm1_triggered ==1) || (Alarm2_triggered ==1)){
Time_Alarm = Time_Alarm+1; //报警时间计时
DelayMs(100); //延时100毫秒
if((Time_Alarm>Alarm1_Time) && (Alarm2_triggered ==0)){ //触发第二级报警
Alarm1_triggered =0;
Alarm2_triggered =1;
PORTC = PORTC & (~BIT(3)); //第一级报警时间到了,报警关闭(电话铃声)
PORTC = PORTC | BIT(4); //接通第二级报警
}
if(Time_Alarm>(Alarm1_Time+Alarm2_Time)){
Alarm2_triggered =0; //清除报警标记,停止报警
PORTC = PORTC & (~BIT(4)); //第二级报警(高音量)时间到了,报警关闭(高声喇叭报警)
//if(Time_Alarm>600)PORTC = PORTC | BIT(5); //接通第五脚进行报警(拨电话号码报警)
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -