版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
等级:湖南工程学院等级:课程设计课程名称单片机原理与应用课题名称电子琴专业电气工程班级1005班学号姓名指导教师2013年6月
湖南工程学院课程设计任务书课程名称单片机原理与应用课题电子琴专业班级电气工程1005学生姓名学号指导老师审批任务书下达日期2013年6月8日任务完成日期2013年6月21日设计内容与设计要求设计内容:本课题以单片机为核心,设计和制作一个电子琴。要求由4X4组成16个按钮矩阵,设计成16个音,可随意弹奏想要表达的音乐。设计要求:设计方案要合理、正确;系统硬件设计;完成必要元器件选择;系统软件设计及调试;写出设计报告。主要设计条件MCS-51单片机实验操作台1台;PC机及单片机调试软件;单片机应用系统板1套;制作工具1套;系统设计所需的元器件。说明书格式封面课程设计任务书目录系统总体方案设计系统硬件设计软件设计(包括流程图)系统的安装调试说明8.总结9.参考文献10.附录11.课程设计成绩评分表。进度安排第一周星期一、上午:布置课题任务,课题介绍及讲课。下午:借阅有关资料,总体方案讨论。星期二、确定总体方案,学习与设计相关内容。星期三、各部分方案设计。星期四、各部分设计。星期五、设计及上机调试。第二周星期一:设计及上机调试。星期二:调试,中期检查。星期三:调试、写说明书。星期四--星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参考文献1.《单片机原理与应用》王迎旭等编机械工业出版社2.《51系列单片机设计实例》楼然苗等编北京航空航天大学出版社3.《计算机硬件技术基础实验教程》黄勤等编重庆大学出版社4.《微型计算机接口技术及应用》刘乐善主编华中科技大学出版社5.《单片微型计算机原理及接口技术》陈光东等华中科技大学出版社目录TOC\o"1-2"\h\u第1章课题设计的背景、要求及目的 页第1章课题设计的背景、要求及目的1.1课题设计的背景电子计算机的发展经历了从电子管、晶体管、中小规模集成电路到大规模集成电路四个阶段,尤其是随着大规模的集成电路技术的飞速发展,在20世纪70年代初诞生的单片微型计算机,使得计算机应用日益广泛。而单片微型计算机(简称单片机)的问世,更进一步推动了计算机应用技术的发展,标志着计算机系统两大部分的正式形成,即通用计算机系统和嵌入式计算机系统。前者主要以发展海量、高速数值计算为趋势,后者则主要实现面向对象的实时控制。单片微型计算机是大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有16个按键,设计成16个音,可随意弹奏想要表达的音乐。因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。1.2课题设计的要求本课题以单片机为核心,设计和制作一个电子琴。要求由4X4组成16个按钮矩阵,设计成16个音,可随意弹奏想要表达的音乐。1.3课题设计的目的1、能够对\l"#"电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
2、熟悉AT89C51\l"#"单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
3、为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。
4、对软件编程、排错调试、相关软件的使用技能等方面得到较全面的锻炼和提高。
5、理解音乐产生的原理和编码键盘扫描方法以及单片机内部定时器的溢出中断编程方法。
6、本次课程设计从硬件和软件两个方面入手,全面具体地掌握设计思路、方法和过程,使理论与实际相结合,充分地锻炼了动手能力和思维扩展能力。第2章系统总体方案选择与说明2.1系统方案综述从系统实现的功能上来看,简易电子琴的课程设计主要是手动按键弹奏乐曲。手动弹奏乐曲是根据具体的硬件键盘设置功能键实现音谱的各个音。从系统硬件结构上来看,我们主要使用到51系列单片机、矩阵16键输入电路、蜂鸣器以及电源电路等等。将这些硬件电路有机地结合起来使之满足简易电子琴的实现硬件需要。从系统软件设计角度来看,将简易电子琴的课程设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、音乐产生模块等等。此外,采用程序设计思想、外部按键方式,来实现可手动弹奏乐曲。因此,我们可以综合上述的方案设计原理,从软件和硬件两部分进行有计划有步骤的系统分析和设计。2.2系统设计思路1、手动弹奏乐曲用编码的矩形键盘来实现,手动弹奏乐曲中矩阵键盘的16个键分别设置不同的音符。2、软件的设计主要包括无符号音符的定义、矩形键盘键值的读取和手动弹奏乐曲控制程序。3、此次程序设计主要是手动弹奏乐曲程序控制。而音符的在程序的开始就被定义好了,只要在控制程序中调用即可。2.3系统设计方案2.3.1播放模块播放模块是由扩音器接单片机控制引脚P3.7构成,中间接限流电阻以及PNP三极管,且它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。2.3.2按键控制模块电子琴设有16个按键,16个按键分别代表16个音符,包括中音段的全部音符,通过软硬件设计,然后通过查询电子琴所按下的按键,读取电子琴按键的输入状态,跳转到对应的程序入口,实现自编歌曲的。2.3.3键盘扫描程序检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测。2.3.4功能转移程序对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能。第3章系统框图与工作原理及芯片介绍3.1系统硬件电路设计框图基于单片机系统电子琴的基本结构如下图图3.1系统框图3.2工作原理1、演奏音乐原理:通过控制单片机程序首先设置的音符,通过控制程序调用,以及通过程序判断是否有按键按下来经放大后驱动蜂鸣器是否发出不同音节的声音。用软件延时来控制发音时间的长短,控制节拍。把乐谱的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序到这量常数和延时常数。另单片机晶振频率为12MHZ。2、键盘扫描原理:先将4×4矩阵键盘的行和列全部置为高电平,然后再逐行置为低电平,当有键按下时P1口的值会发生相应的改变,通过与给定数的比较,判定是否有键按下和是否键已松开。并给定列号,根据所给的列号的值,一方面给单片机送入确定好的数值,即发出相应音符音,从而来达到谱乐谱的目的。3.3芯片介绍(1)在本次电子琴设计中,我所用的单片机芯片选用了AT89C51型号的芯片,89C51系列的兼容性也比较好。P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读先通)(2)p3.7口音频输出,接一个喇叭。(3)复位电路我们本来在方案选择的时候有两种选择的,上电复位和按扭复位,上电复位是利用电容充电来实现的,而按扭复位是电源对外节电容的充电使RST为高电平,复位松开后,电容通过下拉电阻放电,使RST恢复低电平。为了功能的完美我还是选择用上电自动复位,因为它比较方便,不需要人另外去操作。第4章各硬件电路的设计说明由于时间原因,本次所设计硬件电路以及程序只经过了仿真软件测试,而没有去单片机实验室去用单片机试验箱去测试程序。4.1按键模块的设计图4.1.1按键电路上图为硬件系统的16键4×4的矩阵式键盘电路逻辑图,键盘的行线连接到P1.0-P1.3口上,列线连接到P1.4-P1.7口上,单片机通过逐行扫描的方法对键盘进行扫描,读取判断有无键被按下以及按键的位置。为了判断有没有键被按下,可先经输出口向所有列线输出高电平然后在输出各行状态。若行线状态皆为高电平则表明无键被按下;若行线状态中有低电平就表示有键被按下,然后再根据接通的行线和列线判定按键的位置。当经扫描表明有键被按下后,紧接着就是进行去抖动处理,抖动时间的长短与键的机械特性有关,一般为10-20ms。4.2蜂鸣器模块的设计图4.2.1扩音电路电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。本系统设计的蜂鸣器通过驱动电路与单片机的P3.7连接,单片机就可以通过P3.7的输出信号进行控制。4.3电源部分及其他附属模块的设计图4.3.1上电复位电路对输入电路产生的电源我们的要求是稳定在5V左右,保证单片机的正常工作。复位是单片机的初始化操作,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。本系统采用上电与按键复位电路,为了防止干扰串扰复位端,所以再接一个去耦电容。晶振电路的设计可以两个电容与一个晶振即可,用来产生一个约等于12MHZ的稳定的频率。第5章系统软件设计5.1系统软件方案的设计进行应用软件设计时可采用模块化设计,其优点是:(1)每个模块的程序结构简单,任务明确,易于编写、调试和修改;(2)程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,便于功能的扩充和版本的升级;(3)对于使用频繁的子程序可以建立子程序库,便于多个模块调用;(4)便于进行程序的编写和修改调试工作,加快软件的研制进度。根据设计要求,首先要确定软件设计方案,即确定该软件应该完成哪些功能;其次是规划这些功能需要分成多少个功能模块,以及每一个程序模块的具体任务是什么。其系统的软件设计的模块应该遵循下述原则:(1)每个模块应具备独立的功能,能产生一个明确的结果。(2)模块之间的控制参数应尽量简单,数据参数应尽量少。控制参数是指模块进入和退出的条件及方式,数据参数是指模块间信息的交换方式、交换量的多少及交换的频繁程度。(3)模块的长度适中。模块语句的长度要始终,模块太长,调试和分析会有难度;模块太短,信息交换太过频繁,不利于模块功能的体现系统的结构模块图如下所示:主程序模块主程序模块手动弹奏乐曲模块功能转换模块音乐播放模块5.2系统程序的设计系统主程序的功能是进行端口定义,以及各个音符的无符号定义,这样方便程序的调用.5.2.1主程序设计如下#include<reg51.h>#include"SoundPlay.h"#defineucharunsignedchar#defineuintunsignedint#definecnt_delay_cnt125//按键去抖动延时阀值#definecnt_delay_cnt25//按键行输出信号稳定的小延时阀值unsignedintdleay_time1;/****************各个按键的音调**********/unsignedcharcodeMusic_Code_1[]={0x15,0x02,0x00,0x00};unsignedcharcodeMusic_Code_2[]={0x16,0x02,0x00,0x00};unsignedcharcodeMusic_Code_3[]={0x17,0x02,0x00,0x00};unsignedcharcodeMusic_Code_4[]={0x18,0x02,0x00,0x00};unsignedcharcodeMusic_Code_5[]={0x19,0x02,0x00,0x00};unsignedcharcodeMusic_Code_6[]={0x1A,0x02,0x00,0x00};unsignedcharcodeMusic_Code_7[]={0x1B,0x02,0x00,0x00};unsignedcharcodeMusic_Code_8[]={0x0B,0x02,0x00,0x00};unsignedcharcodeMusic_Code_9[]={0x0C,0x02,0x00,0x00};unsignedcharcodeMusic_Code_10[]={0x0D,0x02,0x00,0x00};unsignedcharcodeMusic_Code_11[]={0x0E,0x02,0x00,0x00};unsignedcharcodeMusic_Code_12[]={0x0F,0x02,0x00,0x00};unsignedcharcodeMusic_Code_13[]={0x10,0x02,0x00,0x00};unsignedcharcodeMusic_Code_14[]={0x11,0x02,0x00,0x00};unsignedcharcodeMusic_Code_15[]={0x15,0x03,0x00,0x00};unsignedcharcodeMusic_Code_16[]={0x16,0x03,0x00,0x00};unsignedcharkey_step=1;//按键扫描步骤变量,在switch()语句的括号里unsignedintdelay_cnt2=0;//延时计数器的变量unsignedcharkey_lock1=0;//按键自锁标志unsignedintdelay_cnt1=0;//延时计数器的变量ucharkey_sec;sbitkey_dr1=P1^0;//4X4按键行输出sbitkey_dr2=P1^1;//4X4按键行输出sbitkey_dr3=P1^2;//4X4按键行输出sbitkey_dr4=P1^3;//4X4按键行输出sbitkey_sr1=P1^4;//4X4按键行输入sbitkey_sr2=P1^5;//4X4按键行输入sbitkey_sr3=P1^6;//4X4按键行输入sbitkey_sr4=P1^7;//4X4按键行输入5.2.2主函数程序的设计/************************************************************主函数*************************************************************/voidmain(){InitialSound();//初始化播发器key_lock1=0; while(1) {key_scan(); switch(key_sec) { case1: Play(Music_Code_1,0,3,360); key_sec=0; break; case2: Play(Music_Code_2,0,3,360); key_sec=0; break; case3: Play(Music_Code_3,0,3,360); key_sec=0; break; case4: Play(Music_Code_4,0,3,360); key_sec=0; break; case5: Play(Music_Code_5,0,3,360); key_sec=0; break; case6: Play(Music_Code_6,0,3,360); key_sec=0; break; case7: Play(Music_Code_7,0,3,360); key_sec=0; break; case8: Play(Music_Code_8,0,3,360); key_sec=0; break; case9: Play(Music_Code_9,0,3,360); key_sec=0; break; case10: Play(Music_Code_10,0,3,360); key_sec=0; break; case11: Play(Music_Code_11,0,3,360); key_sec=0; break; case12: Play(Music_Code_12,0,3,360); key_sec=0; break; case13: Play(Music_Code_13,0,3,360); key_sec=0; break; case14: Play(Music_Code_14,0,3,360); key_sec=0; break; case15: Play(Music_Code_15,0,3,360); key_sec=0; break; case16: Play(Music_Code_16,0,3,360); key_sec=0; break; } }}设计总结由于我以前专科阶段上过C语言版的单片机课程,相对于本学期的所学的汇编语言,我觉得C语言版的更容易接受,所以本次课程设计我选用C编程。经过这两周的单片机课程设计对我获益匪浅,让我重新系统性地认识和掌握了单片机技术,让我将平常学的C语言和编程方法学以致用,使我的C语言能力有了很大提高和进步,让我对单片机外围接口设备有了深入细致的了解。由于课程设计安排跟我个人的很多事情安排起冲突,所以课程设计的主要完成是在第二周。一开始,我在网上寻找有关的资料和仔细读懂老师设计任务书从而研究设计方案,进行设计的总体规划,理清课程设计思路。但是将这些具体的方案落实到每一个设计环节和步骤中,难免会出现意想不到错误,这就需要我们在进行设计的过程中利用所掌握的知识认真排查错误原因,多方面的思考问题的关键不断地改正自己的设计不足之处和错误。此外,对硬件电路的工作原理和单片机知识的掌握是进行下一步的软件设计的关键。这次课程设计能顺利的完成任务很大程度上是因为在软件设计之前对硬件的设计及工作原理有了细致的了解。在进入了软件设计方案和具体的编程和调试运行阶段。在这个阶段中,对系统的需求分析和如何采用模块化设计思想是设计方案主要解决的问题,通过不断地设计尝试和反复地设计调试初步解决了问题。但是也存在了设计上的不足之处,即如何实现自动音乐播放的暂停和断点播放,在在我设计初期,希望能另外实现16个音乐的播放的自我播放和按键暂停,在采用了这样的设计方法上在原理上可以行得通,但是由于难度太大,以及个人的水平问题,最后放弃了这个设想。最后,现在经过两周后,经过实践的操作和调试,对单片机软件都有了更深的了解。通过设计,巩固之前所学课程,使所学知识牢固掌握并灵活运用。在整个课程设计中,我的指导老师寻大勇老师给予很多指导性的意见。软件设计和仿真过程中,刘其涛同学也帮助我解决了一些实际问题。本次课程设计必将成为自己以后学习道路上的宝贵的实践经验。参考文献1、王迎旭编《单片机原理与应用》机械工业出版社.2、周向红编《51系列单片机应用与实践教程》北航出版社3、楼然苗编《51系列单片机设计实例》北航出版社.4、黄勤编《计算机硬件技术基础实验教程》重庆大学出版社5、刘乐善编《微型计算机接口技术及应用》华中科技大学出版社.6、陈光东编《单片微型计算机原理及接口技术》华中科技大学出版社。附录A系统硬件电路原理图附录B程序设计数据#include<reg51.h>#include"SoundPlay.h"#defineucharunsignedchar#defineuintunsignedint#definecnt_delay_cnt125//按键去抖动延时阀值#definecnt_delay_cnt25//按键行输出信号稳定的小延时阀值unsignedintdleay_time1;/*********************************************************各个按键的音调**********************************************************/unsignedcharcodeMusic_Code_1[]={0x15,0x02,0x00,0x00};unsignedcharcodeMusic_Code_2[]={0x16,0x02,0x00,0x00};unsignedcharcodeMusic_Code_3[]={0x17,0x02,0x00,0x00};unsignedcharcodeMusic_Code_4[]={0x18,0x02,0x00,0x00};unsignedcharcodeMusic_Code_5[]={0x19,0x02,0x00,0x00};unsignedcharcodeMusic_Code_6[]={0x1A,0x02,0x00,0x00};unsignedcharcodeMusic_Code_7[]={0x1B,0x02,0x00,0x00};unsignedcharcodeMusic_Code_8[]={0x0B,0x02,0x00,0x00};unsignedcharcodeMusic_Code_9[]={0x0C,0x02,0x00,0x00};unsignedcharcodeMusic_Code_10[]={0x0D,0x02,0x00,0x00};unsignedcharcodeMusic_Code_11[]={0x0E,0x02,0x00,0x00};unsignedcharcodeMusic_Code_12[]={0x0F,0x02,0x00,0x00};unsignedcharcodeMusic_Code_13[]={0x10,0x02,0x00,0x00};unsignedcharcodeMusic_Code_14[]={0x11,0x02,0x00,0x00};unsignedcharcodeMusic_Code_15[]={0x15,0x03,0x00,0x00};unsignedcharcodeMusic_Code_16[]={0x16,0x03,0x00,0x00};unsignedcharkey_step=1;//按键扫描步骤变量,在switch()语句的括号里unsignedintdelay_cnt2=0;//延时计数器的变量unsignedcharkey_lock1=0;//按键自锁标志unsignedintdelay_cnt1=0;//延时计数器的变量ucharkey_sec;sbitkey_dr1=P1^0;//4X4按键行输出sbitkey_dr2=P1^1;//4X4按键行输出sbitkey_dr3=P1^2;//4X4按键行输出sbitkey_dr4=P1^3;//4X4按键行输出sbitkey_sr1=P1^4;//4X4按键行输入sbitkey_sr2=P1^5;//4X4按键行输入sbitkey_sr3=P1^6;//4X4按键行输入sbitkey_sr4=P1^7;//4X4按键行输入//****************************/******************************************************************/voidDelayUs(unsignedcharus)//delayus{unsignedcharuscnt;uscnt=us>>1;/*Crystalfrequencyin12MHz*/while(--uscnt);}/***********************************************************/voidDelayMs(unsignedcharms)//delayMs{while(--ms){DelayUs(250);DelayUs(250); DelayUs(250); DelayUs(250);}}voidkey_scan()//按键扫描函数{//补充说明:如果中断一次就把所有的按键都扫描完,中断占用的时间片就会太多,势//必会影响main函数里其他子程序的运行,为了避免一口气把所//的按键都扫描完,此//处用switch语句把4个按键分成2等分,一次中断只扫描2个按键switch(key_step)//按键扫描步骤,{case1://扫描1号键,2号键key_dr1=0;//按键行扫描输出第一行低电平key_dr2=1; key_dr3=1; key_dr4=1;delay_cnt2=0;//延时计数器清零key_step++;//切换到下一个运行步骤break;case2:delay_cnt2++;if(delay_cnt2>cnt_delay_cnt2)//小延时,但不是去抖动延时,替代一直受网友争议的delay1(40){delay_cnt2=0;key_step++;//切换到下一个运行步骤}break;case3:if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1){//如果没有按键按下,则2个IO输入都是高电平key_step++;//如果没有按键按下,下一个中断扫描下2个//按键 key_lock1=0;//按键自锁标志清零delay_cnt1=0;//按键去抖动延时计数器清零,此行非常巧妙} elseif(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1&&key_lock1==0){//key_lock1按键自锁,避免按键一直触发,下降沿有效++delay_cnt1;//延时计数器if(delay_cnt1>cnt_delay_cnt1)//延时计数器超过一定的数值{delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发,只有松开按键, //此标志位才会被清零(经典)key_sec=1;//触发1号键 dleay_time1=0;//自锁计数延时 // led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}}elseif(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=2;//触发2号键 dleay_time1=0;//自锁计数延时//led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=3;//触发3号键 dleay_time1=0;//自锁计数延时//led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=4;//触发4号键 dleay_time1=0;//自锁计数延时//led1=0;//有按键按下,打开背光灯 //dleay_time3=0;//背光灯延时计数器清零}}break;case4://扫描//扫描3号键,4号键key_dr1=1;key_dr2=0;//按键行扫描输出第二行低电平 key_dr3=1; key_dr4=1;delay_cnt2=0;//延时计数器清零key_step++;//切换到下一个运行步骤break;case5:delay_cnt2++;if(delay_cnt2>cnt_delay_cnt2)//小延时,但不是去抖动延时,替代一直受网友争议的delay1(40){delay_cnt2=0;key_step++;//切换到下一个运行步骤}break;case6:if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1){//如果没有按键按下,则2个IO输入都是高电平key_step++;//如果没有按键按下,下一个中断扫描下2个按键 key_lock1=0;//按键自锁标志清零delay_cnt1=0;//按键去抖动延时计数器清零,此行非常巧妙} elseif(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1&&key_lock1==0){//key_lock1按键自锁,避免按键一直触发,下降沿有效++delay_cnt1;//延时计数器if(delay_cnt1>cnt_delay_cnt1)//延时计数器超过一定的数值{delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发,只有松开按键, //此标志位才会被清零key_sec=5;//触发1号键 dleay_time1=0;//自锁计数延时 // led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}}elseif(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=6;//触发2号键 dleay_time1=0;//自锁计数延时 //led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=7;//触发4号键 dleay_time1=0;//自锁计数延时 //led1=0;//有按键按下,打开背光灯 // dleay_time3=0;//背光灯延时计数器清零}} Elseif(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=8;//触发4号键 dleay_time1=0;//自锁计数延时//led1=0;//有按键按下,打开背光灯 //dleay_time3=0;//背光灯延时计数器清零}}break; case7://扫描//扫描3号键,4号键key_dr1=1;key_dr2=1;//按键行扫描输出第二行低电平 key_dr3=0; key_dr4=1;delay_cnt2=0;//延时计数器清零key_step++;//切换到下一个运行步骤break;case8:delay_cnt2++;if(delay_cnt2>cnt_delay_cnt2)//小延时,但不是去抖动延时,替代一直受网友争议的delay1(40){delay_cnt2=0;key_step++;//切换到下一个运行步骤}break;case9:if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1){//如果没有按键按下,则2个IO输入都是高电平key_step++;//如果没有按键按下,下一个中断扫描下2个//按键 key_lock1=0;//按键自锁标志清零delay_cnt1=0;//按键去抖动延时计数器清零,此行非常巧妙} elseif(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1&&key_lock1==0){//key_lock1按键自锁,避免按键一直触发,下降沿有效++delay_cnt1;//延时计数器if(delay_cnt1>cnt_delay_cnt1)//延时计数器超过一定的数值{delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发,只有松开按键, //此标志位才会被清零key_sec=9;//触发1号键 dleay_time1=0;//自锁计数延时 // led1=0; // dleay_time3=0;}}elseif(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=10;//触发2号键 dleay_time1=0;//自锁计数延时//led1=0; // dleay_time3=0;}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=11;//触发4号键 dleay_time1=0;//自锁计数延时//led1=0; // dleay_time3=0;}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=12;//触发4号键 dleay_time1=0;//自锁计数延时//led1=0; // dleay_time3=0;}}break;case10://扫描//扫描3号键,4号键key_dr1=1;key_dr2=1;//按键行扫描输出第二行低电平 key_dr3=1; key_dr4=0;delay_cnt2=0;//延时计数器清零key_step++;//切换到下一个运行步骤break;case11:delay_cnt2++;if(delay_cnt2>cnt_delay_cnt2)//小延时,但不是去抖动延时,替代一直受网友争议的delay1(40){delay_cnt2=0;key_step++;//切换到下一个运行步骤}break;case12:if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1){//如果没有按键按下,则2个IO输入都是高电平key_step++;//如果没有按键按下,下一个中断扫描下2个//按键 key_lock1=0;//按键自锁标志清零delay_cnt1=0;//按键去抖动延时计数器清零,此行非常巧妙} elseif(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1&&key_lock1==0){//key_lock1按键自锁,避免按键一直触发,下降沿有效++delay_cnt1;//延时计数器if(delay_cnt1>cnt_delay_cnt1)//延时计数器超过一定的数值{delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发,只有松开按键, //此标志位才会被清零key_sec=13;//触发1号键 dleay_time1=0;//自锁计数延时 // led1=0; // dleay_time3=0;}}elseif(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=14;//触发2号键 dleay_time1=0;//自锁计数延时//led1=0; // dleay_time3=0;}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=15;//触发4号键 dleay_time1=0;//自锁计数延时//led1=0; // dleay_time3=0;}} elseif(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0&&key_lock1==0){++delay_cnt1;if(delay_cnt1>cnt_delay_cnt1){delay_cnt1=0; key_lock1=1;//自锁按键置位,避免一直触发key_sec=16;//触发4号键 dleay_time1=0;//自锁计数延时 //led1=0; // dleay_time3=0;}}break;} if(key_step>12)//第1组按键与第2组按键反复轮流扫描 { key_step=1; }}/************************************************************主函数*************************************************************/voidmain(){InitialSound();//初始化播发器key_lock1=0;//P3=0;//关闭蜂鸣器 while(1) {key_scan(); switch(key_sec) { case1: Play(Music_Code_1,0,3,360); key_sec=0; break; case2: Play(Music_Code_2,0,3,360); key_sec=0; break; case3: Play(Music_Code_3,0,3,360); key_sec=0; break; case4: Play(Music_Code_4,0,3,360); key_sec=0; break; case5: Play(Music_Code_5,0,3,360); key_sec=0; break; case6: Play(Music_Code_6,0,3,360); key_sec=0; break; case7: Play(Music_Code_7,0,3,360); key_sec=0; break; case8: Play(Music_Code_8,0,3,360); key_sec=0; break; case9: Play(Music_Code_9,0,3,360); key_sec=0; break; case10: Play(Music_Code_10,0,3,360); key_sec=0; break; case11: Play(Music_Code_11,0,3,360); key_sec=0; break; case12: Play(Music_Code_12,0,3,360); key_sec=0; break; case13: Play(Music_Code_13,0,3,360); key_sec=0; break; case14: Play(Music_Code_14,0,3,360); key_sec=0; break; case15: Play(Music_Code_15,0,3,360); key_sec=0; break; case16: Play(Music_Code_16,0,3,360); key_sec=0; break; } }}电气信息学院课程设计评分表项目评价优良中及格差设计方案合理性与创造性(10%)开发板焊接及其调试完成情况*(10%)硬件设计或软件编程完成情况(20%)硬件测试或软件调试结果*(10%)设计说明书质量(20%)答辩情况(10%)完成任务情况(10%)独立工作能力(10%)出勤情况(10%)综合评分指导教师签名:________________日期:________________注:=1\*GB3①表中标*号项目是硬件制作或软件编程类课题必填内容;=2\*GB3②此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。
中国企业物流运作现状及发展战略探讨摘要:自从2001年中国加入WTO之后,市场竞争就更加激烈。每个企业为了提高自身的竞争力,努力提高物流水平,降低物流成本。本文将中国物流现状与发达的国家和地区的企业物流运作模式进行对比,提出了中国的企业物流发展战略关键词:企业物流现状;运行模式;发展战略一、中国企业物流的运作现状及弊端
物流战略是很多企业总体战略中必须考虑到的一个重要因素。为了在市场中提升自我竞争了,企业不断在降低物流成本和提高物流水平上下功夫。无论是在国内还是国际市场上,都能够最大程度上的降低成本,同时又不减低服务水平,获得竞争优势。企业物流的管理整体上来说还是处于不完善的阶段,大多停留在纸币时代。比较先进的企业已经配备了电脑,但是依旧没有形成系统的体系和网络。EDL、个人电脑、人工智能、专家系统、通信和扫描等先进的信息技术还未在物流运作中广泛地运用。但是物流是一种新型的管理技术,涉及领域宽广。因此物流管理人员要熟悉掌握企业内物流和因此延伸的整条供应链的管理知识,掌握整个工艺流程,精通物流管理技术。而我国现在十分缺乏具备综合物流知识的管理和技术人才,难以满足企业物流现代化的需求。二、中国企业物流的发展战略1990年以来,在国外,物流已经成为了该国一个重要的经济增长点。但是在中国,物流才刚刚起步。企业之间生产经营,市场运行的各个方面展开竞争。具体体现在技术、人才上包括了物流和供应链。在竞争如此激烈的背景之下,企业进入了一个微利时代,产品的成本和利润变得十分透明。而这用竞争还会不断加深,变得更加激烈,三、发展物流为当务之急
社会的经济环境在不断地发展变化之中,这就要求中小企业从战略发展的高度出发去思考物流的发展问题。在大企业实时物流战略的同时,作为灵活的反应者,中小企业在市场中,也积极采取了行动。希望通过积极的物流战略提升自身的竞争力。信息技术的发展前景大好,经济贸易的高速发展,物流业已经显示出了蓬勃的活力和蕴藏的无限商机,物流服务正逐渐成为中国企业之中最为经济合理的综合服务模式。中国进入WTO的时间还不算长,我国的中小企业应该及时把握住这一机会,在物流市场竞争比较不激烈时加入物流领域,迅速地占领一定的市场份额。但是如果中小企业不作为,等时间再长久一些,将会失去发展物流的优势。
四、从战略角度做物流
现下,我国的许多中小企业还未意识到物流战略以及控制物流成本的重要性。中小企业应当认识到物流战略是提升竞争力的重要手段,并且重视自身物流系统地建设,将物流系统的建设上升到战略高度。事实上,企业物流成本是除了原材料成本之外的最大成本项目。在国外发达国家,它们的物流成本一般控制在10%左右。而我国的现状就不太乐观。我国物流成本一般占总成本30%-40%,鲜活产品占60%左右甚至更多。我们应该看到的是系统完善的物流管理可以节省15%-30%物流成本,很大程度上减少库存和运输成本,对于中小企业来说,技术上和产品质量都比不上大企业。但不得不承认的是,中小企业产品价格更加受消费者青睐,市场需求反应更加灵活迅速。一旦中小企业将物流上升到战略高度,利用先进的物流管理模式,就可以大大的节省产品成本,进一步发挥自身的优势。想要在变幻莫测的市场中屹立不倒。谋求更加长远的发展,中小企业就要把物流放到企业经营管理的战略高度上进行思考。除了考虑要怎样解决仓储运输和商品配送这些物流的基本问题,还要思考怎样把采购、生产和销售过程中的物流活动的有机结合。做到以业务流程为基础,使得物流的一体化。最终达到加强企业的在瞬息万变的市场当中的竞争能力。
我国的中小企业只有突破地域限制、行业的局限,放眼于国内外,才能说真正意义上做好了战略制定,最大限度地把握住了机遇,有效规避风险。具体来的说,就是首先着眼于当前的地域市场的开拓,在获得了本地竞争的优势之后,辐射全国,放眼于全球。
五、重视物流系统的全面改造
发展物流并不是一蹴而就的,它需要一步步地前进。因此中小企业要注重制定详细的物流重组的长期实施计划和发展策略。物流重组需要从物流业务流程、组织机构、企业资源管理系统等方面展开,这样一来才有可能慢慢实现企业物流向供应链管理的“横向一体化”。达到降低生产、库存、运输等环节的成本,最终给客户带来更大的效益,给消费者带去更大的实惠。与此同时,企业的经营者应该打破传统的观念,不再只是局限于投入产出管理问题,如流程再造、压缩成本、加强培训以及有限资源的合理配置问题。企业的经营者应当认识到物流是企业市场营销的基础,从战略高度去思考物流运营成本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年小学教学档案管理制度
- 2024跨国医疗设备采购合同
- 2024铁路劳务分包合同模板
- 2024年长途汽车运输合同:长途汽车客运合同:边境旅游线路定制运输服务3篇
- 2024版技术服务长期合作协议3篇
- 2024渣土运输服务合同协议书
- 历史对比视角
- 2024钢筋买卖合同范例:简约风格
- 动物营养与饲料加工知到智慧树章节测试课后答案2024年秋黑龙江农业工程职业学院(松北校区)
- 2024版国内货物运输承运人责任保险合同
- 冀人版科学六年级下册全册同步练习
- 初三数学-房山区2023~2024学年度第一学期期末检测试题+答案
- MOOC 软件工程-东北大学 中国大学慕课答案
- 中职思政课实施方案及措施
- 污水管网巡查及养护 投标方案(技术方案)
- (高清版)DZT 0275.1-2015 岩矿鉴定技术规范 第1部分:总则及一般规定
- ODM委托加工协议书模板(二篇)
- 人工智能在医疗健康领域的应用探索报告
- 小学一年级数学口算题每天20道题
- 设备安全调试维修作业安全培训
- 2024年01月广东省惠州大亚湾开发区西区街道2024年公开招考15名社区工作人员笔试历年高频考点难、易错点荟萃附答案带详解
评论
0/150
提交评论