基于单片机的电子琴发声控制系统.doc_第1页
基于单片机的电子琴发声控制系统.doc_第2页
基于单片机的电子琴发声控制系统.doc_第3页
基于单片机的电子琴发声控制系统.doc_第4页
基于单片机的电子琴发声控制系统.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南理工大学本科课程设计报告河南理工大学单片机应用与仿真训练设计报告基于单片机的模拟电子琴发声控制系统姓 名: 学 号: 专业班级: 电信08-1班 指导老师: 所在学院:电气工程与自动化学院2011年11月 25 日摘要本设计是基于单片机的模拟电子琴发声控制系统,该控制系统的主要控制部件是AT89S52,晶振频率为11.0592MHz,发声部件为蜂鸣器,显示部件为七段数码管,十个按键作为输入端。设计内容:设置8个音符按键发出1(do) 、2(re)、3(mi)、4(fa)、5(so)、6(la)、7(xi)、1(do),为一组八度音阶;设置1个按键调节音调高低(低八度音阶为一组,中八度音阶为一组,高八度音阶为一组),通过识别按键的次数来调出一组八度音阶,供人们演奏,在按键按下的同时由数码管输出对应的音阶数值;另外设置一个播放按键,当判断按键按下时,自动播放内存的音乐,可以随时中断音乐。设计方法:软件部分由扫描按键发声并显示和音乐自动播放两部分构成,故本设计通过判断一个按键的两种状态而在两个部分之间进行切换,每种状态对应一个指定部分,从而保证两种状态的正常切换。按键的扫描采用4*2矩阵形式,节省了输出端口。硬件部分的设计主要包括按键排列、数码管显示和蜂鸣器部分,本设计P1口用作对按键的扫描,P2口用作数码管显示,所以矩阵按键和数码管的排列均就近I/O口焊接,布局合理。数码管显示部分通过限流电阻接P2口,无译码器,考虑到输出的数值,本部分设计由软件部分实现指定数值输出。蜂鸣器通过PNP型三极管8550接P3口,8550可以实现音频的放大。蜂鸣器与数码管就近排列,以达到输出一致的效果。设计成果:按照本设计的设计理念,设计成功!该控制系统能准确实现按键扫描,音符、音阶的调用准确无误,同时能显示音符和音阶数值,但受数码管限制,无法同时显示音符1和高一阶音符1(本设计中以8代替);能实现按键控制音乐的自动播放,当检测到控制按键按下时,即可启动音乐自动播放。本设计简单实用,方便操作,系统稳定,编程简单,能满足单片机初学者对单片机技术的追求,也能满足音乐初学者学习乐器的的基本需求。- 29 -河南理工大学本科课程设计报告目录摘要11 概述11.1 课题简介11.2 仿真技术与软硬件技术的结合11.3 单片机简介12 系统总体方案及硬件设计32.1 总体方案32.2 按键矩阵42.3 数码管显示42.4 蜂鸣器模块43 软件设计53.1 播放音乐部分53.2 扫描按键部分73.3 数码管显示104 Proteus软件仿真124.1 键盘部分设计124.2 蜂鸣器部分仿真124.3 数码管部分仿真124.4 整体仿真设计125课程设计体会145.1 设计成果145.2 心得体会14参考文献- 0 -书、专著:- 0 -电子文献:- 0 -附录1 源程序代码- 1 -附录2 系统原理图12 附录3 音乐简谱13 1 概述1.1 课题简介单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本课题的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,2个控制按键和1个复位按键。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。对于单片机来说产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0或T1来产生这样的方波频率信号,因此,我们只要把一首歌曲的音符对应频率关系编写正确,就可以达到我们想要的曲目。1.2 仿真技术与软硬件技术的结合本设计中用到了软件Proteus,该软件是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。在编译方面,它也支持IAR、Keil和MPLAB等多种编译,给我们做电路设计提供方便快捷的仿真效果。在编译的过程中用到了Keil uVision3, Keil C51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。其方便易用的集成环境、强大的软件仿真调试工具令我们事半功倍。1.3 单片机简介AT89S52 是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。 图1.30图1.31AT89S52引脚图AT89S52实物图2 系统总体方案及硬件设计2.1 总体方案图2.1 总体方案流程图本设计在音乐播放与键盘扫描之间切换,蜂鸣器能发出共计22个音符,共分三个八度音阶,数码管可显示0-8,由于数码管限制,此处用8代替高一级音符do。当系统运行时,默认进入键盘扫描,并不发音,数码管显示默认值1,即键盘默认可调用低八度音符。当音乐播放键(PLAY)按下时,音乐自动播放,数码管显示0,此间可按下复位键终止音乐。当播放停止时,跳出程序段,默认回到键盘扫描状态,数码管显示返回值1。每当音阶转换控制键(SWITCH)按下时,数码管显示的数值加1,设置最大显示值是3,循环显示;此处1代表可调用低八度音符,2代表可调用中八度音符,3代表可调用高八度音符。当矩阵键盘有键按下时,扫描的键值由数码管输出,显示1-8,代表do、re、mi、fa、so、la、xi、do(高一阶),按键与音符一一对应。这样有效地利用了4*2矩阵键盘,可以实现22个音符的输出,简洁而高效。2.2 按键矩阵本设计采用4*2矩阵非编码按键,由4*4矩阵修改而成,这样不但可以节省程序扫描,也可以节省端口的占用率,从而达到简洁高效的效果。键盘为各自独立按键,只简单地提供按键开关。有关按键的识别、键码的确定与输入、消除抖动等功能均由软件完成。键盘矩阵图与仿真图相同,见图4.1。对按键矩阵的扫描由P1.0P1.5口共同完成。2.3 数码管显示本设计的数码管部分使用了共阳极数码管,数码管公共端接高电平,Led输入端通过200欧的限流电阻接P2.0-P2.6,数字的输出由软件完成。见图2.3。2.4 蜂鸣器模块本设计的蜂鸣器模块由PNP三极管8550作为音频放大,200欧的限流电阻,声音的输出在P3.6口。见图2.4。图2.3 数码管显示原理图 图2.4 蜂鸣器焊接原理图3 软件设计3.1 播放音乐部分图3.1 声音频率及定时初值表音乐的播放要进行音符的识别和准确调用,音符的自然频率是固定的,我们可以根据自然频率计算出其半周期,由此计算出单片机在12MHz下的定时初值,具体计算如图3.1。因此可以设置低音do到超高音do的定时初值表程序段如下:unsigned int code tab= /音符初值表低音1超高音163627,63835,64021,64103, /低音1 2 3 464260,64400,64524,64580,/低音5 6 7 中音164684,64777,64820,64898,/中音2 3 4 564968,65030,65058,65110,/中音6 7 高音1 2 65157,65178,65217,65252,/高音3 4 5 6 65283,65297 /高音7 超高音1;在音乐的播放中节拍的控制由延时控制来实现:void delay(unsigned char t) /延时函数,控制发音的时间长度unsigned char t1;unsigned long t2;for(t1 = 0; t1 t; t1+) /双重循环, 共延时t个半拍for(t2 = 0; t2 0;i-) for(j=198;j0;j-);/*每个指令12个机器周期,即1us,延时计算50*(198+2)+2=10002us延时精确计算汇编程序如下:MOV i,#032HMOV j,#0C6HDJNZ jDJNZ iRET */键盘矩阵为4*2,P1.4、P1.5为行,P1.0、P1.1、P1.2、P1.3为列,将列置高电平,行置低电平,进行扫描,如有按键按下,按键所在列就会被拉成低电平,此处默认P1.4为第一行,因此P1.4所在行的按键键值依照P1.3、P1.2、P1.1、P1.0的顺序为0、1、2、3,同理P1.5行所在的按键键值依照P1.3、P1.2、P1.1、P1.0依次为4、5、6、7,键值的计算程序段如下例:P1=0xff;P1_4=0;/从第1行开始扫描键盘temp=P1;temp=temp&0x0f;if(temp!=0x0f)/扫描控制 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp) /读取按键值 case 0x07: /判定P1.3key=0;Display(0xf9);/数码管显示1break;case 0x0b: /判定P1.2key=1;Display(0xa4);/数码管显示2break;case 0x0d: /判定P1.1key=2;Display(0xb0);/数码管显示3break;case 0x0e: /判定P1.0key=3;Display(0x99);/数码管显示4break;temp=P1;P3_6=P3_6;/准备发音STH0=tabkey/256; /计算音符对应的定时器计数值STL0=tabkey%256;/计数值低位TR0=1;/T0计时器开始工作temp=temp&0x0f;while(temp!=0x0f)/扫描循环temp=P1;temp=temp&0x0f;TR0=0;/T0计时器关闭P3_6=1;/关闭扬声器,防止电流噪音P1=0xff; /对P1口置高P1_5=0; /扫描P1.5行temp=P1;temp=temp&0x0f;if(temp!=0x0f) /扫描控制 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp) /读取按键值case 0x07: /判定P1.3key=4;Display(0x92);/数码管显示5break;case 0x0b: /判定P1.2key=5;Display(0x82);/数码管显示6break;case 0x0d: /判定P1.1key=6;Display(0xf8);/数码管显示7break;case 0x0e: /判定P1.0key=7;Display(0x80);/数码管显示8,此处8代表高一级音符1break;temp=P1;P3_6=P3_6; /准备发音STH0=tabkey/256;/计算音符对应的定时器计数值STL0=tabkey%256;/计数值低位TR0=1; /开T0中断temp=temp&0x0f;while(temp!=0x0f) /循环扫描temp=P1;temp=temp&0x0f;TR0=0; /关闭中断T0P3_6=1; /关闭蜂鸣器,防止噪音Display(0xf9); /数码管显示1,代表可调用低八度break; 3.3 数码管显示共阳极数码管的数字显示,并不通过译码器,因此需要在软件里面设置对应的代码,此时的代码并不具有规律性,因此只能对其输出做指定设置,09的对应字形码如下表3.3:(共阴极的数码管所用代码并不一样)“0”0xc0“5”0x92“1”0xf9“6”0x82“2”0xa4“7”0xf8“3”0xb0“8”0x80“4”0x99“9”0x90表3.3 数码管输出字型码表对应调用函数如下:void Display(unsigned char m) /定义数码管显示函数P2 = m;/显示需要显示的数值在输出时只需设置对应的代码即可。4 Proteus软件仿真4.1 键盘部分设计独立式按键按照4*2矩阵排列。图4.1 键盘仿真电路图4.2 蜂鸣器部分仿真此处用了无源蜂鸣器,在仿真时无需接三极管进行音频放大,使得仿真电路图简洁明了。图4.2 蜂鸣器仿真电路图4.3 数码管部分仿真基于Protues的基本功能,对数码管的仿真无需外接限流电阻即可实现,具体实现如图4.3:图4.3 数码管仿真电路图4.4 整体仿真设计基于单片机的最小系统,对外围电路的开发做了简单的配置,数码管接P2.0P2.6口,矩阵键盘接P1.0P1.5口,模式转换键在P3.0口控制输入,音阶转换键在P3.7口控制输入,蜂鸣器发声接P3.6口,具体见图4.4:图4.4 仿真电路总图5课程设计体会5.1 设计成果本次设计的最终结果与仿真完全吻合,能够实现高低音符的自由切换,也能够实现音符的准确调用及音乐的自动播放。系统启动时,数码管显示默认值1,此时可以调用低八度音符。当按下SW(SWITCH)键一次的时候,数码管显示2,此时可以调用中八度音符;当按下SW键二次的时候,数码管显示3,此时可以调用高八度音符;如此循环往复。矩阵键盘对应按键(C、D、E、F、G、A、B、C)按下的时候,数码管显示1、2、3、4、5、6、7、8,发音do、re、mi、fa、so、la、xi、do。无论数码管显示何值,当按下P(PLAY)键的时候,音乐自动播放,数码管显示0;按下RE(RESET)键的时候,终止播放,数码管恢复显示默认值1。5.2 心得体会通过本次电子设计训练,我们复习了很多专业知识,也让我们感悟颇多,具体起来有以下几点:1、 团队合作远比一个人的力量大得多,在这次的实训中,我们的分工与合作让我体会到了团队的重要性。2、 实践操作远比理论学习进步快得多,在这短暂的几天里,我对专业知识的理解突飞猛进地更进了一层,尤其是对51单片机、编程、PNP三极管、数码管显示以及蜂鸣器输出有了更详细地了解,考虑以后会踏入工作岗位,本次实训更是一次难得的锻炼机会。3、 知识的灵活运用远比知识的掌握更重要。在借鉴学习的过程中,发现矩阵的扫描可以逐行设置代码进行扫描,也可以通过循环函数对已知的端口设定扫描过程,程序简洁而实用。4、 努力重要,技巧更重要。在焊接的过程中,P1,P2,P3口作为I/O口,此时的焊接我们依据按键的功能进行了划分,分组排列,整齐而美观;数码管输出和蜂鸣器输出的排列,均在输出部分,采用就近接口的方式,同时考虑输出的一致性,将二者就近排列,达到了人性化的设计效果;对P1、P2端口的使用,我们又对端口进行了延伸,从而实现了排线连接,达到了美观的效果。5、 学习要认真,做事需细心。在设计软件仿真时和硬件焊接时,我们曾出过一些微小的错误,例如软件关闭中断之后需要软件关闭蜂鸣器,否则就会出现噪音。但在仔细检查过之后,作以修改,就能到达消除噪音的目的。参考文献书、专著:1张元良,王建军等.单片机开发技术实例.北京:机械工业出版社,2010.82徐爱钧.单片机原理与应用 基于Protues的虚拟仿真技术.北京:机械工业出版社,2010电子文献:1 做而论道.基于51单片机的4*4矩阵键盘电子琴. /%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d025718ab4fa7bdefc1f10b7.html, 2010-08-052做而论道.单片机播放音乐的基本知识/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d9581a512bddb3511138c282.html,2010-07-07附录1 源程序代码/本程序采用AT89S52 晶振频率11.0592MHz#include/头文件unsigned char temp,key,k,i,j,ID;/自定义字符变量unsigned char STH0,STL0;/自定义暂存变量unsigned char timerh, timerl, time;/自定义暂存变量sbit P1_4=P14;/定义行P1.4sbit P1_5=P15;/定义行P1.5sbit P3_0=P30;/定义音乐播放键sbit P3_6=P36;/定义扬声器输出口P3.6sbit P3_7=P37;/定义音符切换键unsigned int code tab= /音符表低音1超高音163627,63835,64021,64103, /低音1 2 3 464260,64400,64524,64580,/低音5 6 7 中音164684,64777,64820,64898,/中音2 3 4 564968,65030,65058,65110,/中音6 7 高音1 2 65157,65178,65217,65252,/高音3 4 5 6 65283,65297 /高音7 超高音1;code unsigned char mid = /春江花月夜 简谱 6,2,2,6,2,1,6,2,1,1,3,2,2,3,1,6,2,1,5,2,4,5,2,0,5,2,2,5,2,1,5,2,1,6,2,2,1,3,1,2,3,1,3,2,4,3,2,0,3,2,2,2,2,1,3,2,1,5,2,2,3,2,1,5,2,1,6,2,3,1,3,1,2,3,3,3,3,2,1,3,2,2,3,1,3,3,1,2,3,1,1,3,1,6,2,2,5,2,4,5,2,0,5,2,1,1,3,1,5,2,1,1,3,1,2,3,4,6,2,1,1,3,1,5,2,1,2,2,1,3,2,4,3,2,0,3,2,2,6,2,1,1,3,1,5,2,1,6,2,1,5,2,1,3,2,1,2,2,3,3,2,1,2,2,1,1,2,1,2,2,1,3,2,1,1,2,1,2,2,4,0,0,0,; /每个音符有三个数字构成,第一个数代表音符,第二个数代表音高 /默认1代表低音,2代表中音,3代表高音,第三个数代表节拍,此处用1代表16分音/符,2代表8分音符,3代表4分音符,4代表2分音符。void t1() interrupt 3 /T1中断程序,控制音乐发音的音调TR1 = 0; /先关闭T1P3_6=P3_6; /发音TH1 = timerh; /下次的中断时间, 这个时间, 控制音调高低TL1 = timerl; /音调时间长度TR1 = 1; /启动定时器T1void t0(void) interrupt 1/T0中断程序,控制按键发音 TH0=STH0; /控制音调高低TL0=STL0; /音调时间长度P3_6=P3_6; /发音void delay10ms(void)/延时10ms函数 for(i=50;i0;i-) for(j=198;j0;j-);/*每个指令12个机器周期,即1us,延时计算50*(198+2)+2=10002us延时精确计算汇编程序如下:*/MOV i,#032H/MOV j,#0C6H/DJNZ j/DJNZ i/RET void delay(unsigned char t) /延时函数,控制发音的时间长度unsigned char t1;unsigned long t2;for(t1 = 0; t1 t; t1+) /双重循环, 共延时t个半拍for(t2 = 0; t2 8000; t2+);TR1 = 0; /关闭T1, 停止发音 void Display(unsigned char m) /定义数码管显示函数P2 = m;/显示需要显示的数值void song() /演奏一个音符函数 TH1 = timerh; /控制音调高低TL1 = timerl;/音调时间长度TR1 = 1; /启动T1, 由T1输出方波去发音delay(time); /控制时间长度void main(void) /主程序 while(1)if(P3_0=0) /判断P3.0口为低电平时,执行音乐播放程序Display(0xc0);/执行播放程序时数码管显示0TMOD = 0x10; /置T1定时器的工作方式1ET1 = 1; /开T1中断EA = 1; /开CPU中断TR1=1; /定时器T1开始工作i = 0; /从开始处读音符表while(midi!=0) /只要有音符,就循环执行k = midi + 7 * (midi + 1-1) - 1;/第i个是音符, 第i+1个是第几个八度timerh = tabk/256; /从数据表中读出定时器计数值timerl = tabk%256; /计数值低位time = midi + 2; /读出时间长度数值i += 3;/每隔三个数为一个音符if(midi+2= 0 ) /设置音调时长为0时停顿delay10ms();song(); /发出一个音符 else if(P3_0=1)/当P3.1口电平为高时,执行扫描按键程序TMOD=0x01;/设置T0定时器,工作方式1ET0=1;/开T0中断EX0=1;EA=1;/开总中断if(P3_7=0)/判断P3.7口的按键次数 delay10ms();/延时消抖if(P3_7=0)/P3.7初值为0 ID+;/每有按键按下,计数加1if(ID=3)/设定最高值,每当值为3时返回值0,重新循环ID=0;while(P3_7=0);/循环设定switch(ID) /根据ID的值判断音域范围case 0: /ID为0时P1=0xff;P1_4=0;/从第1行开始扫描键盘temp=P1;temp=temp&0x0f;if(temp!=0x0f)/扫描控制,含消抖 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp) /读取按键值 case 0x07: /判定P1.3key=0;Display(0xf9);/数码管显示1break;case 0x0b: /判定P1.2key=1;Display(0xa4);/数码管显示2break;case 0x0d: /判定P1.1key=2;Display(0xb0);/数码管显示3break;case 0x0e: /判定P1.0key=3;Display(0x99);/数码管显示4break;temp=P1;P3_6=P3_6;/准备发音STH0=tabkey/256; /计算音符对应的定时器计数值STL0=tabkey%256; /计数值低位TR0=1; /T0计时器开始工作temp=temp&0x0f;while(temp!=0x0f) /扫描循环temp=P1;temp=temp&0x0f;TR0=0;/T0计时器关闭P3_6=1;/关闭扬声器,防止电流噪音P1=0xff; /对P1口置高P1_5=0;/扫描P1.5行temp=P1;temp=temp&0x0f;if(temp!=0x0f) /扫描控制 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp) /读取按键值case 0x07: /判定P1.3key=4;Display(0x92);/数码管显示5break;case 0x0b: /判定P1.2key=5;Display(0x82);/数码管显示6break;case 0x0d: /判定P1.1key=6;Display(0xf8);/数码管显示7break;case 0x0e: /判定P1.0key=7;Display(0x80);/数码管显示8(代表中音1)break;temp=P1;P3_6=P3_6; /准备发音STH0=tabkey/256;/计算音符对应的定时器计数值STL0=tabkey%256;/计数值低位TR0=1; /开T0中断temp=temp&0x0f;while(temp!=0x0f) /循环扫描temp=P1;temp=temp&0x0f;TR0=0; /关闭中断T0P3_6=1; /关闭蜂鸣器,防止噪音Display(0xf9);/数码管显示1,代表可调用低八度音阶break; case 1: /ID为1时P1=0xff; /对P1口置高P1_4=0; /从P1.4行开始扫描键盘temp=P1;temp=temp&0x0f;if(temp!=0x0f) /扫描控制 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp)/读取按键值 case 0x07: /判定P1.3key=0;Display(0xf9);/数码管显示1break;case 0x0b: /判定P1.2key=1;Display(0xa4);/数码管显示2break;case 0x0d: /判定P1.1key=2;Display(0xb0);/数码管显示3break;case 0x0e: /判定P1.0key=3;Display(0x99);/数码管显示4break;temp=P1;P3_6=P3_6;/准备发音STH0=tabkey+7/256;/计算中八度音符的定时器计数值STL0=tabkey+7%256;/计数值低位TR0=1;/开中断T0temp=temp&0x0f;while(temp!=0x0f)/循环扫描temp=P1;temp=temp&0x0f;TR0=0; /关闭中断T0P3_6=1;/关闭蜂鸣器,防止噪音P1=0xff; /P1口置高P1_5=0; /扫描P1.5行temp=P1;temp=temp&0x0f;if(temp!=0x0f) /扫描控制 delay10ms();temp=P1;temp=temp&0x0f;if(temp!=0x0f)temp=P1;temp=temp&0x0f;switch(temp) /读取按键值case 0x07: /判定P1.3key=4;Display(0x92);/数码管显示5brea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论