红外报警系统Word下载.docx
- 文档编号:20346988
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:107.52KB
红外报警系统Word下载.docx
《红外报警系统Word下载.docx》由会员分享,可在线阅读,更多相关《红外报警系统Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
6系统的检测与调试:
对于时钟精确度的检测,我们给系统提供电源使其运行12个小时后,再与标准时间对照,确定时钟系统在12小时内几乎无误差,精确运行。
对于报警系统的检测,我们甚至用一根细线在光电开关前迅速划过,结果系统及时精确报警,灵敏度极高。
所需资源:
Mega16单片机、CourseProject实验板、4位的七段数码管、光电开关、红色LED,电阻若干,导线若干。
应用拓展:
见证了我们作品的实际效果之后,我们联想到可以把此装置加以改进,制成短跑冲刺时的精确记录统计装置。
当运动员冲过终点线(光电开关正对的水平直线)时,此装置精确记录下时刻,十分精确灵敏。
当然,要实现这种用途,在软硬件上还要做出少许改动。
参考资料:
《AVR单片机嵌入式系统原理与应用实践》
《大学生科技创新大赛培训教程》
《单片机与C语言开发》
7源程序:
//ICC-AVRapplicationbuilder:
2009-6-722:
20:
51
//Target:
M16
//Crystal:
4.0000Mhz
#include<
iom16v.h>
macros.h>
voidport_init(void)
{
PORTB=0x1E;
DDRB=0x23;
PORTA=0x00;
DDRA=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
}
voidinit_devices(void)
CLI();
port_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;
SEI();
}
voiddelay_nus(unsignedintn);
voiddelay_nms(unsignedintn);
voidmain(void)
{PORTB=0x1E;
while
(1)
{if((PINB&
0b10000000)==0)
{
PORTB=0x7D;
delay_nms(30000);
}
voiddelay_nus(unsignedintn)
unsignedinti;
for(i=0;
i<
n;
i++)
{
asm("
nop"
);
voiddelay_nms(unsignedintn)
unsignedinti;
for(i=0;
i++)
delay_nus(1000);
/*******************************************************
Filename;
时钟
Chiptype;
ATmega16
Programtype;
Application
Clockfrequency;
1.000000MHz
Memorymodel;
Small
ExternalSPAMsize;
0
Datastacksize;
256
********************************************************/
unsignedcharled_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharposition[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsignedintt[9]={0,956,865,759,716,638,568,506,470};
unsignedchard[9]={0,105,116,132,140,157,176,198,209};
#defineMax_note32
unsignedcharmusic[Max_note]={5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,3,2,3,2,1,2,3,2,4,2,5,8};
unsignedcharnote_n;
unsignedintint_n;
intplay_on;
unsignedchartime[3],time_set[3];
unsignedchardis_buff[6];
unsignedchartime_counter,key_stime_counter;
unsignedcharclock_state=6,return_time;
intpoint_on,set_on,time_1s_ok,key_stime_ok;
voiddisplay(void)
staticunsignedcharposit=0;
PORTD=0xff;
PORTA=led_7[dis_buff[posit]];
if(set_on&
&
(posit==clock_state))PORTA=0x00;
if(point_on&
(posit==2||posit==4))PORTA|=0x80;
PORTD=position[posit];
if(++posit>
=6)posit=0;
#pragmainterrupt_handlertimer0_comp_isr:
iv_TIMER0_COMP
voidtimer0_comp_isr(void)
display();
if(++key_stime_counter>
=5)
key_stime_counter=0;
key_stime_ok=1;
if(!
(++time_counter%25))set_on=!
set_on;
if(time_counter>
=100)
{
time_counter=0;
time_1s_ok=1;
}
#pragmainterrupt_handlertimer1_compa_isr:
iv_TIMER1_COMPA
voidtimer1_compa_isr(void)
if(!
play_on)
note_n=0;
int_n=1;
play_on=1;
else
if(--int_n==0)
TCCR1B=0x08;
if(note_n<
Max_note)
{
OCR1A=t[music[note_n]];
int_n=d[music[note_n]];
note_n++;
int_n=int_n*music[note_n];
TCCR1B=0x09;
}
else
play_on=0;
voidtime_to_disbuffer(unsignedchar*time)
unsignedchari,j=0;
for(i=0;
=2;
dis_buff[j++]=time[i]%10;
dis_buff[j++]=time[i]/10;
#definekey_inputPINC
#definekey_mask0b11000000
#definekey_no0
#definekey_k11
#definekey_k22
#definekey_state_00
#definekey_state_11
#definekey_state_22
unsignedcharread_key(void)
staticunsignedcharkey_state=0,key_old;
unsignedcharkey_press,key_return=key_no;
key_press=key_input&
key_mask;
switch(key_state)
casekey_state_0:
if(key_press!
=key_mask)
key_old=key_press;
key_state=key_state_1;
break;
casekey_state_1:
if(key_press==key_old)
if(key_press==0b01000000)key_return=key_k1;
elseif(key_press==0b01000000)key_return=key_k2;
key_state=key_state_2;
key_state=key_state_0;
casekey_state_2:
if(key_press==key_mask)key_state=key_state_0;
returnkey_return;
unsignedcharkey_temp,i;
DDRA=0xFF;
PORTD=0xFF;
DDRD=0x3F;
OCR0=0xF9;
TCCR0=0x0A;
TCCR1A=0x40;
TCCR1B=0x08;
TIMSK=0x12;
time[2]=23;
time[1]=58;
time[0]=55
if(time_1s_ok)
time_1s_ok=0;
point_on=~point_on;
if(++time[0]>
=60)
time[0]=0;
if(!
play_on)TCCR1B=0x09;
if(++time[1]>
=60)
{
time[1]=0;
if(++time[2]>
=24)time[2]=0;
}
if((++return_time>
=20)&
(clock_state!
=6))clock_state=6;
if(clock_state==6)time_to_disbuffer(time);
if(key_stime_ok)
key_stime_ok=0;
key_temp=read_key();
if(key_temp)
return_time=0;
if(key_temp==key_k1)
if(++clock_state>
=7)clock_state=0;
if(clock_state==0)
{
for(i=0;
i++)time_set[i]=0;
time_to_disbuffer(time_set);
}
if(clock_state==6)
i++)time[i]=time_set[i];
time_to_disbuffer(time);
if((clock_state!
=6)&
(key_temp==key_k2))
if(clock_state%2)time_set[clock_state/2]+=10;
else
if((time_set[clock_state/2]%10)==9)
time_set[clock_state/2]-=9;
else
time_set[clock_state/2]+=1;
if(time_set[0]>
=60)time_set[0]-=60;
if(time_set[1]>
=60)time_set[1]-=60;
if(time_set[2]>
=24)time_set[2]-=10;
time_to_disbuffer(time_set);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外 报警 系统