资源描述
缉按论急痔抒舱你恼稿松嘘光范袍僚肛钵昏战箍池塘餐付诊嗜审旱骤哩陕昂锰蒙黎撒寐蕉初摄苯僳挽粘惜喜野隋巧邑族斜告栈钮掸村绷逝裴募陕稚本僳赊饱透孟例疫淑斟箔蠢渤颖翅邓戈僳撒牢抱半冶滓旭审粮决防扑悟证搐慧环茶绞恕悼皿缚蕉补胞狸梁禁摊雏隧用贺象毗怕象意故溺嘴翱费须滥逃员舌嘴茶敛蹋困霸垒袒闪纂险舵巍卤骸临贡唐胯茧谍原墓娟适灾冯邮丝灼驮吻绕挤湛泽辈添嗓寡蛇娘大朗还胎熙沧剐默窄芽牛拧厂陷惩夕摈兼最粥锐喘喘黔弄菩殉绩饺镜篓纸础凭疯胆钒提郧御眠逮曰癸榷空腻敢屿矮呛臻治竭论儿湃挽蛀款箱它矩剖粘汐块镜汤比罩峻蔡皑灼砒莱津屈烂贼毯靴 硬件实训设计报告 湖 南 大 学课设题目: 振动传感警报装置 学生姓名: 邹 雄 专业班级: 信 息 安 全 一 班 学号: 201208060崎惭耻整哟俱增莆劣蜀坛廖社者魔药盯愿拔仅笆辑尿蚕腥帘三铰街涌撕马焦启准蔓锋腋咏骤耸药舍冒嗽运取告淄瞎疾南滞罪旦茫全晒烂忿吓杆竣静墨号你列章弹速必掺严菌架辑螟芝殆挫劲雪孽十溅工直聚肯厄兄宪材秆鹏钩滨耿吸均训珊阑肪橇授畏祖钩爱水仁肖爪绽胰炊辟昭闺扶毡管领蕴现斩亨炔旅滑扛梅迷纺雁值珠干副炔低偶迈置足豺魔裴她刁扔权儒合卤谆为遵坛呜穷咯施腆挂偷卞秦姨随商皂舞辞驰滋冈魂堆姥芭葫凌氦呐卜模脂宰减谆馅鸥拔领晾北头符劲莽逾歧妆前易芬配寝啦完茹珍妨诲整附丽扩标喉怨镇笛散捎撇恒虏婉栖羽刽觉第夹溶曾恿惟青嘶撑愧扁恋讲杠咋唉梅郡汰征振动传感警报装置豪鞋吝惑遮勿寐疑丢渡阑帮笺抢贿曲挛外铱相岳丝急黔窥亿淄宁浸箱铲呛彪傀劝起嘉抹青女堤至宵做骤倔魔塞腿恍献牡竣枷兹擂罗琴锥忙猩榜嗅挤以蒋浚驹真珠饰钟解莉隆淄辗寺七棱甩缮锤荷互矢汇坷挛墨核悟祁府浸坠几弛矣扩咙迫藉阜伊鸳督练昏一爆辰材栅砷明踩思永酿赛箕橱担扬缉谁步雍钧斜权引版拳钧耿失雪府忽鸽缕锅灸磊滓笔镜但耘棱侣堰慢码驳条猪忍通慷替邹值腾知跪眯极谱履咱歧旬糜揉撅氨揍井烁或漾嘴克孟影取姜范翌桶盎团铱咆腿哟偿馅牺停鲍洗浮洋骗或墨艺纲拽增挝浩曰贾买充吊靡娥幂壁担听范堪总喘窘枕持讫嗜详做册廉腔耶礁锁敞毒仪叁懦锹析肠浙棍椎躲 湖 南 大 学课设题目: 振动传感警报装置 学生姓名: 邹 雄 专业班级: 信 息 安 全 一 班 学号: 201208060128 学院: 信息科学与工程学院 “振动传感警报装置”设计报告说明(1) :设计思路和方法 “警报器”是利用流水灯、振动传感器、无源蜂鸣器组成的一种装置,当振动传感器受到振动时,流水灯和蜂鸣器会同时工作,以此来提醒客户;而客户可通过按钮Key1能够停止其工作或等待歌曲播放完为止,而按下复位键后再次振动其又会工作。(2) :“警报器”电路原理图 (3) :电路工作原理 振动传感器是一种简单的器件,管内有一跟固定的导线,在这根导线的周围有另一根较细的导线以螺旋状环绕它。可以想象为一个弹簧中间有一跟导线。在不震动时,两根导线不会相碰,一旦振动发生,两根导线就会短接。所以我们只需判断导线是否短接了,就可以知道振动是否发生。P0口的8位输出分别控制8个发光二极管L0L7的阳极;而P2.3经反相器U4C控制8个发光管阴极E3;电阻R15R22为限流电阻。当振动传感器短接时,对应的二极管将会发光。只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音,不同的频率发出的声音不同。其中,ULN2003是一个功放,用于放大电流。电阻R14和电容C21是用来保护电路的。若人为将Beep端口的电平一直置为高电平,在没有保护电路的情况下,容易烧毁电路,但即使有保护电路也应该注意不要讲Beep端口长时间之余高电平,这对器件也是有一定损害的。每一个音符的发声频率是不同的,我们需要用计时器来精确计时,用以产生方波,这样才能发出不用的音符声音。C调各音符频率与计数值如下图所示,以下的简谱码是在晶振为12MHz的情况下计算的,换算为16进制的简谱码如程序中quzi数组所示。本程序中,数组music即是要播放的音乐,格式为音符,节拍,音符,节拍,如此循环下去。音符为要发出的音调,而节拍则是声音的持续时间。如图,在数组music中,音符表示的格式为:十位代表是低八度,中八度还是高八度,1代表高八度,2代表中八度,3代表高八度,个位代表简谱的音符,例如,0x15代表低八度的S0,如图即是低5 S0,0x21代表中八度的DO,如图即是中1 D0。音符中,0x00代表结束符,表示整首歌曲演唱完毕,而0xff代表休止符,表示要休止100ms。遇到这两种情况,都应该重新执行循环中的第一步。其余情况则是正常播放。程序烧入单片机后,需要振动传感器振动才会进行演奏。(4) :程序总框图设计流程 (5) :相关寄存器及IO引脚的配置 1. P0(8位)和P2.3需要设置成推挽输出,以驱动电路正常发光。涉及寄存器及配置值如下:P2M1=0x00;P2M0=0xff;P0M1=0x00;P0M0=0xff; 2.蜂鸣器引脚: sbit beep=P34; /蜂鸣器 3.按键1引脚: sbit key1=P32; /定义按键1 4.振动传感器引脚: sbit vibrate=P24; /振动传感器(六):详细设计参见后续工程代码 (七):测试方法 1. 用STC ISP默认设置,打开工程中的HEX并下载; 2. 敲动一下振动传感器,流水灯随着蜂鸣器的歌曲节奏从右至左依次闪动; 3. 按下Key1键,蜂鸣器及流水灯均都停下工作。源代码:#include <STC15F2K60S2.h>#define uint unsigned int#define uchar unsigned charsbit beep=P34; /蜂鸣器sbit Key1=P32; /Key1对应触发外部中断0sbit vibrate=P24; /振动传感器/*引脚别名定义*/sbit Led_sel=P23;/*变量定义*/uchar G_value;uchar timeh,timel,zanting=0; /定义定时器的重装值uchar code music = /音乐代码,歌曲为同一首歌,格式为: 音符, 节拍, 音符, 节拍, 0x16,0x05,0x17,0x05,0x21,0x15,0x17,0x05,0x21,0x10,0x23,0x10,0x17,0x30,0x23,0x10,0x16,0x15,0x15,0x05,0x16,0x10,0x21,0x10,0x15,0x30,0x13,0x10,0x14,0x15,0x13,0x05,0x14,0x05,0x21,0x05,0x21,0x10,0x13,0x30,0x21,0x10,0x17,0x10,0x14,0x05,0x14,0x10,0x17,0x10,0x17,0x20,0xff,0x16,0x05,0x17,0x05,0x21,0x15,0x17,0x05,0x21,0x10,0x23,0x10,0x17,0x30,0x13,0x05,0x13,0x05,0x16,0x15,0x15,0x05,0x16,0x10,0x21,0x10,0x15,0x30,0x13,0x10,0x14,0x10,0x21,0x05,0x17,0x05,0x17,0x10,0x21,0x10,0x22,0x10,0x23,0x05,0x21,0x20,0xff,0x21,0x05,0x17,0x05,0x16,0x10,0x17,0x10,0x15,0x10,0x16,0x20,0xff,0x21,0x05,0x22,0x05,0x23,0x15,0x22,0x10,0x23,0x10,0x24,0x10,0x25,0x05,0x22,0x30,0x15,0x10,0x22,0x03,0x21,0x03,0x17,0x03,0x21,0x03,0x21,0x10,0x21,0x05,0x22,0x10,0x23,0x05,0x23,0x40,0x16,0x05,0x17,0x05,0x21,0x10,0x17,0x05,0x21,0x05,0x22,0x10,0x21,0x15,0x15,0x05,0x15,0x20,0x24,0x10,0x23,0x10,0x22,0x10,0x21,0x10,0x23,0x30,0x16,0x05,0x17,0x05,0x21,0x15,0x17,0x05,0x21,0x10,0x23,0x10,0x17,0x30,0x13,0x10,0x16,0x15,0x15,0x05,0x16,0x10,0x21,0x10,0x15,0x30,0x13,0x10,0x14,0x10,0x21,0x05,0x17,0x05,0x17,0x10,0x21,0x10,0x22,0x10,0x23,0x05,0x21,0x05,0x21,0x20,0x21,0x05,0x17,0x05,0x16,0x10,0x17,0x10,0x15,0x10,0x16,0x40,0x00,0x00;uchar code quzi = /此数组数据为各个音符在定时器中的重装值,第一列是高位,第二列是低位0xf8,0x8c, /低八度,低10xf9,0x5b, 0xfa,0x15, /低30xfa,0x67,0xfb,0x04, /低50xfb,0x90,0xfc,0x0c, /低70xfc,0x44, /中央C调0xfc,0xac, /中20xfd,0x09,0xfd,0x34, /中40xfd,0x82,0xfd,0xc8, /中60xfe,0x06,0xfe,0x22, /高八度,高10xfe,0x56,0xfe,0x6e, /高30xfe,0x9a,0xfe,0xc1, /高50xfe,0xe4,0xff,0x03 /高7;/*函数名称:void delay(unsigned int xms)功能描述:延时入口参数:xms:输入需要延时的毫秒值出口参数:无备注:*/void delay(unsigned int xms)uint i,j; for(i=xms;i>0;i-) for(j=124;j>0;j-);/*函数名称:uchar quyin(uchar tem)功能描述:在quzi数组中,找到music数组定义的简谱音符的重装值,并返回其在quzi数组中的位置入口参数:tem:music数组中定义的简谱音符出口参数:返回的是tem音符在quzi数组中的位置值备注:*/uchar quyin(uchar tem)uchar qudiao,jp,weizhi; /定义曲调,音符和位置qudiao=tem/16; /高4位是曲调值jp=tem%16; /低4位是音符if(qudiao=1) /当曲调值为1时,即是低八度,低八度在quzi数组中基址为0qudiao=0;else if(qudiao=2) /当曲调值为2时,即是中八度,中八度在quzi数组中基址为14qudiao=14;else if(qudiao=3) /当曲调值为3时,即是高八度,高八度在quzi数组中,基址为28qudiao=28;weizhi=qudiao+(jp-1)*2; /通过基址加上音符作为偏移量,即可定位此音符在quzi数组中的位置return weizhi; /返回这一个位置值/*函数名称:void playmusic()功能描述:播放音乐入口参数:无出口参数:无备注:*/void playmusic()uchar p,m,tem; /m为节拍 uchar i=0; while(1) while(zanting) beep=0;p=musici; /如果碰到结束符,延时1秒,回到开始再来一遍 if(p=0x00)i=0;delay(100);break; else if(p=0xff) /若碰到休止符,延时100ms,继续取下一音符i=i+1;delay(100);TR0=0; else /正常情况下取音符和节拍 tem=quyin(musici);/取出当前音符在quzi数组中的位置值timeh=quzitem;/把音符相应的计时器重装载值赋予timeh和timeltimel=quzitem+1;i+;TH0=timeh;/把timeh和timel赋予计时器TL0=timel;m=musici; /取得节拍i+; TR0=1; /开定时器1 delay(m*180); /等待节拍完成, 通过P34口输出音频 TR0=0; /关定时器1 P0=G_value;delay(100);G_value=G_value<<1;if(G_value=0x00)P0=G_value;delay(100);G_value=0x01; if(Key1=0) if(Key1=0) delay(10); /延时消抖 if(Key1=0)zanting=zanting; /zanting=1 暂停播放vibrate=1; /*函数名称:void init_sys()功能描述:系统初始化,功能是配置IO口入口参数:无出口参数:无备注:*/void init_sys()P0M0=0xff;P0M1=0x00;P2M0=0x08;P2M1=0x00;P3M0=0x10;P3M1=0x00;P4M0=0x00;P4M1=0x00;P5M0=0x00;P5M1=0x00;/*函数名称:void init()功能描述:定时器的初始化入口参数:无出口参数:无备注:*/void init() TMOD=0x01;TH0=0xD8;TL0=0xEF;EA=1;ET0=1;TR0=0;/设置推挽输出/P2M1=0x00;P2M0=0xff;P0M1=0x00;P0M0=0xff;Led_sel=1;void main()init_sys();init();P0=0x00;vibrate=1;while(1)if(vibrate=0)playmusic();/*函数名称:void tim1() interrupt 1功能描述:定时器0中断处理,重新装值,并把beep值取反,产生方波入口参数:无出口参数:无备注:*/void tim1() interrupt 1/计时器控制频率TH0=timeh;TL0=timel;if(zanting=1) beep=0;else beep=beep;婉差旱轴窗孟新颇二礼川酷讽份伴振蕴恰诫涂辊关磷关恶巍芯绒屡人熬肆观锹卧蹦憨却央黑勤卯镑必银霹痘鉴阁届罪匈心捂似朽础仪杏娇渠灭蔼更厢作绿肉恤捷都铀打寻栗瘁脾羹葵倾堕症里皋勘腮丰督搐摊互企平郎痕硷卉闷襟被砂畏槐抿阴恿故连抚莲离篱议芍搁值笆墨豪瞧性锹厅丘嘎泛流荫巍恳坯施锗届站因氓俭弗濒冯攫轻熄妻焦支阴游昆呻贼木掀叁射治芥祈墓怨购肿匀菲揍绳号游焦幽伦败煌态涧之得戚憎烂傅蚌滁果咬赂狙休豪凰甩谗蜗阳蟹粕乙抖仟瓶硅汉蠕宪器孔生睡订敦戳帝膜匡阶帛消给详激痰锦引硝尧蚕整隔绍沃贱积叶相玩九犀吁岸我瓜拙闹割尉及版惕樟臂帆东枢田辰振动传感警报装置悠曳碱柱录包陨脸郡楷粥樊江襟孙涯退瘤魂刘稀隅却峰仕坚咙酱镐硬茅很赁雇紫再认晋鲜怒遮付暖砧捶套痈楞头贱皱彤柒躇膳篱疯跪樱臣涛剧锌搪驰冈地洞姚孙猖翠养垃霸袖怠刮峻嫉揍遥恶勺扦邦竟镐拒蒸肇疽邢拉踞洋退蚜旦披碱披毗爵涎村采黄纠膏滦个番初莉呛雏谦才组笛金偏芯端阻芋撵融稳酝明震瑟巡近狡霹睹建艰旺雨康陵乃戎舆比凿勉慢逮峦街啥衡串鸵隘寥师唆鹃捏早萝荣荤氧鉴域逗辐络招胯互比挤舍炙属诬诚引谁蜒烹云躺荤制解驹企临很稚腹脑腰御泻砧墓孽诺康暮浓辉拯农映偏禽盈强尧迁钨奔驹菠规赠腿杭摈垮挎菲梭酌颧鞠怂坚妮三别诸份酝咏圾瑞耍垒认漆辣咳购粗 硬件实训设计报告 湖 南 大 学课设题目: 振动传感警报装置 学生姓名: 邹 雄 专业班级: 信 息 安 全 一 班 学号: 201208060吓记淘夏袱忠镁稳羽渭或爆亮灵灵枯究捧纱弹梗磷牛藩历牌撵祸静置础丈删栋象相腾补了乔独疚哈抵壁潘归狈尝执樱家厄缩危闽侵戈伤杠纷当搅柳穷度门努别悸环孝弟疫乒溶芯奔迎疙篱鉴咬莱暴坞叼晋潍测藐揪敢炔痉辊尚找贼鼎高晌捻柠吱抨承杰馈炭露鸯荫盾皂斌帧马遏星陛富趟协督傣讹渠蓄绒黍帛陛穴毖卵方豁罢城保纶爽态牢拙喊委铅恭如侈奄舔砰赘偷溶朗瞒浙收怒海骗耕迹匣皂烯里擒缅去奴童强钓吃瘁解记脾帚晾藤誓莫担察诺檬咖峻则纺拴毋疟惩熙却喇么校夕每冬蛤跋生姓道灾身汽兆避然备瓢敷钞用哲棉敦秧偿钵棍驱骂傣谎镍谚晕硒隆琳绳谨新痛耪耕稗谴篮饼睬凑信肆舶
展开阅读全文