版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
word文档可自由复制编辑n单片机课程设计实验报告红外探测姓名:学号:班级:指导老师:实验目的学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。设计描述利用实验平台上4个LED数码管、蜂鸣器、LED灯及外加的红外探测模块,设计带有时间显示功能的红外探测模块,要求:在4位数码管上显示当前时间。拥有三个模式:1、监控模式:按key1进入监控模式,当监测到有人经过时触发5s倒计时,在倒计时结束前按key3键可以退出,如果没有按键则倒计时结束后开始报警,按key3键结束报警;2、欢迎模式:按key2进入欢迎模式,当监测到有人经过时播放音乐,按key2停止播放;3、计数模式:按key3进入计数模式,当监测到有人经过时计数加一,按key2键退出计数。按键4可以调整当前的时间。硬件设计显示模块为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。方法是将所有位的段选线相应并联,由一个8位I/O口控制,从而形成段选线的多路复用,同时各位的公共端分别由相应的I/O线控制,实现分时选通。硬件电路图如下,图中10k电阻起到限流作用;三极管起到驱动数码管的作用。若不使用三极管,数码管发光微弱。蜂鸣器模块闹铃声由交流蜂鸣器产生,电路图如下。当P1.7输出不同频率的方波,.蜂鸣器便会发出不同的声音。整体硬件电路图软件设计计时模块利用单片机定时器0完成计时功能。定时器0计时中断程序每隔1ms中断一次并当作一个计数,每中断一次计数加1,当计数1000次时,则表示1s到了,秒变量加1。当秒变量达到60时,秒变量清零同时分变量加1。分变量达到60时,分变量清零同时时变量加1。当时变量达到24时,时变量清零。由于实验要求由LED闪动做秒显示,因此每隔0.5s即计数500次时,P1^1(驱动LED灯)取反一次,从而实现LED灯闪动一次为1s,秒变量加1。该模块流程图如下:显示模块为在各位LED上分别显示不同的字符,需要采用循环扫描显示的方法,即在某一时刻只选通一条位选线,并输出该位的字段码,其余位则处于关闭状态。可见,各位LED显示的字符并不是同时出现的,但由于人眼的视觉暂留及LED的余辉,可以达到同时显示的效果。程序流程图如下:采用动态显示时,需要确定LED各位显示的保持时间。由于LED从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的CPU时间。按键判断及处理程序按键的闭合与否,反映在电压上就是呈现出高电平或低电平。由于机械触点的弹性作用,在闭合及断开的瞬间,电压信号伴随有一定时间的抖动,抖动时间与按键的机械特性有关,一般是5~10ms。为了保证CPU确认一次按键动作,既不重复也不遗漏,必须消除抖动的影响。通过软件消除抖动的方法为:在程序执行过程中检测到有按键按下时,调用一段延时(约10ms)子程序,然后判断该按键的电平是否仍然保持在闭合状态,如果是,则确认有键按下。按键判断流程图如下:音乐响铃模块音乐闹铃程序:单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。另外,音乐的节拍是由延时实现的。我所使用的单片机音乐演奏程序中,包括了两个数据表,其中存放了事先算好的各种音符频率所对应的半周期的定时时间初始值。有了这些数据,单片机就可以演奏低音、中音、高音,三个八度共21个音符。演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。通过调用延迟来实现节拍数。乐曲的数据,也要写个数据表:表中每三个数字,说明了一个音符,它们分别代表:第一个数字是音符的数值;第二个数字是123之一,代表低音、中音、高音;第三个数字是时间长度,以半拍为单位。乐曲数据表的结尾是三个0。音节与频率的关系如下表所示音调X音调X音调X低音1F921中音1FC8F高音1FE47低音2F9E1中音2FCEE高音2FE77低音3FA8C中音3FD44高音3FEA2低音4FAD8中音4FD6B高音4FEB6低音5FB68中音5FDB4高音5FEDA低音6FBE9中音6FDF4高音6FEFA低音7FC5B中音7FE2D高音7FF16程序流程图如下:程序清单/*---------------------------------------------------------------------------------------------------------------------=======================================基于JD51开发板的红外探测程序=======================================************************************程序功能说明************************************************************************ 1、基础功能为显示当前时间。 2、监控功能,按下key1键进入监控模式,有人时灯闪动提示输入密码,输入三次错误或超过10秒开始报警。 3、欢迎功能,按下key2进入欢迎模式,有人时自动播放音乐,key2退出。 4、计数功能,按下key3进入计数模式,有人经过时计数一人,key2退出。 5、调整时间,按key4进入,按key3调整小时,按key4调整分钟,key2退出。************************************************************************************************************************/#include"reg52.h"//#include"delay.c"#defineucharunsignedcharsbitCE573=P2^5;sbitBUZZER=P2^4;sbitKEY1=P3^2;sbitKEY2=P3^3;sbitKEY3=P3^4;sbitKEY4=P3^5;sbitKEY5=P2^7;codeunsignedchardigseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//0123456789AbCdEFuchardigseg_d[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};/*带点数码管的段码编码(0-9)*/codeunsignedcharsegsel[]={0xfe,0xfd,0xfb,0xf7};//数码管段选intsum=0;ints=30; //当前时间秒intmi=0; //当前时间分inth=8; //当前时间时inta;intb;intchance;intk;intx,y,z,x1,x2;intswt=1;intswt2=1;intge=0; //人数后两位intshi=0; //人数前两位intm=1; //设定初始参数unsignedcharbeat;codeunsignedsong[]={0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4, 0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94, 0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x00};codeintnote[]={0x0000,0xFB03,0xFB8E,0xFC0B,0xFC43,0xFCAB,0xFD08,0xFD32,0xFD81,0xFDC7,0xFE05,0xFE21,0xFE55,0xFE83,0xFE99,0xFEC0};unsignedcharhi_note,low_note;voiddelay();voidinitmpu(void)//初始化程序,确定计数器工作方式,装填工作数,确定确定终端模式。{ TMOD=0x11; //定时器0和1都以方式一计数 TL0=0xff; TH0=0xdb; TL1=0xFF; TH1=0xDB; PCON=0x00; IE=0x8f; //开放所有中断}voidDelay(intm)//延时程序{ while(--m);}voidDelay1(intm)//延时程序用来播放音乐{intkk,jj;for(;m>0;m--){for(kk=180;kk>0;kk--) for(jj=125;jj>0;jj--);}}voidtest_led(void)//测试led灯{ inti; P1=0x7F; Delay(40000); for(i=0;i<7;i++) { P1=P1>>1; Delay(40000); } P1=0xFF; Delay(40000); P1=0x00; Delay(40000); P1=0xFF; Delay(40000); P1=0x00; Delay(40000); P1=0xFF;}voidbaojing(void)//LED灯报警程序{ P1=0x00; Delay(40000); P1=0xFF; Delay(40000);}voidprt(inthour,intmin)//数码管显示子程序{ inta,b,c,d; a=hour/10; b=hour%10; c=min/10; d=min%10; {//P2=0xfe; P2=segsel[0]; P0=digseg[a]; Delay(100); if(P1==0xfe){ P2=segsel[1]; P0=digseg_d[b]; Delay(100);} else{ P2=segsel[1]; P0=digseg[b]; Delay(100); } P2=segsel[2]; P0=digseg[c]; Delay(100); P2=segsel[3]; P0=digseg[d]; Delay(100); }}voidtest_digseg(void)//测试数码管{ CE573=1; P2=segsel[0]; P0=digseg[2]; Delay(40000); P2=segsel[1]; P0=digseg[0]; Delay(40000); P2=segsel[2]; P0=digseg[7]; Delay(40000); P2=segsel[3]; P0=digseg[5]; Delay(40000); P2=0xF0;//4只数码管同时开启 P0=0xFF; Delay(40000); P0=0x00; Delay(40000); P0=0xFF; Delay(40000); P0=0x00; Delay(40000); P0=0xFF;}voidtest_beep(charn)//测试蜂鸣器{chari; for(i=0;i<n;i++){ BUZZER=0; Delay(9000); BUZZER=1; Delay(9000); } }charcheck_K3(void)//按键去抖{ if(KEY3==0) { Delay(2000); { if(KEY3==0) { return1; } } } return0; }charcheck_K4(void)//按键去抖{ if(KEY4==0) { Delay(2000); { if(KEY4==0) { return1; } } } return0; }charkey1_flag=0;charkey2_flag=0;voidext_int0()interrupt0//外部中断0服务程序{ EA=0; Delay(4000); key1_flag=1; EA=1;}voidext_int1()interrupt2//外部中断1服务程序{ EA=0; Delay(4000); key2_flag=1; EA=1;}voidtime()interrupt1//计时器0计数器中断程序,用于确定当前时间{ EA=0; x1++; TR0=0; swt=1; TL0=0xff; //计数一百就是一秒 TH0=0xdb; TR0=1; if(x1==100) {x1=0; s++; if(P1==0xfe) //LED闪烁表示一秒 P1=0xff; else P1=0xfe; } if(s==60) { s=0; m=1; mi++; } if(mi==60) { mi=0; h++; } if(h==24) h=0; EA=1; }voidtime2()interrupt3//计数器1中断程序,用于播放音乐{ TR1=0; TL1=low_note; TH1=hi_note; TR1=1; BUZZER=~BUZZER; }voidsinging() { // unsignedcharbeat,temp; unsignedchartemp; intii=0; while(1) { prt(h,mi); //显示当前时间 temp=song[ii];//读出乐谱的一个byte if(temp==0) { //如果是0就表示音乐结束 TR1=0;//停止计时计数器1 return;//返回 } beat=temp&0x0f;//取出低阶的4位,这是拍子 temp=(temp>>4)&0x0f;//取出高阶4位当成音符的频率 if(temp==0) TR1=0; //如果拍子是0就表示休止符 else{ hi_note=note[temp]>>8;//根据音符的频率得到Timer1计数值 low_note=note[temp]&0x00FF; TR1=1;//启动计时计数器1 } Delay1(beat);//延迟拍子的时间 TR1=0; //计时器1停止计数 BUZZER=1; ii++; if(key2_flag) //按2键退出播放 { key2_flag=0; P2=0xff; m=0; TR1=0; BUZZER=1; break; } } }main()//主程序{ initmpu(); test_beep(1); test_led(); test_digseg(); P0=0XBF; TR0=1; //计时器0开始工作 while(1)//不断刷新程序 { prt(h,mi); //显示当前时间 if(key1_flag)//以中断方式响应按键,监控模式 { key1_flag=0;//去除外部中断1标志位 P2=0xff; test_beep(1);//驱动蜂鸣器 while(1) //不断刷新程序 { P1=0x7f; if(check_K4()) { s=0; while(check_K3()==0) { if(s>=0&&s<=5) { P2=segsel[3]; P0=digseg[5-s]; Delay(100); } if(s>5) { test_beep(10); baojing(); } } Delay(16000); Delay(10000); break; } if(key2_flag) //按2键退出 { key2_flag=0; P2=0xff; test_beep(5); Delay(10000); break; } } } elseif(key2_flag)//欢迎模式 { P2=0xff; key2_flag=0; test_beep(1); while(1) { P1=0xbf; prt(h,mi); if(check_K4()) //播放音乐 { singing(); } if(key2_flag) //再按2键退出模 { P2=0xff; key2_flag=0; test_beep(5); Delay(10000); break; } } } elseif(check_K3())//数人数模式 { P2=0xff; test_beep(1); while(1) { P1=0xdf; prt(shi,ge); //显示当前人数 if(check_K4()) { P2=0xff; ge++; test_beep(1); if(ge==100) shi=1; if(shi==100) { shi=0; ge=0; } Delay(10000); } if(check_K3()) //按3键清零 { P2=0xff; ge=0; shi=0; test_beep(1); Delay(10000); } if(key2_flag) //按2键退出 { key2_flag=0; P2=0xff; test_beep(5); Delay(10000); break; } } } elseif(check_K4())//调整当前时间 { P2=0xff; key2_flag=0; test_beep(1); while(1) { prt(h,mi); if(check_K3()) //调时 { h++; P2=0xff; test_beep(1); if(h==24) h=0; Delay(10000); } if(check_K4()) //调分 { mi++; P2=0xff; test_beep(1); if(mi==60) { mi=0; h++; } if(h==24) h=0; Delay(10000); } if(key2_flag) //
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政复议范围的确定和限制
- 信息系统在美容美甲店服务项目定价与客户满意度管理中的应用课件
- 安徽省安庆市2026届高三下学期模拟考试(二模)数学试卷(含答案)
- 2025 高中信息技术数据与计算之数据安全的量子密钥分发网络优化课件
- 2026年及未来5年市场数据中国家装电商行业发展监测及发展趋势预测报告
- 2026年春季企业消防安全考核培训课件
- 2025 高中信息技术数据与计算之 Python 的深度学习模型模型迁移的鲁棒性课件
- 2026年非地面网络自R16纳入3GPP体系空天地一体化实现三维全球覆盖
- 2026年氢电耦合在零碳园区中的应用与盈利模式
- 2026年深海多金属结核矿区地质取样规范与流程
- 安全文明专项施工方案
- 01厨房组织人员管理篇
- 冀教版八年级生物下册昆虫的生殖和发育同步练习(含答案)
- GB/T 11337-2004平面度误差检测
- 2022年德清县文化旅游发展集团有限公司招聘笔试试题及答案解析
- 液压与气压传动全版课件
- 泌尿生殖系统的解剖与生理资料课件
- 芪苈强心-课件
- 江苏省中等专业学校毕业生登记表
- 合格供应商评估表格
- 解读义务教育艺术课程标准(2022年版)《2022艺术新课标》PPT
评论
0/150
提交评论