嵌入式简易电子琴系统设计报告.doc_第1页
嵌入式简易电子琴系统设计报告.doc_第2页
嵌入式简易电子琴系统设计报告.doc_第3页
嵌入式简易电子琴系统设计报告.doc_第4页
嵌入式简易电子琴系统设计报告.doc_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统原理与应用综合设计报告简易电子琴系统设计系 部:电子与信息工程系专业班级:学生姓名:学 号:小组成员:指导教师:时 间:2012.6.42012.6.29完 成 日 期 2012年 6月目录1绪论11.1 综合设计目的11.2 简易电子琴简介11.2.1 电子琴在中国的发展11.2.2 电子琴发明的意义11.2.3 电子琴的电学原理21.3芯片简介21.3.1 lm3s2110微控制器21.3.2 arm cortex-m3处理器内核31.3.3 通用输入/输出端口(gpio)31.3.4 脉宽调制器 (pwm)32综合设计内容42.1综合设计题目42.2综合设计要求42.2.1主要内容42.2.2主要技术指标、要求42.2.3所用设备与器材43 硬件方案53.1 系统硬件的构成与原理53.2 arm 2110开发板原理与应用53.2.1 lm3s2110特性概述53.2.2 lm3s2110的gpio特性63.3 独立按键63.4 矩阵键盘73.5蜂鸣器83.6 led灯应用方式93.7 1602字符液晶屏104 软件方案114.1设计原理框图114.2程序流程图114.3导线连接方案124.4调试过程135结束语145.1设计总结与感想145.2答谢词14参考文献15附录一 arm 2110芯片16附录二 44矩阵键盘16附录三 蜂鸣器模块17附录四 lcd显示屏17附录五 led灯模块18附录六 实验成果图18附录七 程序清单191.头文件192.定义led193.定义key194.lcd模块使能195.lcd显示206.led灯模块212012.6 上海师范大学天华学院电子工程系arm综合设计551绪论1.1 综合设计目的通过本次综合设计,运用已学的课程知识,根据题目要求进行软硬件系统的设计和调试,对嵌入式系统原理与应用课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力,从而加深对本课程知识点的理解,使应用知识能力、设计能力、调试能力以及报告撰写能力等方面有显著提高。1.2 简易电子琴简介电子琴是现代电子科技与音乐结合的产物,它在现代音乐中扮演着重要角色。1.2.1 电子琴在中国的发展在中国,1958年北京邮电学院研制了一台电子管单音电子琴。由于种种原因,至1977年后,我国才大批生产电子琴。1989年,我国年产儿童电子琴200万台,并出口39万台。中国的电子琴事业正在迅速发展。电子琴发展很快,琴的各项功能日趋完善。音色和节奏有最初的几种发展到现在的几百种。除寄存音色外,还可通过插槽外接音色卡。合成器的某些功能,如音色的编辑修改、自编节奏、多轨录音、演奏程序记忆等也运用到电子琴上。 1.2.2 电子琴发明的意义电子琴的发明具有重大的意义: (一)电子琴的发明极大地推动了流行音乐的发展; 现代的流行音乐离不开电子琴,键盘手一般是现代电声乐队的中坚力量。(单排键)电子琴、电吉他、架子鼓是流行音乐的三项主流乐器。 (二)电子琴的发明使人们可以演奏出未曾拥有的音色,丰富了人们情感的表现;电子琴创造出了许多其他乐器无法演奏出的音色,甚至自然不存在的音色,这些音色帮助了人们通过音乐表现自己的情感,在很多电视节目或者音乐作品中都有运用。 (三)电子琴的发明推动了音乐的普及,它让音乐真正成为了大众的音乐,成为了人类社会不可缺少的东西。电子琴是目前用于音乐普及教育和音乐素质培养最多的乐器,它的经济性为他在普通家庭中的普及带来了可能。电子琴作为科技与音乐的产物,在信息化和电子化的时代,为音乐的大众化做出了不可磨灭的贡献,现代歌曲的制作,很多都需要电子琴才能完成,然后才通过媒介流传开来,电视剧电影插曲、电视节目音效、甚至你的手机铃声,都很可能包含电子琴的身影。1.2.3 电子琴的电学原理现在的电子琴一般使用pcm或awm采样音源。所谓采样就是录制乐器的声音,将其数字化后存入rom里,然后按下键时cpu回放该音。甚至有一些高级编曲键盘可以使用外置采样。现代电子琴并非“模仿”乐器音色。它使用的就是真实乐器音色。当然,现在力度触感在电子琴里是必备的。而且现代电子琴还加上了老式电子琴的滤波器,振荡器,包络线控制来制造和编辑音色。甚至也带上了老式电子琴的fm合成机构。 1.3芯片简介1.3.1 lm3s2110微控制器本次设计任务所要使用到的微控制器是德州仪器(ti)公司提供的lm3s2110微控制器,这款微控制器是基于arm cortex-m3内核的微控制器,它为对成本尤其敏感的嵌入式微控制器应用方案带来了高性能的32位运算能力。该stellaris系列芯片能够提供高效的性能、广泛的集成功能以及按照要求定位的选择,适用于各种关注成本并明确要求具有的过程控制以及连接能力的应用方案。1.3.2 arm cortex-m3处理器内核cortex-m3内核主要是应用于小管脚数、低成本和低功耗的场合,并且具有极高的运算能力和极强的中断响应能力。cortex-m3采用了新型的单线调试技术,专门拿出一个引脚来做调试,节约了大笔的调试工具费用。同时,cortex-m3可以直接在mcu外连接flash,降低了设计难度和应用障碍,因此其发展趋势亦不容小觑。1.3.3 通用输入/输出端口(gpio)gpio模块由 8个物理gpio 模块组成,每个对应一个独立的gpio端口(端口a, 端口b, 端口c, 端口d, 端口e, 端口f, 端口g, 和端口h)。gpio模块遵循firm规范,并且支持11-40 个可编程的输入/输出管脚,具体取决于正在使用的外设。1.3.4 脉宽调制器 (pwm)脉宽调制(pwm)是一项功能强大的技术,它是一种对模拟信号电平进行数字化编码的方法。在脉宽调制中使用高分辨率计数器来产生方波,并且可以通过调整方波的占空比来对模拟信号电平进行编码。pwm通常使用在开关电源和电机控制中。stellaris pwm模块由 1个 pwm发生器模块 1个控制模块组成。 pwm发生器模块包含1个定时器,2个pwm比较器,pwm信号发生器,死区发生器和中断 选择器。而控制模块决定了pwm信号的极性,以及将哪个信号传递到管脚。pwm发生器模块产生两个pwm信号,这两个pwm信号可以是独立的信号,也可以是一对插入了死区延迟的互补信号。pwm发生模块的输出信号在传递到器件管脚之前由输出控制模块管理。pwm模块具有极大的灵活性。它可以产生简单的pwm信号,如简易充电泵需要的信号;也可以产生带死区延迟的成对pwm信号,如供半-h桥驱动电路使用的信号。2综合设计内容2.1综合设计题目简易电子琴2.2综合设计要求2.2.1主要内容利用实验资源实现简易电子琴的功能:(1) 用蜂鸣器发出不同声音;(2) 使用lcd显示器来显示音阶输入的相关信息;(3) 当按下键盘组相对按键,蜂鸣器会发出相对音阶单音,共有两个8度音阶;(4) 至少可以输入16个单音,可以一起演奏出来;(5) 演奏时可以按键中断;(6) 可以实时显示目前演奏的单音码。2.2.2主要技术指标、要求(1) 充分利用自己设计的开发板的硬件的资源进行设计;(2) 通过调整pwm的周期,改变占空比生产不同频率的信号;(3) 实现按键发出相对音阶单音;(4) 利用1602a动态显示音阶消息。2.2.3所用设备与器材(1)arm 2110 芯片(2)44矩阵键盘(3)单片机/嵌入式实践平台的功放模块(即蜂鸣器)(4)1602 lcd液晶显示屏(5)led灯模块3 硬件方案3.1 系统硬件的构成与原理本次设计的简易电子琴系统主要使用到的硬件有lm3s2110微控制器、独立按键、44矩阵键盘、led灯模块、蜂鸣器、lcd液晶显示屏、电源等。该系统的原理框图如图4.1所示,利用lm3s2110微控制器驱动液晶显示屏、蜂鸣器和led灯模块;使用独立按键来跳出、停止或开启蜂鸣器播放音乐;使用矩阵键盘来实现简易电子琴的演奏功能;使用led灯来显示音阶。 3.2 arm 2110开发板原理与应用arm2110开发板中包含一块lm3s2110微控制器,另外主要可以使用的元器件有:1个rst键,4个独立按键,通用输入/输出端口(gpio)。该开发板的原理电路图见附录一。3.2.1 lm3s2110特性概述lm3s2110 微控制器是针对工业应用方案而设计的,包括远程监控、电子贩售机、测试和测量设备、网络设备和交换机、工厂自动化、hvac和建筑控制、游戏设备、运动控制、医疗器械、以及火警安防。除此之外,该lm3s2110微控制器的优势还在于能够方便的运用多种arm的开发工具和片上系统(soc)的底层ip应用方案,以及广大的用户群体。 另外,该微控制器使用了兼容arm的thumb指令集的thumb2指令集来减少存储容量的需求,并以此达到降低成本的目的。lm3s2110微控制器与stellaris系列的所有成员是代码兼容的,这为用户提供了灵活性,能够适应各种精确的需求。与此同时,它还提供出色的计算性能和优越的系统中断响应能力。总的来说,其特性包括:(1)紧凑的内核;(2)thumb-2指令集,在通常与8位和16位设备相关的存储容量中,特别是在微控制器级应用的几千字节存储量中,提供arm内核所期望的高性能;(3)高速的应用通过harvard结构执行,以独立指令和数据总线为特征;(4)优越的中断处理能力,通过执行寄存器操作来实现,这些寄存器操作在处理硬件中断时使用;(5)存储器保护单元(mpu)为复杂的应用提供特权操作模式;(6)从 arm7 控制器系列中移植过来,以获得更好的性能和电源效率;(7)功能齐全的调试解决方案有:串行线jtag调试端口(swj-dp); flash 修补和断点(fpb)单元,用于实现断点操作;数据观察点和触发(dwt)单元,用于执行观察点、触发源和系统性能分析;仪表跟踪宏单元(itm),用于支持printf 型调试;跟踪端口接口单元(tpiu)用作跟踪端口分析仪的桥接。3.2.2 lm3s2110的gpio特性gpio模块由 8个物理gpio 模块组成,每个对应一个独立的gpio端口(端口a, 端口b, 端口c, 端口d, 端口e, 端口f, 端口g, 和端口h)。gpio模块遵循firm规范,并且支持11-40 个可编程的输入/输出管脚,具体取决于正在使用的外设。gpio模块具有以下的特性:(1)可编程控制gpio中断:屏蔽中断发生;边沿触发(上升沿,下降沿,上升、下降沿);(高或低)电平触发。(2)输入/输出可承受5v电压。(3)在读和写操作中通过地址线进行位屏蔽。(4)可编程控制gpio引脚配置。本次设计使用的开发板上的微控制器lm3s2110上可使用的引脚有pa0pa6(7个)、pb0pb6(7个)、pc4pc7(4个)、pd0pd7(8个)、pe0pe1(2个)、pf0pf2(3个)、pg0pg1(2个)、ph0ph1(2个)。3.3 独立按键arm2110开发板中有4个独立按键,其原理电路图如图3.1所示。这四个独立按键key1key4各自的一端依次连接在微控制器lm3s2110上的ph1、pb6、pb5、pb4四个引脚上。图3.1 4个独立按键电路图根据图3.1可以看出,当这四个引脚中的某个引脚得到低电平时,代表其相连的按键被按下,如:引脚pb4得到低电平就代表key4被按下。3.4 矩阵键盘在键盘中按键数量较多时,为了减少i/o口的占用,通常将按键排列成矩阵形式,如图3.2所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如p1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,行线通过电阻接正电源,并将列线所接的单片机的i/o口作为输出端,而行线所接的i/o口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。列线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 图3.2 44矩阵键盘电路图3.5蜂鸣器蜂鸣器的原理电路图如图3.3所示,控制蜂鸣器的端口为pb1引脚,当pb1引脚输入低电平时,蜂鸣器会鸣叫。由于蜂鸣器的工作电流一般比较大,以致于mcu的i/o口是无法直接驱动的,所以要利用放大电路来驱动,如图3.3所示,其中的三极管q1(8050)就是用来放大电流以驱动蜂鸣器的。图3.3蜂鸣器电路图在嵌入式应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。一般驱动蜂鸣器的方式有两种:一种是pwm 输出口直接驱动,另一种是利用i/o 定时翻转电平产生驱动波形对蜂鸣器进行驱动。本设计中就是使用了pwm 输出口直接驱动的方式来驱动蜂鸣器,以此来实现电子琴的发音功能。pwm 输出口直接驱动是利用pwm 输出口本身可以输出一定的方波来直接驱动蜂鸣器。只要打开pwm 输出,pwm 输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。3.6 led灯应用方式led即发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。led的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是p型半导体,在它里面空穴占主导地位,另一端是n型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“p-n结”。当电流通过导线作用于这个晶片的时候,电子就会被推向p区,在p区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是led发光的原理。而光的波长决定光的颜色,是由形成p-n结材料决定的。图3.4 led灯电路图本设计实验中,有8个led小灯,其原理电路图如图3.4所示。这8个小灯led1led8各自的负极连接了一个4.7k的电阻后依次连接在微控制器lm3s2110上的pa4、pa5、pa6、pg0、pf2、pg1、pe0、pe1这8个引脚上,当这8个引脚中的某个引脚得到低电平时,其相连的led小灯就会亮起。3.7 1602字符液晶屏1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符。1602lcd特征及应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。因为1602识别的是ascii码,实验可以用ascii码直接赋值。如“1” 的ascii码值为“49”,可以直接赋值“49”到显示数字“1”的效果。 (a) (b)图3.5 (a)lcd液晶屏排针接口 (b)实验中用到的对应ascii码值4 软件方案4.1设计原理框图根据本次设计的要求和设计方案,需要实现简易电子琴系统必须在arm 2110芯片的基础上加上电源电路、时钟电路、复位电路、矩阵键盘等外设,通过lm3s2110微控制器写入程序控制蜂鸣器、lcd显示屏、led灯模块根据音阶发音或显示。设计原理框图如图4.1所示图4.1 简易电子琴系统原理框图4.2程序流程图根据本次设计的要求和设计方案,最终实现了简易电子琴系统如下功能:(1)独立按键key1控制音乐播放的停止和播放音乐与矩阵按键演奏之间转换的功能。(2)独立按键key2开启音乐1(一分钱)(3)独立按键key3开启音乐2(理发师)(4)独立按键key4开启音乐3(梁祝)(5)矩阵键盘实现电子琴演奏功能,16个按键依次通过蜂鸣器发出:m1、m2、m3、m4、m5、m6、m7、l5、h1、h2、h3、h4、h5、h6、l6、l7等音阶,并将音阶对应显示在lcd显示屏上。(6)使用程序定义使得led灯模块根据不同音阶亮不同灯的个数,实现led灯跳跃显示功能。(7)通过arm 2110芯片复位键初始化程序,重新开始简易电子琴系统。程序流程图如图4.2所示。图4.2 程序流程图4.3导线连接方案实验过程中需要连接以下导线:(1)矩阵键盘由上至下、由左向右依次连接:vcc、pa0、pa1、pa2、pa3、悬空、pc4、pc5、pc6、pc7。(2)lcd显示屏由上至下依次连接:pd0pd7,使能端连接pb0,写入端连接pb2。(3)led灯模块依次连接:pa4、pa5、pa6、pg0、pf2、pg1、pe0、pe1,电源连接3v。(4)蜂鸣器模块信号输入管脚连接pb1,gnd管脚连接arm2110实验板的地端。4.4调试过程在调试过程中,首先要做好硬件调试,然后再进行软硬件共同调试。所以第一步需要检查各硬件的完好性,其次检测各芯片的电源线和地线是否接触良好,接好电源后用万用表检测各电源端、地端的状态是否正常。检查无误后通过烧写工作程序,根据显示现象调试程序直至成功。在编写程序前,首先应该将各部分硬件原理全部理解,尤其重要的是要掌握各元件的使能方式,是低电平使能还是高电平使能。当这些基础问题都不再出错的时候,然后才能逐步编写程序。软件调试时,必须先编写一些简易程序来熟悉和掌握微控制器和开发板的使用方式。在此过程中编写的简易程序有:单个按键控制单个led灯、矩阵键盘控制蜂鸣器、led灯闪烁、lcd显示字符等。通过这些简单功能的实现,可以掌握arm2110开发板的各种功能的实现方法和使用方法,如gpio输入输出的定义方式、写入读出的方式、使能和关闭使能的方式,从而掌握了编程的基础,再根据平时c语言的基础,继续逐步编写程序。在完成上述的软硬件调试后,逐步进行系统软件设计。在整体的软件设计时采用模块化的设计,首先加入矩阵键盘控制蜂鸣器模块发音功能,然后根据音阶在lcd显示屏上显示所需字符,接着加入独立按键播放音乐与停止、转换等功能,再后来添加led灯模块使得电子琴功能更具有特色,最后综合所有模块,最终完成整个简易电子琴系统的设计。5结束语5.1设计总结与感想本次基于arm2110的简易电子琴系统的设计最终做到了使用矩阵键盘演奏16个音阶,使用独立按键播放音乐,并用key1键实现停止、转换功能,同时加入lcd显示屏、led灯的特色。本次设计是一个简易的、较为完善的电子琴系统,其操作方法简单,显示效果简洁、明了而合理,成本较低,它将适合于大众化的使用。我从本次嵌入式综合设计中学到了很多,对于嵌入式系统有了更深入的了解与应用。通过模块化的设计过程我对arm2110芯片的知识有了了解,并且能在原始程序的基础上做小的改动,使其更适用于简易电子琴系统,对于课本知识也有了实战性操作,在此过程中我的应用知识能力、设计能力、调试能力以及报告撰写能力等方面有了显著提高。5.2答谢词在几个星期的学习和实践中,起初我对简易电子琴系统的概念一无所知,在老师、老师的讲解与指导下,我参考了了大量的资料和程序,并开始尝试一次一次的实验。在同学的帮助下,我慢慢开始了解整个设计的重点知识,并且有了初步的实验成果。在完成简易电子琴系统基本功能的时候我感觉自己已经达到了要求,但是在老师与其他同学的支持下,又开始了拓展功能的开发,使得自己的电子琴更加独具特色。在本次设计制作的期间,老师和老师给予了我很大的帮助,如果没有他们的谆谆教导和循循善诱,我可能会一筹莫展许久,但是有了他们的引导,使我能在毫无基础的情况下,用短短几周的时间不仅实现了简易电子琴系统的基本功能,并使其拥有属于自己的亮点。除此之外,还有同学也给予我很大的帮助,他们身体力行帮我解决困难,及时地帮我指出错误,让我少走很多弯路。在此,我要对他们表达真挚的谢意:谢谢你们!参考文献1 周立功.arm嵌入式系统基础教程(第2版)m.北京:北京航空航天大学出版社, 20082 姚文详.arm cortex-m3权威指南m.北京:北京航空航天大学出版社,20093 陈明荧.8051单片机课程设计实训教材m.北京:清华大学出版社,20084 魏洪兴.周亦敏.嵌入式系统设计与实例开发实验教材iim.北京:清华大学出版社,20075 江力.单片机原理与应用技术m.北京:清华大学出版社,20076 luminary micro公司.lm3s1138微控制器数据手册m.2008/20107 王福瑞等.单片微机测控系统设计大全m.北京:北京航空航天大学出版社,20078 赵星寒.从51到arm:32位嵌入式系统入门m.北京:北京航空航天大学出版社,20089 彭伟等.单片机典型系统设计实例精讲m.北京:清华大学出版社,200910百度百科.电子琴db/view/34591.htm附录一 arm 2110芯片附录二 44矩阵键盘附录三 蜂鸣器模块附录四 lcd显示屏附录五 led灯模块附录六 实验成果图附录七 程序清单1.头文件#include systeminit.h#include buzzer.h#include music.h#include systeminit.h#define lcden gpio_pin_0 /pb0;#define lcdrs gpio_pin_2 /pb2;2.定义led#define led1_periphsysctl_periph_gpioa#define led1_portgpio_porta_base#define led1_pin gpio_pin_43.定义key#define key_periph2 sysctl_periph_gpiob#define key_port2 gpio_portb_base#define key_pin2 gpio_pin_6|gpio_pin_5|gpio_pin_44.lcd模块使能void write_com(unsigned char com) /写命令gpiopinwrite(gpio_portb_base,lcdrs,0x00);/ lcdrs=0;gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2|gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7,com); sysctldelay(5 * (thesysclock / 4000); / 延时 5msgpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; void write_data(unsigned char date)gpiopinwrite(gpio_portb_base,lcdrs,0xff); / lcdrs=1;gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2|gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7,date);sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0;void init()sysctlperienable(sysctl_periph_gpiod); /使能a端口gpiopintypeout(gpio_portd_base, gpio_pin_0|gpio_pin_1|gpio_pin_2|gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7); sysctlperienable(sysctl_periph_gpiob); gpiopintypeout(gpio_portb_base, gpio_pin_0|gpio_pin_2);gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);/ 在开始清屏write_com(0x80+0x10); /数据指针地址5.lcd显示write_com(0x82); /设定上排的显示位置write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(77); /整型数据转换为asc2/mwrite_data(54); /整型数据转换为asc2 /6write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格write_data(32); / 空格sysctldelay(100 * (thesysclock / 4000);buzzerquiet();6.led灯模块gpiopinwrite(led1_port, led1_pin, 0x00); / 点亮ledgpiopinwrite(led2_port, led2_pin, 0xff); / 熄灭ledgpiopinwrite(led3_port, led3_pin, 0xff); gpiopinwrite(led4_port, led4_pin, 0xff); gpiopinwrite(led5_port, led5_pin, 0xff); gpiopinwrite(led6_port, led6_pin, 0xff); gpiopinwrite(led7_port, led7_pin, 0xff); gpiopinwrite(led8_port, led8_pin, 0xff); 以下为主函数main.c可以不写入实验报告,仅供参考#include systeminit.h#include buzzer.h#include music.h#include systeminit.h#define lcden gpio_pin_0 /pb0;#define lcdrs gpio_pin_2 /pb2;/ 定义led#define led1_periph sysctl_periph_gpioa#define led1_port gpio_porta_base#define led1_pin gpio_pin_4#define led2_periph sysctl_periph_gpioa#define led2_port gpio_porta_base#define led2_pin gpio_pin_5#define led3_periph sysctl_periph_gpioa#define led3_port gpio_porta_base#define led3_pin gpio_pin_6#define led4_periph sysctl_periph_gpiog#define led4_port gpio_portg_base#define led4_pin gpio_pin_0#define led5_periph sysctl_periph_gpiof#define led5_port gpio_portf_base#define led5_pin gpio_pin_2#define led6_periph sysctl_periph_gpiog#define led6_port gpio_portg_base#define led6_pin gpio_pin_1#define led7_periph sysctl_periph_gpioe#define led7_port gpio_porte_base#define led7_pin gpio_pin_0#define led8_periph sysctl_periph_gpioe#define led8_port gpio_porte_base#define led8_pin gpio_pin_1/ 定义key#define key_periph2 sysctl_periph_gpiob#define key_port2 gpio_portb_base#define key_pin2 gpio_pin_6|gpio_pin_5|gpio_pin_4/连接方式 矩阵键盘的行线接pc47 列线接pa03unsigned char data; /pd0-pd7;unsigned char num;int guan;int jian;int numm;/lcd显示模块技术/lcd模块void write_com(unsigned char com) /写命令 gpiopinwrite(gpio_portb_base,lcdrs,0x00); / lcdrs=0; gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7,com);/pd=com;sysctldelay(5 * (thesysclock / 4000); / 延时 5msgpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; void write_data(unsigned char date)gpiopinwrite(gpio_portb_base,lcdrs,0xff); / lcdrs=1;gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7,date);/pd=date; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0;void init()sysctlperienable(sysctl_periph_gpiod); /使能a端口 gpiopintypeout(gpio_portd_base, gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7); sysctlperienable(sysctl_periph_gpiob); gpiopintypeout(gpio_portb_base, gpio_pin_0|gpio_pin_2); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01); / 在开始清屏write_com(0x80+0x10); /数据指针地址/lcd模块结束,矩阵键盘模块开始 unsigned char keyscan(void) if (gpiopinread(key_port2, key_pin2) = 0x30) / 如果按下key2 num=17; return num; else if (gpiopinread(key_port2, key_pin2) = 0x50) / 如果按下key3 num=18; return num; else if (gpiopinread(key_port2, key_pin2) = 0x60) / 如果按下key4 num=16; return num; gpiopintypeout(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7); gpiopintypeout(gpio_porta_base,gpio_pin_0| gpio_pin_1| gpio_pin_2| gpio_pin_3); gpiopinwrite(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7,0xf0); gpiopinwrite(gpio_porta_base,gpio_pin_0| gpio_pin_1| gpio_pin_2| gpio_pin_3,0x00); gpiopintypein(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7); guan=gpiopinread(gpio_portc_base, 0xff)&0xf0; jian=gpiopinread(gpio_porta_base,0xff)&0x0f; guan=jian|guan; if(guan!=0xf0) sysctldelay(5 * (thesysclock / 4000); if(guan!=0xf0) gpiopintypeout(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7); gpiopintypeout(gpio_porta_base,gpio_pin_0| gpio_pin_1| gpio_pin_2| gpio_pin_3); gpiopinwrite(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7,0xf0); gpiopinwrite(gpio_porta_base, gpio_pin_0| gpio_pin_1| gpio_pin_2| gpio_pin_3,0x07); gpiopintypein(gpio_portc_base,gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7); guan=gpiopinread(gpio_portc_base, gpio_pin_4| gpio_pin_5| gpio_pin_6| gpio_pin_7)&0xf0; jian=gpiopinread(gpio_porta_base,gpio_pin_0| gpio_pin_1| gpio_pin_2| gpio_pin_3)&0x0f; guan=jian|guan; if(guan=0x77) sysctldelay(5 * (thesysclock / 4000); if(guan=0x77) num=11; return num; if(guan=0xb7) sysctldelay(5 * (thesysclock / 4000); if(guan=0xb7) num=7; return num; if(guan=0xd7) sysctldelay(5 * (thesysclock / 4000); if(guan=0xd7) num=4; return num; if(guan=0xe7) sysctldelay(5 * (thes

温馨提示

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

最新文档

评论

0/150

提交评论