按键驱动设计实验
- 格式:ppt
- 大小:1.69 MB
- 文档页数:13
桂林电子科技大学
实验报告
2016-2017 学年第一学期
开课单位海洋信息工程学院
适用年级、专业 14级机械设计制造及其自动化
课程名称《单片微型计算机与接口技术-课内实验》
主讲教师周旋
课程序号 BS1615000_03
课程代码 BS1615000 实验名称《独立按键识别》
学号 1416010516 - 17 姓名林亦鹏卢炳荣
独立按键识别实验报告
电路采用无源蜂鸣器,从P1.5口形成脉冲来驱动。
因为单片机开机初始化瞬间,其I/O口为高电平,会有误响动作。
单片机的独立键盘使用的是P1口。
当有键按下时,P1口相应位为低电平。
、查找资料说明按键抖动的原因。
、延时程序是怎么实现延时的?
定义蜂鸣器的连接端口--//。
一、实训目的通过本次单片机独立按钮实训,掌握单片机的基本原理,了解独立按钮的工作原理及其在单片机中的应用,提高动手实践能力,为后续单片机相关课程的学习打下坚实基础。
二、实训内容1. 独立按钮介绍2. 独立按钮在单片机中的应用3. 独立按钮驱动程序编写4. 实验电路搭建与调试三、实训过程1. 独立按钮介绍独立按钮是一种常用的电子开关,由一个开关和两个引脚组成。
当按钮未按下时,两个引脚处于断开状态;当按钮按下时,两个引脚导通,从而实现信号的传递。
2. 独立按钮在单片机中的应用在单片机中,独立按钮常用于实现简单的输入控制,如按键控制LED灯的亮灭、按键控制继电器开关等。
3. 独立按钮驱动程序编写以51单片机为例,编写独立按钮驱动程序如下:```c#include <reg51.h>#define BUTTON P1 // 定义按钮连接的端口void delay(unsigned int ms) // 延时函数{unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++);}void main(){while (1){if (BUTTON == 0x00) // 检测按钮是否被按下{delay(10); // 消抖处理if (BUTTON == 0x00) // 再次检测按钮是否被按下{// 执行按钮按下后的操作// ...}}}}```4. 实验电路搭建与调试根据上述程序,搭建如下实验电路:(1)连接按钮:将按钮的两个引脚分别连接到单片机的P1.0引脚和地(GND)。
(2)连接LED灯:将LED灯的正极连接到单片机的P1.1引脚,负极连接到地(GND)。
(3)连接电源:将单片机的VCC引脚连接到5V电源,GND引脚连接到地(GND)。
(4)调试程序:将编译好的程序烧录到单片机中,观察LED灯是否在按钮按下时亮起。
第1篇一、实验目的本次实验旨在深入了解汽车按键的工作原理、设计特点以及在汽车电子系统中的应用。
通过实际操作和理论分析,掌握汽车按键的电路设计、功能实现以及用户体验优化等方面的知识。
二、实验内容1. 汽车按键类型及特点(1)机械按键:采用机械触点进行开关,具有结构简单、成本低廉、耐用性好等特点。
(2)电容式按键:通过检测电容变化实现开关,具有防水、防尘、触感好等特点。
(3)触摸感应按键:通过检测触摸信号实现开关,具有无机械磨损、响应速度快等特点。
2. 汽车按键电路设计(1)机械按键电路:主要包括按键、电阻、电容、微控制器等元件。
按键与电阻、电容等元件连接,通过微控制器控制电路通断。
(2)电容式按键电路:主要包括按键、电容、微控制器等元件。
按键与电容连接,通过微控制器检测电容变化实现开关。
(3)触摸感应按键电路:主要包括触摸感应芯片、微控制器等元件。
触摸感应芯片检测触摸信号,通过微控制器控制电路通断。
3. 汽车按键功能实现(1)开关功能:按键通过电路连接,实现开关功能。
(2)功能扩展:通过按键组合,实现多种功能。
(3)人机交互:按键设计考虑用户体验,实现直观、便捷的操作。
4. 汽车按键在电子系统中的应用(1)仪表盘按键:用于控制仪表盘显示内容,如转速、油量等。
(2)中控台按键:用于控制空调、多媒体、导航等功能。
(3)门把手按键:用于控制车门开关。
(4)座椅按键:用于调整座椅位置。
三、实验步骤1. 准备实验器材:汽车按键、电阻、电容、微控制器、电源等。
2. 组装汽车按键电路:按照电路图连接电阻、电容、微控制器等元件。
3. 编写程序:编写微控制器程序,实现按键功能。
4. 测试与调试:测试按键功能,调试程序。
5. 分析与总结:分析实验结果,总结实验经验。
四、实验结果与分析1. 按键电路设计合理,按键功能实现。
2. 通过编程实现按键功能扩展,提高用户体验。
3. 按键在电子系统中的应用广泛,具有实际意义。
五、实验结论本次实验成功实现了汽车按键在电子系统中的应用,掌握了汽车按键电路设计、功能实现以及用户体验优化等方面的知识。
目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。
设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。
重点就是各部分硬件的连接设计以及程序的编写。
本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。
1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。
3、分析一下此程序的各部分的功能,各零件的工作原理。
4、对程序进行调试,分析调试结果,观察并得出结论。
1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
GPIO 的使用-按键识别实验
一、实验目的:
1、熟悉 GPIO 库函数的开发方法
2、掌握 GPIO 输入输出控制
3、掌握 SysTick 定时器应用方法
4、学习按键识别程序编写
二、实验原理及内容
本实验采用查询方式识别按键,利用开发板上的 K1、K2、K3 控制 LCD 背光点亮、熄灭与闪烁,其中背光闪烁由长按 K3 实现。
三、实验主要仪器
安装有keil软件的计算机
四、实验步骤:
1、systick定时器(滴答定时器)systick定时器驱动函数:
1)systick.c
2)systick.h
2、创建按键驱动函数
1)key.c
2)key.h
3)编写主函数,完成 LCD 背光控制。
五、实验结果与分析
六、思考题:
1、简要说明 SysTick 定时器概况及使用该定时器的好处。
2、按键识别有哪些方法?比较其优劣。
3、如何实现按键状态与按键执行功能分离?
4、如何实现按键长按功能?
七、实验心得与讨论。
第1篇一、实验目的1. 了解按键电路的工作原理。
2. 掌握蜂鸣器的工作原理及其控制方法。
3. 学习使用C语言进行嵌入式编程。
4. 培养动手实践能力和团队合作精神。
二、实验原理1. 按键电路:按键电路由按键、上拉电阻和下拉电阻组成。
当按键未被按下时,上拉电阻将输入端拉高;当按键被按下时,下拉电阻将输入端拉低。
2. 蜂鸣器电路:蜂鸣器是一种发声元件,其工作原理是利用电磁铁的磁力使振动膜片振动,从而产生声音。
蜂鸣器的控制主要通过改变输入信号的频率来实现。
3. 计数原理:通过按键输入信号,实现计数器的计数功能。
当按键被按下时,计数器加一;当按键被连续按下时,计数器的计数值随之增加。
三、实验器材1. 单片机开发板(如STC89C52)2. 按键3. 蜂鸣器4. 电阻5. 接线6. 电脑7. 调试软件(如Keil uVision)四、实验步骤1. 设计电路图:根据实验要求,设计按键、蜂鸣器和单片机的连接电路图。
2. 编写程序:使用C语言编写程序,实现按键计数和蜂鸣器控制功能。
3. 编译程序:将编写好的程序编译成机器码。
4. 烧录程序:将编译好的机器码烧录到单片机中。
5. 调试程序:通过调试软件对程序进行调试,确保程序正常运行。
6. 测试实验:将单片机连接到实验电路中,进行按键计数和蜂鸣器控制测试。
五、实验代码```cinclude <reg52.h>define uchar unsigned chardefine uint unsigned intsbit key = P3^2; // 按键连接到P3.2端口sbit buzzer = P1^0; // 蜂鸣器连接到P1.0端口uchar count = 0; // 计数器void delay(uint t) {uint i, j;for (i = 0; i < t; i++)for (j = 0; j < 127; j++);}void buzzer_on() {buzzer = 0; // 使蜂鸣器发声}void buzzer_off() {buzzer = 1; // 使蜂鸣器停止发声}void main() {while (1) {if (key == 0) { // 检测按键是否被按下delay(10); // 消抖if (key == 0) {count++; // 计数器加一buzzer_on(); // 使蜂鸣器发声delay(500); // 发声时间buzzer_off(); // 停止发声}}}}```六、实验结果与分析1. 当按键未被按下时,蜂鸣器不发声。
摘要000单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
000关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the000 Keywords: SCM, water lights, digital tubes, control system000键盘控制流水灯和数码管实验报告00目录000一设计的目的 (200)二任务描述及方案设计 (300)1. 任务描述 (300)2. 方案设计 (300)三硬件设计方案 (30)001. Msp430f149单片机的功能说明 (30)2. 显示器功能 (40)3. 复位电路 (40)4. 按键的部分 (40)5. 74HC573的特点 (4)0006. 流水灯和数码管电路原理图 (40)007. 元器件清单 (40)四程序设计方案 (50)001. 用IAR Embedded W orkbench软件编程序 (5)002. 仿真电路图 (60)五实物实验 (70)001. 实物图 (7)002. 测试结果与分析 (700)六结论 (11)000八参考文献 (16)000一、设计目的0001、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;0002、培养学生实践动手能力及独立分析和解决工程实践问题能力;003、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
一、实验目的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)扫描键盘矩阵在驱动程序中,编写一个函数用于扫描键盘矩阵,识别按键状态。
电子琴一、实验要求利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。
用口发出音频脉冲,驱动喇叭。
二、实验目的1. 了解计算机发声原理。
2. 进一步熟悉定时器编程方法.3. 进一步熟悉键盘扫描电路工作原理及编程方法三、实验电路及连接喇叭发声电路与硬件实验六相同,键盘电路无需连线,原理图可参考图1和硬件实验十七四、实验说明1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调.2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲. 本实验中按键一次,会发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音。
音阶 1 2 3 4 5 6 7频率(HZ)五、实验框图; 硬件实验二十一电子琴OUTBIT equ 0FE02h IN equ 0FE00hPulse equ 0PulseCNT equ 50hToneHigh equ 51hToneLow equ 52hSpeaker equ0000 02008E ljmp Startorg 000bhTimer0Int:000B C0D0 push PSW000D C28C clr TR0000F 85518C mov TH0, ToneHigh0012 85528A mov TL0, ToneLow0015 D28C setb TR00017 A200 mov c, Pulse0019 9290 mov Speaker, c001B B200 cpl Pulse001D 1550 dec PulseCNT001F D0D0 pop PSW0021 32 retiToneTable:0022 FC420024 FCAE0026 FD0A0028 FD35002A FD82002C FDC8002E FE05 dw 64578, 64686, 64778, 64821, 64898, 64968, 65029TestKey:0030 90FE02 mov dptr, #OUTBIT0033 7400 mov a, #00035 F0 movx @dptr, a0036 90FE00 mov dptr, #IN0039 E0 movx a, @dptr003A F4 cpl a003B 540F anl a, #0fh003D 22 retKeyTable:003E 1615140041 FF db 16h, 15h, 14h, 0ffh0042 1312110045 10 db 13h, 12h, 11h, 10h0046 0D0C0B0049 0A db 0dh, 0ch, 0bh, 0ah004A 0E0306004D 09 db 0eh, 03h, 06h, 09h004E 0F02050051 08 db 0fh, 02h, 05h, 08h0052 0001040055 07 db 00h, 01h, 04h, 07hGetKey:0056 90FE02 mov dptr, #OUTBIT0059 8583A0 mov P2, dph005C 7800 mov r0, #Low(IN)005E 7920 mov r1, #00100000b0060 7A06 mov r2, #6KLoop:0062 E9 mov a, r10063 F4 cpl a0064 F0 movx @dptr, a0065 F4 cpl a0066 03 rr a0067 F9 mov r1, a0068 E2 movx a, @r00069 F4 cpl a006A 540F anl a, #0fh006C 7006 jnz Goon1006E DAF2 djnz r2, KLoop0070 7AFF mov r2, #0ffh0072 800F sjmp ExitGoon1:0074 F9 mov r1, a0075 EA mov a, r20076 14 dec a0077 23 rl a0078 23 rl a0079 FA mov r2, a ; r2 = (r2-1)*4007A E9 mov a, r1007B 7904 mov r1, #4LoopC:007D 13 rrc a007E 4003 jc Exit0080 0A inc r20081 D9FA djnz r1, LoopCExit:0083 90FE02 mov dptr, #OUTBIT0086 E4 clr a0087 F0 movx @dptr, a0088 EA mov a, r20089 90003E mov dptr, #KeyTable008C 93 movc a, @a+dptr008D 22 retStart:008E 758170 mov sp, #70h0091 758901 mov TMOD, #01 ; Timer0094 75A882 mov IE, #82h ; EA=1, IT0 = 1 MLoop:0097 1130 call TestKey0099 60FC jz MLoop009B 1156 call GetKey009D F5F0 mov b, a009F 60F6 jz MLoop ; = 0, < 100A1 54F8 anl a, #!700A3 70F2 jnz MLoop ; > 700A5 15F0 dec b00A7 E5F0 mov a, b00A9 23 rl a ; a = a*200AA F5F0 mov b, a00AC 900022 mov dptr, #ToneTable00AF 93 movc a, @a+dptr00B0 F551 mov ToneHigh, a00B2 F58C mov TH0, a00B4 E5F0 mov a, b00B6 04 inc a00B7 93 movc a, @a+dptr00B8 F552 mov ToneLow, a00BA F58A mov TL0, a00BC D28C setb TR000BE 755064 mov PulseCNT, #100 Wait:00C1 E550 mov a,PulseCNT00C3 70FC jnz Wait00C5 C28C clr TR000C7 020097 ljmp MLoopend。