嵌入式键盘控制实验
嵌入式系统-流水灯、按键、定时器实验报告

嵌入式系统应用实验报告姓名:学号:学院:专业:班级:指导教师:实验1、流水灯实验编程控制实验板上LED灯轮流点亮、熄灭,中间间隔一定时间。
实验主要考察对STM32F10X系列单片机GPIO的输出操作。
参阅数据手册可知,通过软件编程,GPIO可以配置成以下几种模式:◇输入浮空◇输入上拉◇输入下拉◇模拟输入◇开漏输出◇推挽式输出◇推挽式复用功能◇开漏式复用功能根据实验要求,应该首先将GPIO配置为推挽输出模式。
由原理图可知,单片机GPIO输出信号经过74HC244缓冲器,连接LED灯。
由于74HC244的OE1和OE2都接地,为相同电平,故A端电平与Y端电平相同且LED灯共阳,所以,如果要点亮LED,GPIO应输出低电平。
反之,LED灯熄灭。
软件方面,在程序启动时,调用SystemInit()函数〔见附录1〕,对系统时钟等关键部分进行初始化,然后再对GPIO进行配置。
GPIO配置函数为SZ_STM32_LEDInit()〔见附录2〕,函数中首先使能GPIO 时钟:RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);然后配置GPIO输入输出模式:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;再配置GPIO端口翻转速度:GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;最后将配置好的参数写入寄存器,初始化完成:GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure)。
初始化完成后,程序循环点亮一个LED并熄灭其他LED,中间通过Delay()函数进行延时,到达流水灯的效果〔程序完整代码见附录3〕。
实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:实验二、按键实验利用STM32读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯亮起。
北邮键盘驱动实验报告

一、实验目的1. 理解键盘驱动程序的基本原理和设计流程。
2. 掌握键盘扫描矩阵的原理和实现方法。
3. 学习使用C语言进行键盘扫描驱动程序的开发。
4. 提高嵌入式系统开发能力和实际动手能力。
二、实验环境1. 开发平台:北邮嵌入式实验室提供的STM32开发板。
2. 编译工具:Keil uVision 5。
3. 实验软件:嵌入式Linux操作系统。
三、实验原理键盘扫描矩阵是一种常用的键盘输入方式,它通过行和列的交叉来检测按键的状态。
当按键被按下时,行和列的交叉点会形成一个特定的逻辑地址,该地址对应于键盘上的一个按键。
在嵌入式系统中,键盘驱动程序负责扫描键盘矩阵,识别按键状态,并将按键信息传递给上层应用程序。
本实验中,我们将使用C语言开发键盘驱动程序,实现以下功能:1. 初始化键盘硬件资源。
2. 扫描键盘矩阵,识别按键状态。
3. 将按键信息转换为ASCII码或其他编码格式。
4. 通过中断或轮询方式将按键信息传递给上层应用程序。
四、实验步骤1. 硬件连接将STM32开发板与键盘模块连接,确保键盘模块的行和列引脚正确连接到开发板的GPIO引脚。
2. 编写键盘驱动程序(1)初始化键盘硬件资源在驱动程序中,首先需要初始化键盘硬件资源,包括设置GPIO引脚的模式、上拉/下拉电阻等。
```cvoid keyboard_init(void) {// 设置GPIO引脚模式为输出GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 设置GPIO引脚模式为输入__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);}```(2)扫描键盘矩阵在驱动程序中,编写一个函数用于扫描键盘矩阵,识别按键状态。
嵌入式实验三 键盘检测控制实验

2
ቤተ መጻሕፍቲ ባይዱ
嵌入式技术及应用 实验三
实验三 键盘实验
一、 实验目的 掌握单片机系统中矩阵键盘的编程控制方法,学会实时程序的调试技巧。
二、 实验原理 键盘是单片机应用中常用的输入设备,在应用系统中,操作人员可通过键盘
向系统输入指令、地址和数据,实现简单的人机通信。 键盘实际上是一组按键开关的集合,平时总是处于断开状态,当按下键时它
才闭合。按键在闭合和断开时,触点会存在抖动现象,抖动时间一般为 5-10ms, 如下图示:
键盘的处理主要涉及以下 3 个方面的内容: 按键的识别
所接 I/O 口线是高还是低电平(根据连接情况) 抖动的消除
硬件消抖 软件消抖(延时) 判断键值 独立式键盘 矩阵式键盘 实验板电路原理图如下:
1
嵌入式技术及应用 实验三
三、 实验内容 按下 16 个矩阵键盘依次在数码管上显示 1-16 的平方。如按下第一个显示 1,
第二个显示 4...
四、
实验步骤 1、 按实验内容要求在 µ Vision 中创建项目,编辑、调试、编译程序。 2、 将编译生成的目标码文件(后缀为.Hex)下载到实验板上。 3、 观察实验运行结果并记录。
嵌入式ARM键盘控制LED灯实验报告

实验六键盘控制LED灯实验1实验目的(1) 通过实验掌握中断式键盘控制与设计方法;(2) 熟练编写S3C2410中断服务程序。
2 实验设备(1) S3C2410嵌入式开发板,JTAG仿真器。
(2) 软件:PC机操作系统Windows XP,ADS1.2集成开发环境,仿真器驱动程序,超级终端通讯程序。
3 实验内容编写中断处理程序,处理一个键盘中断,并在串口打印中断及按键显示信息。
4 实验步骤(1) 参照模板工程,新建一个工程keypad,添加相应的文件,并修改keypad 的工程设置;(2) 创建keypad.c并加入到工程keypad中;(3) 编写键盘中断程序;参考代码如下:①串口初始化程序void uart_init()/* UART串口初始化*/{GPHCON |= 0xa0; //GPH2,GPH3 used as TXD0,RXD0GPHUP = 0x0; //GPH2,GPH3内部上拉ULCON0 = 0x03; //8N1UCON0 = 0x05; //查询方式为轮询或中断;时钟选择为PCLKUFCON0 = 0x00; //不使用FIFOUMCON0 = 0x00; //不使用流控UBRDIV0 = 26; //波特率为57600,PCLK=12Mhz}②发送数据while( ! (UTRSTAT0 & TXD0READY) );UTXH0 = c;③接收数据while( ! (UTRSTAT0 & RXD0READY) );return URXH0;④打印数据int i = 0;while( str[i] ){putc( (unsigned char) str[i++] );}return i;⑤按键初始化int key_init()/* 按键初始化*/{GPFCON = 0x55aa;GPFUP = 0xff;printk("按键初始化OK\r\n");return 0;}⑥中断初始化void irq_init()/* 中断初始化*/{INTMSK &= ~(3<<2);printk("中断初始化OK\r\n");}(5) 编译keypad;(6) 运行超级终端,选择正确的串口号,并将串口设置位:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位数(1),无流控,打开串口;(7) 运行程序,在超级终端中输入的数据将回显到超级终端上,结果如图5.4所示:图6.1 初始化运行结果图6.2 main运行结果5 实验总结通过这次实验我巩固了上次实验的串口的使用方法,串口初始化、发送数据和接收数据,同时也熟悉了中断的处理过程,即保护现场、中断处理、恢复现场并返回。
嵌入式键盘及LED驱动实验

《嵌入式系统设计》实验报告(2011-2012学年第2学期)实验三键盘及LED驱动实验—C语言实现方法一、实验目的1.学习键盘及LED驱动原理。
2.掌握ZLG7289芯片的使用方法。
二、实验内容通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。
三、预备知识1.掌握在ARM SDT 2.5或ADS1.2集成开发环境中编写和调试程序的基本过程。
2.了解ARM应用程序的框架结构。
3.了解µC/OS-II多任务的原理。
四、实验设备及工具硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上。
软件:PC机操作系统win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序五、实验原理ZLG7289A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示﹑键盘接口的全部功能。
ZLG7289A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。
此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻址等。
ZLG7289A具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。
其特点如下:a.串行接口无需外围元件可直接驱动LED。
b.各位独立控制译码/不译码及消隐和闪烁属性。
c.(循环)左移/(循环)右移指令。
d.具有段寻址指令方便控制独立LED。
e.键盘控制器内含去抖动电路。
表2-5 引脚说明引脚名称说明1 ,2 VDD 正电源3 ,5 NC 悬空4 VSS 接地6 /CS 片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据7 CLK 同步时钟输入端,向芯片发送数据及读取键盘数据时,此引脚电平上升沿表示数据有效8 DATA 串行数据输入/输出端,当芯片接收指令时此引脚为输入端,当读取键盘数据时此引脚在读指令最后一个时钟的下降沿变为输出端9 /KEY 按键有效输出端,平时为高电平,当检测到有效按键时,引脚变为低电平10-16 SG-SA 段g—段a 驱动输出17 DP 小数点驱动输出18-25 DIG0-DIG7 数字0—数字7驱动输出26 OSC2 振荡器输出端27 OSC1 振荡器输入端28 /RESET 复位端ZLG7289A的控制指令分为二大类——纯指令和带有数据的指令:1.纯指令(1)复位(清除)指令,如表2-6所示:表2-6 复位指令格式D7 D6 D5 D4 D3 D2 D1 D01 0 1 0 0 1 0 0当ZLG7289A收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。
嵌入式ARM键盘接口和七段数码管的控制实验

实验三键盘接口和七段数码管的控制实验一、实验目的1. 学习4X4键盘的与CPU的接口原理2. 掌握键盘芯片HD7279的使用,及8位数码管的显示方法;二、实验内容1. 通过4X4按键完成在数码管上的各种显示功能,以及LCD上显示。
三、实验设备1.EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四、实验原理键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。
它的信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。
由于其芯片的接口电压是5V的,而S3C2410的接口电压是3.3V,所以,HD7279A的信号、控制线经过CPLD 把电压转换到3.3V,然后送入CPU中。
HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。
该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。
内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。
此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。
HD7279在与S3C2410接口中,它使用了4根接口线。
片选信号#CS(低电平有效),时钟信号CLK,数据收发信号DATA,中断信号#KEY(低电平送出),EL-ARM-830+实验箱与其的接口中,使用了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连接,S3C2410的外部中断接HD7279的中断#KEY,三个I/O口分别与HD7279A的其他控制、数据信号线相连。
HD7279的其他管脚分别接4X4按键和8位数码管。
当程序运行时,按下按键,平时为高电平的HD7279A的#KEY就会产生一个低电平,送给S3C2410的外部中断5请求脚,在CPU中断请求位打开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态寄存器,判断是否是外部中断5的中断请求,当判断出是外部中断5的中断请求,则程序继续执行,CPU 这时,通过发送#CS片选信号选中HD7279A,再发送时钟CLK信号和通过DATA线发送控制指令信号给HD7279A,HD7279A得到CPU发送的命令后,识别出该命令,然后,扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU在得到按键后,有时,程序还会给此键值一定的意义,然后再通过识别此按键的意义,进而进行相应的程序处理。
实验9 嵌入式按键程序测试

#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
#include <errno.h>
int main(void)
{
int buttons_fd;
char buttons[8] = {'0', '0', '0', '0', '0', '0', '0', '0'};
count_of_changed_key++;
}
}
if (count_of_changed_key) {
printf("\n");
}
}
close(buttons_fd);
return 0;
}
4.保存文件,编译源代码:
arm-linux-gcc buttons_test.c -obuttons_test
int i;
if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons)
{
perror("read buttons:");
exit(1);
}
for (i = 0, count_of_changed_key = 0; i < sizeof buttons / sizeof buttons[0]; i++) {
成都理工嵌入式实验报告

int data[10];
fd =open(DEVICE_NAME ,O_RDWR);
if(fd==-1)
{
printf("err");
}
else{
buf[0]=0x22;
while(1)
{
read(fd,buf,1);
if(buf[0]!=pre_scancode)
{
if(buf[0]!=0xff)
{
printf("key=%x\n",buf[0]);
fd2 = open(DEVICE_NAME2, O_RDWR);
printf("fd = %d\n", fd2);
if(fd2 == -1)
{
}
else
{
data[0]=0x00;
write(fd2,data, 1);
printf("close keypad_driver test\n");
}
}
实验三 网络数据传输实验
1.实验题目及要求
1.1实验题及目的
实验题目:嵌入式linux网络编程
实验目的:
熟悉linux的TCP/IP操作函数;
掌握linux的编程方法;
1.2 实验要求
要求:实现上位机(PC,ubuntu)串口2与实验板(ARM,嵌入式linux)的TCP数据通信。该程序包括服务器端程序(sever)和客户端程序(client)。Ubuntu上运行服务器端程序(sever),ARM实验板上运行客户端程序(client)。传输模拟转数字信号并存入文件。
perror("accept");
嵌入式设计实验报告

一、实验目的1. 熟悉嵌入式系统开发的基本流程和常用工具;2. 掌握嵌入式系统硬件资源的使用方法;3. 熟悉嵌入式系统软件开发的基本方法;4. 提高嵌入式系统设计能力。
二、实验内容1. 硬件平台:基于STM32F103系列单片机的开发板;2. 软件平台:Keil uVision5集成开发环境;3. 实验任务:设计一个简单的嵌入式系统,实现按键输入和LED灯控制功能。
三、实验原理1. 硬件原理:STM32F103系列单片机是一款高性能、低功耗的ARM Cortex-M3内核微控制器,具有丰富的片上外设资源,如GPIO、定时器、ADC等。
在本实验中,主要使用GPIO进行按键输入和LED灯控制。
2. 软件原理:嵌入式系统软件开发主要包括底层驱动程序、中间件和应用层。
底层驱动程序负责硬件资源的管理和配置;中间件提供系统服务,如通信、定时器等;应用层实现用户功能。
在本实验中,主要使用C语言编写程序,实现按键输入和LED灯控制功能。
四、实验步骤1. 硬件连接:将开发板上的按键和LED灯分别连接到单片机的GPIO端口;2. 软件编写:(1)创建项目:在Keil uVision5中创建一个新的项目,选择STM32F103系列单片机作为目标设备;(2)添加源文件:添加一个C语言源文件,用于编写主程序;(3)配置GPIO:在源文件中编写GPIO初始化代码,配置按键和LED灯的GPIO端口为输入和输出模式;(4)编写按键输入程序:编写按键扫描函数,用于检测按键状态,并根据按键状态控制LED灯;(5)编译程序:编译项目,生成目标文件;(6)下载程序:将编译好的程序下载到开发板;3. 实验验证:在开发板上运行程序,观察按键输入和LED灯控制功能是否正常。
五、实验结果与分析1. 实验结果:按键按下时,LED灯点亮;按键松开时,LED灯熄灭;2. 实验分析:通过编写程序,实现了按键输入和LED灯控制功能,验证了嵌入式系统开发的基本流程和常用工具。
实验的三4x4键盘控制实验的

实验报告课程名称嵌入式系统实验名称4x4键盘控制实验姓名王闯学号200907040318 专业班级软件0903实验日期年月日成绩指导教师王彩玲一、实验目的1 、通过实验掌握中断式键盘控制与设计方法;2 、掌握中断式键盘检测程序的设计思路;3 、熟练编写ARM 核处理器S3C44B0X 中断程序;二、实验设备1 、硬件:EMBEST S3CEV40 实验平台,Embest ARM 标准/ 增强型仿真器套件,PC 机;2 、软件:Embest IDE 2003 集成开发环境,Windows 98/2000/NT/XP 操作系统。
三、实验内容使用实验板上4 ×4 用户键盘,编写程序通过中断的方式读入键值,并在实验板的LE D数码管上显示读到的键值。
四、实验原理键盘接口电路如图所示,板上扩展了一个4×4行列式矩阵键盘接口。
该键盘是采用中断扫描的方式进行工作,行线选用了4个数据线,列线选用了4个地址线。
行线接上拉电阻保持高电平,并通过与门74HC08将输出信号与MCU 的中断EXINT1连接;列线接下拉电阻保持低电平。
当有键盘按下时,该行线被拉为低电平,使得EXINT1输入也为低电平,MCU 产生中断。
中断产生后通过对键盘的行和列进行扫描的方法可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。
芯片74HC541是通过片选信号nGCS3来选通的,这样可以保证在键盘不使用的情况下MCU 读不到行线的输入信息。
123456784*4KEYBOARDCON7VDD33121311U13D 74HC089108714U13C74HC08456U13B 74HC08VDD33L0L1L2L3EXINT1R354.7K R364.7K R374.7K R384.7KD71N4148D81N4148D91N4148D101N4148G11A12A23A34Y217Y118G219VCC 20A45A56A67A78Y613Y514Y415Y316A89GND 10Y811Y712U10074HC541VDD33D0D1D2D3A1A2A3A4L0L1L2L3NGCS3GNDGND 1A11Y 22A32Y 45A116Y 126A13VCC 143A53Y 6GND74Y 84A95Y 10U10174HC17R20010K R20110K R20210K R20310K R20410KR20510K GND GND VDD33GNDGND五、实验操作步骤(1 )准备实验环境。
键盘实验电子132黎杰华1319200055

rINTMSK=~(BIT_EINT1);
return(TRUE);
}
int putcToKBCTL(U8 c)
{
U32 i;
KEYPADCSEN;
KEYPADDIRMO;
Dey60us();
while((rSPSTA1 & ONEBIT)==0);
6、b.中断处理,中断处理程序在检查到相应的中断源后,调用对应的中断处理程序完成。
7、c.恢复现场并返回(由一系列的出栈指令完成)。是与保护现场对应的,但要注意数据恢复的次序,以免混乱。
由于中断服务子程序需要打断主程序的执行,因此其处理应该及时完成,较长时间的延时将导致系统性能严重下降。
8、扫描法:对键盘上的某一行送低电平,其它行为高电平,然后读取列值。若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则扫描下一行。
表81按键和扫描的行列线间的对应关系
11、工作原理
ZLG7289可用行线R0~C7构成矩阵键盘。同时在芯片内部可自动完成扫描、译码、去抖动处理等任务。当ZLG7289检测到有效的按键时,按键有效指示“KEY”引脚将从低电平变为高电平,并一直保持到按键代码被读取为止。在“KEY”为高电平期间,如果ZLG7289接收到“读键盘数据”命令,(即“CS”管脚变低),则输出当前按键的键盘代码,ZLG7289键盘代码的范围为00H-0FH。如果在接收到“读键盘数据”时没有按键按下,ZLG7289将输出0xFFH。在一次读键盘过程完成后,按键有效指示“KEY”将变为低电平。利用按键有效指示“KEY”与单片机的外部中断端相连,可完成具有中断的键盘监控功能,从而提高CPU的工作效率,减少按键响应时间。
湖南工程学院嵌入式实验报告键盘的应用

实验报告课程名称嵌入式系统实验名称键盘的应用专业计算机技术与科学班级学号姓名指导教师胡瑛年月日实验二键盘的应用实验名称键盘的应用评分实验日期年月日指导教师胡瑛姓名专业班级学号一、实验目的掌握键盘的工作原理及应用二实验内容按下KEY0键,LED0灯闪烁一次,按下WK_UP键,LED1灯闪烁一次。
原理图如图1、2所示:图1 LED灯电路原理图图2 键盘的电路原理图Led.h:void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使PE端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //LED0-->PB.5端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHZ GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_6); //PE.6输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //推挽输出GPIO_Init(GPIOE, &GPIO_InitStructure);GPIO_SetBits(GPIOE,GPIO_Pin_5);}Led.c:void KEY_Init(void) //初始化{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENAB LE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //KEY0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化,下拉输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入默认下拉GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.0}main.c:int main(void){vu8 key=0;delay_init(); //延时函数初始化LED_Init(); //LED端口初始化KEY_Init(); //初始化与按键连接的硬件端口while(1){key=KEY_Scan(0); //得到键值if(key){switch(key){case WKUP_PRES: //控制LED0闪烁LED0=!LED0delay_ms(300);LED0=!LED0;break;case WKUP_PRES: //控制LED1闪烁LED1=!LED1delay_ms(300);LED1=!LED1;break;}}else delay_ms(10);}}三实验结果实现按键闪烁,按下KEY0键,LED0灯闪烁一次,按下WK_UP键,LED1灯闪烁一次.四.实验体会成功编写了按键闪烁程序,明白了实验的原理,更加深入的理解了嵌入式。
嵌入式软件开发基础实验报告 4×4键盘控制

上海电力学院嵌入式软件开发基础实验报告题目:【ARM】 4x4 键盘控制实验专业:电子科学与技术年级:姓名:学号:一、实验目的通过实验掌握键盘控制与设计方法。
熟练编写ARM 核处理器S3C44B0X 中断处理程序。
二、实验设备硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。
软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP三、实验内容使用实验板上5x4 用户键盘,编写程序接收键盘中断。
通过IIC 总线读入键值,并同将读到的键值发送到串口。
四、实验原理用户设计行列键盘接口,一般常采用三种方法读取键值。
一种是中断式,另两种是扫描法和反转法。
中断式在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。
本实验采用中断式实现用户键盘接口。
扫描法对键盘上的某一行送低电平,其他为高电平,然后读取列值,若列值中有一位是低,表明该行与低电平对应列的键被按下。
否则扫描下一行。
反转法先将所有行扫描线输出低电平,读列值,若列值有一位是低,表明有键按下;接着所有列扫描线输出低电平,再读行值。
根据读到的值组合就可以查表得到键码。
五、实验设计1. 键盘硬件电路设计(1) 键盘控制电路(2) 工作过程键盘动作由芯片ZLG7290 检测,当键盘按下时,芯片检测到后在INT 引脚产生中断触发电平通知处理器,处理器通过IIC 总线读取芯片中保存的键值。
六、实验操作步骤1. 准备实验环境使用Embest 仿真器连接目标板,使用Embest EduKit-III 实验板附带的串口线,连接实验板上的UART0 和PC 机的串口。
2. 串口接收设置在PC 机上运行windows 自带的超级终端串口通信程序(波特率115200、1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
嵌入式实验报告讲解

嵌⼊式实验报告讲解⽬录实验⼀跑马灯实验 (1)实验⼆按键输⼊实验 (3)实验三串⼝实验 (5)实验四外部中断实验 (8)实验五独⽴看门狗实验 (11)实验七定时器中断实验 (13)实验⼗三 ADC实验 (15)实验⼗五 DMA实验 (17)实验⼗六 I2C实验 (21)实验⼗七 SPI实验 (24)实验⼆⼗⼀红外遥控实验 (27)实验⼆⼗⼆ DS18B20实验 (30)实验⼀跑马灯实验⼀.实验简介我的第⼀个实验,跑马灯实验。
⼆.实验⽬的掌握STM32开发环境,掌握从⽆到有的构建⼯程。
三.实验内容熟悉MDK KEIL开发环境,构建基于固件库的⼯程,编写代码实现跑马灯⼯程。
通过ISP 下载代码到实验板,查看运⾏结果。
使⽤JLINK下载代码到⽬标板,查看运⾏结果,使⽤JLINK在线调试。
四.实验设备硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1.熟悉MDK KEIL开发环境2.熟悉串⼝编程软件ISP3.查看固件库结构和⽂件4.建⽴⼯程⽬录,复制库⽂件5.建⽴和配置⼯程6.编写代码7.编译代码8.使⽤ISP下载到实验板9.测试运⾏结果10.使⽤JLINK下载到实验板11.单步调试12.记录实验过程,撰写实验报告六.实验结果及测试源代码:两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁⼀次。
七.实验总结通过本次次实验我了解了STM32开发板的基本使⽤,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使⽤MDK KEIL软件,⽤这个软件来编程和完成⼀些功能的实现。
作为STM32 的⼊门第⼀个例⼦,详细介绍了STM32 的IO⼝操作,同时巩固了前⾯的学习,并进⼀步介绍了MDK的软件仿真功能。
实验⼆按键输⼊实验⼀.实验简介在实验⼀的基础上,使⽤按键控制流⽔灯速度,及使⽤按键控制流⽔灯流⽔⽅向。
嵌入式实验3按键实验(中断方式)

嵌入式实验3按键实验(中断方式)河南机电高等专科学校《嵌入式系统开发》课程实验报告系部:电子通信工程系班级:电信1##姓名: ######学号: 120######实验三按键实验(中断方式)一.实验简介在实验一的基础上,使用按键控制流水灯。
二.实验目的熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
三.实验内容实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
下载代码到目标板,查看运行结果。
四.实验设备硬件部分:PC计算机(宿主机)、STM32实验板。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1在实验一代码的基础上,编写中断初始化代码2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序3编写中断服务程序4编译代码,下载到实验板5.单步调试6记录实验过程,撰写实验报告六.实验结果及测试中断方式的按键式实验,是通过配置外部中断寄存器和中断嵌套(NVIC)控制器来实现按键按下控制LED灯亮灭。
通过按键中断打断主函数,执行LED1取反一次。
主函数初始化中断配置和LED配置,点亮LED1后一直等待中断,每中断一次,LED1取反一次。
int main(void){LED_GPIO_Config();LED1_ON;CLI();SEI();EXTI_PA0_Config();while(1){}}中断嵌套控制寄存器的配置为中断嵌套分组1;抢占优先级0;响应优先级0 代码如下:void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}外部中断按键的配置源码如下:配置PA0位中断线,并使能AFIO 时钟void EXTI_PA0_Config(void){GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);NVIC_Configuration();GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}产生中断后程序进入中断服务子程序,将LED1取反,并软件清除标志位,中断服务子程序如下:void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0) != RESET){LED1_TOGGLE;EXTI_ClearITPendingBit(EXTI_Line0);}}七.实验总结通过这次实验,课程知识的实用性很强,因此实验就显得非常重要,刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。
嵌入式实验三人机交互接口-键盘操作实验

实验报告课程名称嵌入式系统设计实验仪器清华同方辰源嵌入式系统实验箱实验名称实验三:人机交互接口-键盘操作实验系别计算机学院专业计算机科学与技术班级/学号学生姓名实验日期成绩指导教师实验三:人机交互接口-键盘操作实验一、实验问题回答(1)键盘的工作原理是什么?答:键盘分独立式键盘与矩阵式键盘。
独立式键盘:在由单片机组成的测控系统及智能化仪器中,用的最多的是独立式键盘。
这种键盘具有硬件与软件相对简单的特点,其缺点是按键数量较多时,要占用大量口线。
当按键没按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为高电平;当某键被按下后,对应的I/O接口变为低电平。
只要在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。
矩阵式键盘:矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上。
一个3*3的行列结构可以构成一个有9个按键的键盘。
同理,一个4*4的行列可以构成一个16按键的键盘。
很明显,在按键数量较多的场合,与独立式键盘相比,矩阵式键盘要节省很多I/0接口。
键盘按键识别方法分扫描法语线反转法。
扫描法:扫描法有行扫描和列扫描两种,无论采用哪种,无论采用哪种,其效果是一样的,只是在程序中的处理方法有所区别。
下面以列扫描法为例来介绍扫描法识别按键的方法。
首先在键处理程序中将P1.4-P1.7依次按位变低,P1.4-P1.7在某一时刻只有一个为低。
在某一位为低时读行线,根据行线的状态即可判断出哪一个按键被按下。
如2号键按下,当列线P1.5为低时,读回的行线状态中P1.0被拉低,由此可知K2键被按下。
一般在扫描法中分两步处理按键,首先是判断有无键按下,如行线有一个为低,则有键按下。
当判断有键按下时,使列线依次变低,读行线,进而判断出具体哪个键被按下。
线反转法:扫描法是逐行或逐列扫描查询,当被按下的键处于最后一列时,要经过多次扫描才能最后获得此按键所处的行列值。
而线反转法则显的简练,无论被按的键处于哪列,均可经过两步即能获得此按键所在的行列值。
嵌入式系统原理实验五按键实验

实验五按键输入实验实验目的:利用板载的 4 个按键,来控制板载的两个LED 的亮灭和蜂鸣器的开关。
通过本实验,将了解到STM32F1 的IO 口作为输入口的使用方法。
内容要点:1.STM32 IO 口简介STM32F1 的IO 口在上一章已经有了比较详细的介绍,这里我们不再多说。
STM32F1 的IO口做输入使用的时候,是通过调用函数GPIO_ReadInputDataBit()来读取IO 口的状态的。
了解了这点,就可以开始我们的代码编写了。
这一个实验,我们将通过ALIENTEK 战舰STM32 开发板上载有的 4 个按钮(WK_UP、KEY0、KEY1 和KEY2),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中WK_UP 控制蜂鸣器,按一次叫,再按一次停;KEY2 控制DS0,按一次亮,再按一次灭;KEY1 控制DS1,效果同KEY2;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。
有源蜂鸣器自带了震荡电路,一通电就会发声2.硬件设计本实验用到的硬件资源有:1)指示灯 DS0、 DS12) 4 个按键: KEY0、 KEY1、 KEY2、和 WK_UP。
DS0、 DS1 以及蜂鸣器和 STM32 的连接在上两章都已经分别介绍了,在战舰 STM32 开发板上的按键 KEY0 连接在 PE4上、KEY1 连接在 PE3上、KEY2 连接在 PE2上、WK_UP 连接在 PA0上。
如图所示:按键与STM32 连接原理图这里需要注意的是: KEY0、 KEY1 和 KEY2 是低电平有效的,而 WK_UP 是高电平有效的,并且外部都没有上下拉电阻,所以,需要在 STM32 内部设置上下拉。
3.软件设计key.h#ifndef __KEY_H#define __KEY_H#include "sys.h"#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键1#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//读取按键2#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键3(WK_UP)#define KEY0_PRES 1 //KEY0 按下#define KEY1_PRES 2 //KEY1 按下#define KEY2_PRES 3 //KEY2 按下#define WKUP_PRES 4 //WK_UP 按下(即WK_UP/WK_UP)void KEY_Init(void); //IO 初始化u8 KEY_Scan(u8); //按键扫描函数#endif这段代码里面最关键就是 4 个宏定义:#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //读取按键0#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) //读取按键1#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //读取按键2#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) //读取按键3(WK_UP)然后我们打开USER 文件夹Template. uvprojx,按新建按钮新建一个文件,然后保存在HARDWARE->BEEP 文件夹下面,保存为key.c。
键盘实验报告

键盘检测实验报告一、实验目的掌握嵌入式系统的原理,尤其是键盘、串口、显示等器件的接口原理;熟悉小型嵌入式系统的设计方法和程序的编写;掌握软件与硬件的调试技术。
二、实验原理及实验线路具体的嵌入式系统的原理这里不赘述,同时实验使用的也是深圳某公司的基于S3C44B0X的成套教学板,且本次实验是在系统提供的例程的基础上扩展。
三、实验内容结合中断系统的工作原理,编程实现双键同时按下时键盘的检测,并分别将两个键值在8段数码管显示,同时通过UART串口输出。
四、实验步骤1、系统连接将实验板通过JTAG仿真器与PC机相连,同时将实验板的串口与PC机串口连接。
2、程序输入实验板上电后,启动PC机,在Embest-IDE for ARM里面创建、配置好工程,然后编辑该程序,如无错误,可以将目标程序连接、下载到实验板上。
3、程序调试用单步、断点、连续方式调试程序,检查程序运行结果是否正确,排除软件错误,观察输入按键和输出指示灯的状态,直至达到本实验的要求为止。
五、程序框图及部分源代码程序框图如下:系统初始化进入while循环等待中断按顺序循环检测16个按键当检测到有两个键按下后,产生中断在LED上显示检测到的两个键,并通过串口输出由于是在例程基础上拓展,这里只给出修改后的关于键盘检测和显示、串口输出的函数源代码:void KeyboardInt(void){int value;rI_ISPC = BIT_EINT1; // clear pending bitint i;int j=0;int k;int m=10;int a[2]={-1,-1};char temp;for(i=1;i<=4;i++){if(i==1)temp= *(keyboard_base+0xfd);else if(i==2)temp= *(keyboard_base+0xfb);else if(i==3)temp= *(keyboard_base+0xf7);else if(i==4)temp= *(keyboard_base+0xef);if(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK){if( (temp&0x1) == 0 ){a[j] = (4*i-1);j++;if(j==2) break;}else if( (temp&0x2) == 0 ){a[j] = (4*i-2);j++;if(j==2) break;}else if( (temp&0x4) == 0 ){a[j] = (4*i-3);j++;if(j==2) break;}else if( (temp&0x8) == 0 ){a[j] = 4*(i-1);j++;if(j==2) break;}/*while(( temp & KEY_V ALUE_MASK) != KEY_V ALUE_MASK) // release{if(i==1)temp= *(keyboard_base+0xfd);else if(i==2)temp= *(keyboard_base+0xfb);else if(i==3)temp= *(keyboard_base+0xf7);else if(i==4)temp= *(keyboard_base+0xef);}*/}}value=a[0];if(value > -1){Digit_Led_Symbol(value);Uart_Printf("Key is:%x \r",value);}for(k=10000;k>=0;k--){while(m--)}value=a[1];if(value > -1){Digit_Led_Symbol(value);Uart_Printf("Key is:%x \r",value);}}六、实验结果实验不时很成功,没有得到的预期的效果,这个程序还需要进一步改进,当前的结果是按下两个键可以显示之,当按下一个不松,在按下另一个后,可以显示第二个,松开第二个键后重新显示第一个,当然串口可以输出同样的现实内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统
键盘控制实验
日期:报告分:
一、实验目的
1.学习键盘及LED 驱动原理。
2.掌握ZLG7289 芯片的使用方法。
二、实验内容
通过ZLG7289 芯片驱动17 键的键盘和8 个共阴极LED,将按键值在LED 上显示出来。
三、实验步骤
1.新建工程
2.定义ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS (0x20) //GPB5
#define ZLG7289_KEY (0x10) //GPG4
3.编写ZLG7289 驱动函数
图2-2 ZLG7289 复位图2-3 读取键值
4.定义键盘映射表
unsigned char KeyBoard_Map[]=
{4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//64 键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值
5.定义键值读取函数,流程图如图2-4 所示
图2-4 键值读取函数6.编写主函数,将按键值在数码管上显示,流程图如图2-5 所示。
图2-5 主函数
四、实验主要过程截图:
实验结果拍照:
添加LCD320.H
和lcd320.c 文件
五、实验关键代码(有注释,最好有流程图)
#include"uhal.h"
#include"keyboard.h"
#include"zlg7289.h"
#include"44b.h"
#include"LCD320.H"
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
extern int Zlg7289SIOBand;
extern int Zlg7289SIOCtrl;
int main(void)
{
U32 key;
ARMTargetInit(); //开发版初始化
LCD_Init();
LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式
Uart_Printf("\nArm Target Init OK.");
Zlg7289_Reset();//zlg7289复位
while(1)
{ key=GetKey();//得到按键值
if(key==1) LCD_printf("/ \n");
if(key==2) LCD_printf("* \n");
if(key==3) LCD_printf("- \n");
if(key==4) LCD_printf("7 \n");
if(key==5) LCD_printf("8 \n");
if(key==6) LCD_printf("9 \n");
if(key==7) LCD_printf("+ \n");
if(key==8) LCD_printf("4 \n");
if(key==9) LCD_printf("5 \n");
if(key==10) LCD_printf("6 \n");
if(key==11) LCD_printf("1 \n");
if(key==12) LCD_printf("2 \n");
if(key==13) LCD_printf("3 \n");
if(key==14) LCD_printf("Enter \n");
if(key==15) LCD_printf("0 \n");
if(key==0) LCD_printf("NumLock \n");
Delay(1);
ZLG7289_ENABLE();//使zlg7289占有同步串口
Delay(10);//延时
WriteSDIO(ZLG7289_CMD_DA TA0|0);//数码管以方式0译码,第一个数码管亮
WriteSDIO(key%10);//显示个位
Delay(3000);//延时
if(key>9)
{//键值大于9显示十位
WriteSDIO(ZLG7289_CMD_DA TA0|1);//发送十位数据
WriteSDIO((unsigned char)(key/10));
Delay(1);
WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示
WriteSDIO(3);
}
else
{//键值小于10不显示十位
WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示
WriteSDIO(1);
}
ZLG7289_DISABLE();//zlg7289放弃同步串口控制权
}
return 0;
}
六、遇到的问题及解决方法
每次做实验都是要改代码。
首先在没有改代码之前,在按键的时候,我按1,出现的不是对应的数字,并且在显示屏上也没有出现数字。
所以需要联系实验1中的代码,让按键出来的数字显示在显示屏上。
所以一开始就需要把实验1中的LCD320.H和lcd320.c文件加入到本实验里。
最后修改完代码后,我去做了试验。
我按了一个1数字键,发现屏幕上出现了有7个1,难道是我按的太慢了?我很快地又按了一遍,还是出现了4个。
后来发现是因为延时的原因,所以又在代码里加入了延时代码。
再试一遍,果然,我按得慢,屏幕上也只出现一个相对应的数字。