单片机第一次实验

合集下载

单片机实训报告范文精选5篇

单片机实训报告范文精选5篇

单片机实训报告范文精选5篇单片机实训报告范文精选5篇实训报告破记录是展示自身实训收获成长的重要报告,那么实训报告该如何写到呢?精选了一些关于职业培训报告的优秀范例,一起来看看吧。

单片机课程设计心得体会在学校学习期间我有幸的参与了学校的单片机学习小组,在小组里我了解了什么是单片机,单片机有哪些用途,利用单片机可以实现哪些功能来方便人们的都市生活如交通灯,时钟,还有手机中,电子玩具等等,它们里面确实有单片机的某种存在来实现某种功能。

通过在单片机小组里的学习我简单总结了几点心得和体会:第一:万事开头难,要勇敢的跨进第一步,不要总找借口说没有学习过就总推脱。

凡事都有第一步可以先可简单的来,然后可以逐步的向深层学习。

可以从建项目开始,然后可以找一个简单的小程序先把它敲进单片机内然他运行起来,感觉一下单片机的运行,让自己了解传输数据单片机整个运行。

第二:对于知识点,学过的要掌握牢固,对于没有学的和不暂时用不到的先不用学习。

比如:小灯得点亮就没有用到中断可以不用看。

这样可以避免知识过多记不住的麻烦。

对于程序这里的知识点不能只停留在理论层次上,一定要结合着程序处理过程进行学习这样才能掌握的很牢靠,当用到哪里的题型不记得了可以用做去看书,对于用不到的可以毛序看。

第三:处理过程不要只是看别人得,一定要自己写过就要是自己的。

开始深奥难懂可以参考别人的,看看每一句代表着什么意思,能够同时实现什么现象。

明白接著自己再重新写一遍,你会发现看别人的能懂到自己写的时候太困难。

当你自己能写出来的时候说明你真佐证懂了。

第四:一定要学会程序调试的原理。

有时候把程序写完了然后运行时不能实现理想的现象。

这时有人就晕了胡乱不知该怎么办,然后就去问别人。

当别人找出问题出在哪里就会恍然大悟。

当遇到问题一定要自己尝试着解决,不能遇到问题就去问别人。

自己一定很高要掌握解决问的方法和思路。

第五:在学习初期看别人的代码,学习别人的路子这个很有用。

通过看理论知识别人的标识符特别是有多年编程经验的人的程序,可以迅速提高自己的编程迅即技术水准。

单片机实验报告

单片机实验报告

单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。

2 熟悉循环结构程序的编写。

3 熟悉编程环境和程序的调试。

二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。

例如将4000H开始的10个字节内容清零或全部赋值为33H。

注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。

2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。

5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。

三、实验仪器微机、VW,WA VE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器MCS51实验四、实验步骤1、新建工程文件。

(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。

3、运行和调试过程。

外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。

同时,学习掌握汇编程序的编写和调试过程。

实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。

2 熟悉循环结构程序的编写,进一步熟悉指令系统。

3 熟悉编程环境和程序的调试。

二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。

单片机实验心得体会7篇

单片机实验心得体会7篇

单片机实验心得体会7篇单片机实验心得体会1三月七号下午我们做了第一次单片机实验,虽然对单片机还不是很了解,但在学长的带领下我们基本上了解了单片机的的开发环境,进行了简单的编程。

李老师的一番话令我很受启发。

实践出真知,这是永恒不变的真理。

只有将理论付诸于实践并在实践中纠正发展理论,我们才能算是得到了真正的知识。

实验开始,学长直接从具体的编译细节讲起。

没有太多的介绍和理论的空谈。

就像老师说的没有必要把人民币的各个细节都了解的很清楚后才开始用钱一样。

很多时候我们正是在那些细枝末节上浪费了太多不必要的时间和精力。

通过一个简单的程序的讲解,我们就对CVAVR和AVRStudio有了初步的掌握。

看着一闪一闪的1ED,我们小组感到了单片机的神奇和奥秘,一种难以言表的激动涌上心头。

我们就像看到了交通拥挤的路上因为有了我们设计的红绿灯而变得秩序井然一样欣慰。

接下来我们组稍微改了下程序,变为了同时控制四个灯,而且让它们依次亮起,只是延迟的时间比预定的要长一些。

这也应该是十字路口的交通灯的原理吧。

总结起来,本次试验还是比较成功的。

但对下一次的试验充满了期待,希望能做出更有用,更贴近生活的作品。

我想也正是在这种不断的自我期望中,人类才能不断的总结经验,阔步向前。

单片机实验心得体会2通过今次单片机实训,使我对单片机的认识有了更深刻的理解。

系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。

由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。

例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。

踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。

当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。

我相信其中的酸甜苦辣最终都会化为甜美的甘泉。

但在这次实训中同时使我对汇编语言有了更深的认识。

[整理]单片机6个必做实验

[整理]单片机6个必做实验

第一部分软件实验实验一二进制到BCD码转换一、实验目的1、掌握简单的数值转换算法2、基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。

掌握各种数制之间的转换是一种基本功。

我们将给定的一个二进制数,转换成二十进制(BCD)码。

将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。

三、实验内容及步骤1、启动计算机,打开伟福仿真软件,进入仿真环境。

首先进行仿真器的设置,选择使用伟福软件模拟器。

2、打开TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。

用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。

修改源程序中给累加器A的赋值,重复实验,观察实验效果。

3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图实验四程序跳转表一、实验目的1、了解程序的多分支结构2、掌握多分支结构程序的编程方法二、实验说明多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。

若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。

单片机实训报告总结

单片机实训报告总结

单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。

通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。

同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。

此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。

2.了解复杂电子产品生产制造的全过程。

3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。

4.能运用51单片机进行简单的单片机应用系统的硬件设计。

5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

它的电气性能指标:输入电压:~6V,典型值为5V。

可用干电池组供电,也可用直流稳压电源供电。

如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。

他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。

2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。

51单片机实验手册

51单片机实验手册

51单片机实验手册一、概述51单片机是一种经典的8位微控制器,具有广泛的应用领域。

本实验手册旨在提供详细的实验指导,帮助初学者快速入门,并为进一步的学习提供基础。

二、实验准备在进行51单片机实验之前,我们需要准备以下材料:1. 一块51单片机开发板2. USB数据线或者串口线3. 电脑及编程软件4. 面包板及对应的连接线5. 红、绿、蓝LED以及相应的电阻三、实验一:LED闪烁LED闪烁是最基础的实验之一,通过控制51单片机的I/O口状态,使LED灯交替亮灭。

1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将LED的长脚连接到P1.0引脚,短脚连接到GND引脚。

2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>void main() {while(1) {P1 = 0x00; // P1置低电平,LED灯熄灭Delay(1000); // 延时1秒P1 = 0xFF; // P1置高电平,LED灯点亮Delay(1000); // 延时1秒}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。

4. 运行实验将USB数据线或串口线连接到51单片机开发板和电脑,将开发板上的开关打开,观察LED灯的闪烁情况。

四、实验二:数码管显示通过控制51单片机的I/O口状态,驱动数码管显示数字。

1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将数码管的A、B、C、D、E、F、G引脚分别连接到P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6引脚。

2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>unsigned char code segment[] = { // 数码管段码表0x3F, // 数字00x06, // 数字10x5B, // 数字20x4F, // 数字30x66, // 数字40x6D, // 数字50x7D, // 数字60x07, // 数字70x7F, // 数字80x6F // 数字9};void main() {unsigned int i;while(1) {for(i = 0; i < 10; i++) {P1 = segment[i]; // 依次在数码管上显示数字0-9 Delay(1000); // 延时1秒}}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。

51单片机实训报告

51单片机实训报告

51单片机实训报告一、引言51单片机是一种常用的微控制器,具有体积小、功耗低、功能强大等优点,广泛应用于各种电子设备中。

本文将介绍本次实训的目标、实验步骤、实验结果以及实训中遇到的问题及解决方案。

二、实训目标本次实训的目标是通过51单片机的学习和实践,掌握单片机的基本原理和编程技巧。

具体来说,我们需要实现以下几个功能:1. 熟悉51单片机的硬件组成和工作原理;2. 学习使用Keil C编译器进行单片机程序的编写和调试;3. 掌握基本的输入输出控制方法,如LED灯的控制、数码管的显示等;4. 学习使用定时器、中断等功能模块,实现一些实际应用,如蜂鸣器的发声、电机的控制等。

三、实验步骤1. 硬件准备:将51单片机与外围电路进行连接,如连接LED灯、数码管、蜂鸣器等;2. 编写程序:使用Keil C编译器编写相应的程序,包括引入头文件、定义宏、声明变量、编写主函数等;3. 调试程序:将程序下载到51单片机中,通过单片机的调试功能进行程序的调试,排除可能存在的错误;4. 运行程序:将调试好的程序运行在51单片机上,观察实验结果是否符合预期。

四、实验结果在本次实训中,我们顺利完成了以下几个实验:1. LED灯闪烁:通过控制51单片机的输出口,使LED灯以一定频率进行闪烁;2. 数码管显示:通过控制51单片机的输出口,使数码管显示指定的数字或字符;3. 蜂鸣器发声:通过控制51单片机的输出口,产生一定频率的方波信号,使蜂鸣器发出相应的声音;4. 电机控制:通过控制51单片机的输出口,控制电机的转动方向和速度。

五、实训中遇到的问题及解决方案在实训过程中,我们遇到了一些问题,但通过团队的共同努力和老师的指导,最终都得到了解决。

下面列举了其中的几个问题及解决方案:1. 问题:LED灯无法闪烁;解决方案:检查LED灯的连接是否正确,确认是否存在接触不良或短路等问题。

2. 问题:数码管无法正常显示;解决方案:检查数码管的连接是否正确,确认是否存在引脚连接错误或接触不良等问题。

单片机实验体会心得体会7篇

单片机实验体会心得体会7篇

单片机实验体会心得体会7篇单片机实验体会心得体会篇1时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。

在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。

这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。

将所学知识运用到实践中,在实践中发现问题,强化理论知识。

现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。

第一次是借点亮led灯来熟悉keil软件的使用和试验箱上器材。

第一次实验体现了一个人对新事物的接受能力和敏感度。

虽然之前做过许多种实验。

但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。

所以第一次试验相对失败。

鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。

在做实验中,第二个问题应该是准备不充分吧。

一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。

后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。

于是我便在上机之前把程序编好,拷到u盘,这样上机时只需调试,解决出现的问题。

这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。

发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。

三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。

于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。

但是编程是一件很严肃的事情,容不得半点错误。

于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。

这也能激发了学习的兴趣。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cortex-M4原理与实践实验报告实验一 GPIO 接口实验一.实验目的1. 掌握 Code Composer Studio 6.0(以下简称 CCS)的安装和配置步骤过程。

2. 了解 Cortex-M4 开发系统和计算机与目标系统的连接方法。

3. 了解 CCS 软件的操作环境和基本功能,了解 TM4C1294 软件开发过程。

1) 学习创建工程和管理工程的方法;2) 了解基本的编译和调试功能;3) 学会设置断点,注入和提取数据文件;4) 学习使用观察窗口;5) 了解图形功能的使用方法。

二.实验程序流程图本实验通过多种方法来控制 GPIO 端口的读写,通过 GPIO 端口的读写来控制主板上两个独立的 LED 灯,D1、D2 的点亮和熄灭。

主板上 D1、D2 、D3 对应的 GPIO 口分别为 PF1、 PF2、PF3。

三.实验代码、注释及现象#include <stdint.h>#include <stdbool.h>#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "driverlib/pin_map.h"#include "driverlib/sysctl.h"#include "driverlib/gpio.h"int main(void){SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //使能 GPIOF 口GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT); //设置为输出模式GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD);//进一步设置为 8mA、带转换速率控制的推挽输出GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1, 0xff);//PF1 输出高电平while(1){}; //LED_D1 on 简单LE}现象:LED1 被点亮四.思考题1.代码#include <stdint.h>#include <stdbool.h>#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "driverlib/pin_map.h"#include "driverlib/sysctl.h"#include "driverlib/gpio.h"int main(void){SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |SYSCTL_OSC_MAIN |SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480), 10000000); //设置系统时间为10MHZSysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能 GPIOF 口GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_DIR_MODE_OUT); //设置为输出模式GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_STRENGTH_8MA_SC,GPIO _PIN_TYPE_STD); //进一步设置为 8mA、带转换速率控制的推挽输出while(1){GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0xff); //PF1输出高,点亮LED0SysCtlDelay(100*(10000000/3000)); //延时n*1ms 100msGPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0); //PF1输出低,关闭LED0GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0xff); //PF2输出高,点亮LED2SysCtlDelay(100*(10000000/3000)); //延时n*1msGPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0); //PF2输出低,点亮LED2GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0xff);//PF2输出高,点亮LED2SysCtlDelay(100*(10000000/3000)); //延时n*1msGPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0);//PF2输出低,点亮LED2};}2.实验现象:主板上LED0,LED1,LED2按照间隔时间顺序依次点亮实验原理解读:主要利用延迟函数,按顺序点亮和关断LED1,LED2,LED3。

五.实验中遇到的问题及其解决方法首先是没有按默认路径安装,然后配置一直不对,缺少文件,后来把软件卸载之后再重新安装在默认路径,问题就解决了。

实验二矩阵按键操作实验一、实验目的1. 熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法。

2. 熟悉和掌握矩阵式键盘的行列扫描法。

3. 掌握键盘延时消抖的软件方法。

二、实验过程(包括流程图)图2-1 实验程序流程图三、实验代码、注释(最好每条注释)及现象volatile uint32_t ui32Loop; //定义变量volatile uint32_t key; //定义变量void delay(){int ui32Loop0;for(ui32Loop0=0;ui32Loop0<1000;ui32Loop0++) //delay{;}} //通过循环跑空函数延迟int identify_key(){key=0;//***********************a row is setted 0000 0111(PD1 PH3 PH2 PM3) GPIO_PORTD_AHB_DATA_R = 0x00; //PD1 PD0 is setted 0GPIO_PORTH_AHB_DATA_R = 0x0c; //PH2 PH3 is setted 1GPIO_PORTM_DATA_R = 0x08; // PM3 is setted 1for(ui32Loop=0;ui32Loop<1000;ui32Loop++) //delay{;}if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04) {delay();//eliminate buffetingif((GPIO_PORTP_DATA_R&0x04)==0x00) //PP2 is setted 0 ?{key=1;//0keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x08)==0x00)//PN3 is setted 0 ?{delay();if((GPIO_PORTN_DATA_R&0x08)==0x00){key=5;//4keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x04)==0x00){delay();if((GPIO_PORTN_DATA_R&0x04)==0x00){key=9;//8keyreturn 0;}}elseif((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){delay();if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){key=13;//12keyreturn 0;}}//***********************a row is setted 0000 1011(PD1 PH3 PH2 PM3) GPIO_PORTD_AHB_DATA_R = 0x02;GPIO_PORTH_AHB_DATA_R = 0x04;GPIO_PORTM_DATA_R = 0x08;for(ui32Loop=0;ui32Loop<1000;ui32Loop++){;}if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04){delay();if((GPIO_PORTP_DATA_R&0x04)==0x00){key=2;//1keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x08)==0x00){delay();if((GPIO_PORTN_DATA_R&0x08)==0x00){key=6;//5keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x04)==0x00){delay();if((GPIO_PORTN_DATA_R&0x04)==0x00){key=10;//9keyreturn 0;}}elseif((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){delay();if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){key=14;//13keyreturn 0;}}//***********************a row is setted 0000 1101(PD1 PH3 PH2 PM3) GPIO_PORTD_AHB_DATA_R = 0x02;GPIO_PORTH_AHB_DATA_R = 0x08;GPIO_PORTM_DATA_R = 0x08;for(ui32Loop=0;ui32Loop<1000;ui32Loop++){;}if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04){delay();if((GPIO_PORTP_DATA_R&0x04)==0x00){key=3; //2keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x08)==0x00){delay();if((GPIO_PORTN_DATA_R&0x08)==0x00){key=7; //6keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x04)==0x00){delay();if((GPIO_PORTN_DATA_R&0x04)==0x00){key=11; //10keyreturn 0;}}elseif((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){delay();if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){key=15; //14keyreturn 0;}}//***********************a row is setted 0000 1110(PD1 PH3 PH2 PM3) GPIO_PORTD_AHB_DATA_R = 0x02;GPIO_PORTH_AHB_DATA_R = 0x0c;GPIO_PORTM_DATA_R = 0x00;for(ui32Loop=0;ui32Loop<1000;ui32Loop++){;}if((GPIO_PORTP_DATA_R&0x04)==0x00)//&&(GPIO_PORTP_DATA_R==0x04){delay();if((GPIO_PORTP_DATA_R&0x04)==0x00){key=4; //3keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x08)==0x00){delay();if((GPIO_PORTN_DATA_R&0x08)==0x00){key=8; //7keyreturn 0;}}elseif((GPIO_PORTN_DATA_R&0x04)==0x00){delay();if((GPIO_PORTN_DATA_R&0x04)==0x00){key=12; //11keyreturn 0;}}elseif((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){delay();if((GPIO_PORTD_AHB_DATA_R&0x01)==0x00){key=16; //15keyreturn 0;}}return 1;}intmain(void){SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能 GPIOF 口GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,GPIO_DIR_MODE_OUT); ////设置为输出模式GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_S TD); /////进一步设置为 8mA、带转换速率控制的推挽输出SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |SYSCTL_OSC_MAIN |SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480), 10000000); //设置系统时间为10MHZ// Enable the GPIO port that is used for the on-board LED.SYSCTL_RCGCGPIO_R |= (SYSCTL_RCGCGPIO_R13 | SYSCTL_RCGCGPIO_R12 | SYSCTL_RCGCGPIO_R11|SYSCTL_RCGCGPIO_R10| SYSCTL_RCGCGPIO_R7 |SYSCTL_RCGCGPIO_R3 );///////// Enable the GPIO pin for the LED PN0,PN1,PN2,PN3,PP2,PF0,PF4. Set the direction as output.// Enable the GPIO pin for the LED PM3,PH2,PH3. Set the direction as input.and// enable the GPIO pin for digital function.GPIO_PORTN_DIR_R = 0x03;GPIO_PORTM_DIR_R = 0x28;GPIO_PORTH_AHB_DIR_R = 0x0c;GPIO_PORTP_DIR_R = 0x00;GPIO_PORTD_AHB_DIR_R = 0x02;//GPIO_PORTF_AHB_DIR_R = 0x11;GPIO_PORTL_DIR_R = 0x0f;GPIO_PORTN_DEN_R = 0x0f;GPIO_PORTM_DEN_R = 0x28;GPIO_PORTH_AHB_DEN_R = 0x0c;GPIO_PORTP_DEN_R = 0x04;GPIO_PORTD_AHB_DEN_R = 0x03;GPIO_PORTL_DEN_R = 0x0f;//GPIO_PORTF_AHB_DEN_R = 0x11;//ROW1_IN->PM3 ,ROW2_IN-> PH2 ,ROW3_IN-> PH3, ///COL1_IN ->PN2, COL2_IN ->PN3,COL3_IN-> PP2//set the column low lever and read the rowwhile(1){int a;identify_key();a=key;switch(a) //根据选中的按键点亮对应的灯{case 1 : GPIO_PORTL_DATA_R = 0x01;GPIO_PORTM_DATA_R|=0x20; //拉响蜂鸣器 break;case 2 : GPIO_PORTL_DATA_R = 0x02;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 3 : GPIO_PORTL_DATA_R = 0x03; GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 4 : GPIO_PORTL_DATA_R = 0x04;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 5 : GPIO_PORTL_DATA_R = 0x05;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 6 : GPIO_PORTL_DATA_R = 0x06;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break; case 7: GPIO_PORTL_DATA_R = 0x07;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 8 : GPIO_PORTL_DATA_R = 0x08;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 9 : GPIO_PORTL_DATA_R = 0x09;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 10 : GPIO_PORTL_DATA_R = 0x0a;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 11 : GPIO_PORTL_DATA_R = 0x0b;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 12 : GPIO_PORTL_DATA_R = 0x0c; GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 13 : GPIO_PORTL_DATA_R = 0x0d;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 14 : GPIO_PORTL_DATA_R = 0x0e;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 15 : GPIO_PORTL_DATA_R = 0x0f;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;case 16 : GPIO_PORTL_DATA_R = 0x00;GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_5,0xff); break;default: GPIO_PORTN_DATA_R = 0x00;GPIO_PORTM_DATA_R&=0xdf;}}}实验结果:按下键盘对应的二进制灯点亮,并且蜂鸣器也会响。

相关文档
最新文档