实验二 独立按键试验实验报告
- 格式:doc
- 大小:889.50 KB
- 文档页数:4
桂林电子科技大学
实验报告
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. 基本功能:实现常见的键盘功能,包括字母、数字、符号等输入。
2. 人体工学:设计符合人体工学原理的键盘布局,以减少手部疲劳和不适。
3. 可定制性:提供键盘布局定制和按键映射定制的功能,以适应不同用户的需求。
4. 独立性:键盘具备自身的处理能力和输入接口,无需依赖外部设备。
设计过程键盘布局设计独立键盘的第一步是确定键盘的布局。
我们选择了常见的QWERTY键盘布局作为基础,同时参考了一些人体工学键盘的设计原则,例如将常用的按键放置在最容易触及的位置,减少手指的运动距离等。
根据这些原则,我们对QWERTY 键盘进行了一些微调和优化。
按键设计在键盘布局确定后,我们需要设计按键。
按键的设计需要考虑按键的形状、大小和高度等因素,以及按键的触发方式(例如机械按键或薄膜按键)。
我们选择了机械按键,因为它们在使用过程中具有明显的反馈和触感,且寿命较长。
电路设计为了实现键盘的独立性,我们需要设计键盘的电路。
电路主要由按键和控制芯片组成。
按键通过矩阵连接方式将多个按键连接到少量的引脚上,以减少引脚的数量。
控制芯片负责接收按键输入信号,并将其转化为计算机可以识别的数据格式。
软件开发为了使键盘能够与计算机进行通信,我们需要开发相应的软件。
软件主要负责读取控制芯片输出的数据,并将其转化为键盘输入信号。
我们开发了一个简单的驱动程序,可以将键盘识别为标准的计算机键盘,与计算机兼容。
实验评估为了评估设计的独立键盘的功能和效果,我们进行了一些实验。
功能评估我们首先测试了独立键盘的基本功能,包括字母、数字、符号等输入。
我们使用了不同的按键和组合键进行测试,验证了键盘的功能正常。
人体工学评估为了评估键盘的人体工学效果,我们请来了一些参与者进行试用。
双开关实验报告双开关实验报告引言:在电路实验中,双开关是一种常见的电路元件。
它由两个独立的开关组成,可以分别控制两个电路的通断。
通过对双开关的实验研究,我们可以更好地理解其工作原理和应用场景。
本文将对双开关进行实验探究,并总结实验结果。
实验目的:1. 了解双开关的基本结构和工作原理。
2. 掌握双开关的使用方法和注意事项。
3. 研究双开关在电路中的应用。
实验步骤:1. 准备实验所需材料和仪器:双开关、电源、电线、灯泡等。
2. 将电源与灯泡串联,连接到双开关的两个开关端口。
3. 打开电源,观察灯泡的亮灭情况。
4. 分别操作两个开关,观察灯泡的变化。
实验结果:通过实验观察,我们得出以下结论:1. 当两个开关都关闭时,灯泡不亮。
2. 当一个开关打开,另一个关闭时,灯泡亮。
3. 当两个开关都打开时,灯泡亮。
实验分析:从实验结果可以看出,双开关具有独立控制两个电路的能力。
当两个开关都关闭时,电路中断,灯泡不亮。
当一个开关打开,另一个关闭时,电路闭合,灯泡亮。
当两个开关都打开时,电路再次中断,灯泡不亮。
这种特性使得双开关在电路设计中具有重要的作用。
例如,在家庭灯光控制中,可以使用双开关实现一个开关控制房间内的灯光,另一个开关控制走廊或门口的灯光。
这样,我们可以方便地控制不同区域的灯光,提高生活的便利性。
此外,双开关还可以应用于电路的安全控制。
在某些场合,为了保证电路的安全性,需要使用双开关来控制电源的通断。
例如,在实验室中,对于一些危险的电路,可以使用双开关来加强对电源的控制,避免意外发生。
实验总结:通过本次实验,我们深入了解了双开关的工作原理和应用。
双开关可以独立控制两个电路的通断,具有灵活性和安全性。
在电路设计和实验中,合理应用双开关可以提高电路的可控性和安全性。
在今后的学习和实践中,我们应该进一步探索双开关的应用领域,并结合具体的电路设计,灵活运用双开关,为电路的控制和安全提供更多的可能性。
同时,我们也应该加强对电路元件的理解和实验技能的培养,以便更好地应对电路设计和实验中的挑战。
单片机独立按键实验报告总结本次实验我们使用了单片机进行了独立按键实验,通过学习掌握了单片机输入输出口的基本使用方法以及独立按键的使用方法和技巧。
以下是本次实验的总结:一、实验内容本次实验的主要内容是独立按键的使用方法和技巧。
通过学习,我们掌握了独立按键的接法原理和基本应用方法。
在实验中,我们首先通过理论学习了按键的工作原理,了解了按键在电路中的应用和接法方法,然后实际动手进行了按键电路的搭建和单片机程序的编写,最后进行了按键测试和实验结果分析。
二、实验步骤1.理论学习:首先,我们学习了独立按键的工作原理和接法原理,了解按键在电路中的应用和接法方法,掌握了按键接口的输入输出方式,并对具体实现过程和技巧进行了分析和探讨。
2.电路搭建:根据学习到的按键接法原理和电路图,我们使用面包板和导线搭建了独立按键电路,将按键连接到单片机的输入端口上,并设置相应的电阻来保护电路和单片机芯片。
3.程序编写:通过阅读单片机说明书和参考其他资料,我们学习了单片机输入输出口的基本使用方法和指令,编写了程序代码,实现了独立按键操作的功能。
我们实现了多种按键操作方式,包括单击、长按等方式,并添加了相应的提示和保护措施,以确保程序的可靠性和稳定性。
4.测试实验:最后,我们进行了独立按键测试实验,通过按键操作,观察测试实验结果,进行了数据分析和结论汇总。
实验结果表明,我们的按键电路和程序代码都实现了预期的功能和效果,证明了我们在实验中掌握的独立按键技巧和方法是正确和有效的。
三、实验结论通过本次实验,我们掌握了单片机输入输出口的基本使用方法和独立按键的使用方法和技巧,了解了按键在电路中的应用和接法方法,探索了独立按键实现的多种方式和技巧,提高了我们的电路设计能力和程序设计能力。
同时,本次实验还加强了我们的实验动手操作能力,增强了我们的实际应用能力和创新思维能力,为我们以后的学习和工作打下了坚实的基础。
华南农业大学独立按键检测实验报告专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13一、实验目的1.学会使用独立按键二、实验内容1.通过按键选择LED灯左右移动三、实验相关原理图四、实验程序#include //51单片机头文件#includesbit K1 = P1^0; //对应K1按钮为P1^0sbit K2 = P1^1; //对应K2按钮为P1^1#define GPIO_LED P0 //定义led由P0口输出信号void Delay10ms(unsigned int c); //延时函数声明,延时时间为为10msunsigned char Key_Scan(); //键盘扫描函数声明void main(void) //主函数{unsigned char ledValue, keyNum; //定义两个无符号字符型变量ledValue与keyNum ledValue = 0x01; //将0000 0001赋给ledValuewhile (1) //一直进行这个while循环专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13 {keyNum = Key_Scan(); //扫描键盘if (keyNum == 1) //如果键值返回1{ledValue = _crol_(ledValue, 1); //左循环}else if (keyNum == 2) // 如果键值返回2{ledValue = _cror_(ledValue, 1);//右循环}GPIO_LED = ledValue;//点亮LED灯}}unsigned char Key_Scan() //键盘扫描函数{unsigned char keyValue = 0 , i; //定义变量用于保存键值if (K1==0) //检测按键K1是否按下{Delay10ms(1); //消抖if (K1==0) //再次检测按键是否按下{keyValue = 1; //使得键值为1i = 0; //令i=0while ((i<50) && (K1==0)) //检测按键是否松开,当i小于50并且K1按下的{ //时候,进入循环,单片机程序再此将循环500msDelay10ms(1);i++;}}if (K2==0) //检测按键K2是否按下{Delay10ms(1); //消除抖动if (K2==0) //再次检测按键是否按下{keyValue = 2; //使得键值为2i = 0; //令i=0专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13 while ((i<50) && (K2==0)) //检测按键是否松开,当i小于50并且K2按{ //下的时候,进入循环,单片机程序再此将Delay10ms(1); //循环500msi++;}}}return keyValue; //将读取到键值的值返回}void Delay10ms(unsigned int c) //10ms的延时函数{unsigned char a, b;for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}五、思考问题1.为什么需要按键防抖?如何实现软件去抖?答、由于按钮按下时,开关的触点并没有紧密贴合,而是可能存在不停地快速的通断通断,这种现象称为按键抖动,所以需要按键防抖方法:判断按键是否被按下之后,做短暂延时,待延时过后再检测一遍按键是否被按下,如果两者结果相同,则认为该按键被按下。
独立按键检测实验20122593李九生实验目的:1. 熟悉51系列单片机独立按键的工作原理。
2. 掌握与外部中断引脚INT0和INT1相连的独立按键的编程方法。
实验原理:独立键盘就是各按键相互独立,每个按键各接一根I/O接口线,每根I/O接口线上的按键都不会影响其他的I/O接口线。
因此,通过检测I/O接口线的电平状态就可以很容易地判断出哪个按键被按下了。
独立键盘的结构方式有查询和中断两种方式。
查询方式在工作时通过执行相应的查询程序来判断有无键按下,是哪一个按下。
中断方式处理时,当有任意键按下时则请求中断,在中断服务程序上通过执行判断程序,判断是哪一个键按下。
实验内容:1.编写一程序,与P1口相连的独立按键控制P2口流水灯。
2.编写一程序,与INT0和INT1引脚相连的独立按键控制P2口流水灯。
实验思考题:如何实现按键按下,操作指令只执行一次?答:就是在按键检测完之后,在后面加一条while(1)无限循环语句,来检测按键是按下就好。
#include<reg51.h>#include <intrins.h>sbit key1=P1^0;sbit key2=P1^1;void delay(unsigned int i){unsigned int j;unsigned char k;for(j=i;j>0;j--)for(k=125;k>0;k--);}void main(){P1=0xff;P2=0x01;while(1){if(P1!=0xff)delay(3);if(P1!=0xff)if(key1==0){P2=_crol_(P2,1);delay(200);}while(key1==0);if(key2==0){P2=_cror_(P2,1);delay(100);}}}#include <intrins.h>sbit key1=P3^2;sbit key2=P3^3;void delay(unsigned int i){unsigned int j;unsigned char k;for(j=i;j>0;j--)for(k=125;k>0;k--);}void main(){P2=0x01;IT0 = 0;IT1 = 0;IE = 0x85;while(1);}void Ex_Interrupt_0() interrupt 0 {P2=_crol_(P2,1);delay(200);}void EX_INT1() interrupt 2{P2=_cror_(P2,1);delay(100);}。
实验二独立按键试验实验报告【1】实验目的:掌握如何完成用用按键控制流水灯的流动方向、流速、闪烁方式等程序的编译和烧写。
【2】实验原理:实验原理图如下:【3】实验步骤:1.打开Keil编译器,创建项目:Project---New uVision Project,创建一个文件夹来放工程相关的文件,给工程项目命名为my work,点击保存。
2.选择芯片类型,这里选择ATMEL------AT89C52这个芯片。
3.把C文件添加到我们的工程文件里。
4.在test.c这个文档里编辑代码。
5.编译通过之后,我们需要输出hex文件,也就是单片机可执行的二进制文件。
6.利用STC-ISP将编写好的程序烧写进单片机中。
7.如下图连接试验相关模块连线:→JP165跳线帽断开→JP10连接J12→JP5连接JP8→J21接左边【4】程序设计内容:(1)开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P1.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1按下去,即输入低电平,相当开关闭合,当松开开关K1,即输入高电平,相当开关打开。
(2)输出控制如图3所示,当P1.0端口输出低电平,即P1.0=0时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出高电平,即P1.0=1时,发光二极管L1亮。
所以通过对P1.0端口的设置就可以控制灯的亮灭。
(3)延时程序的设置作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔要长一些,否则人眼根本无法识别到灯的闪烁效果。
于是我们在执行某一指令时,插入延时程序,来达到我们的增加亮灯时长的效果。
【5】实验代码:#include<reg51.h>#include<intrins.h>unsigned int key;sbit key1=P1^0;sbit key2=P1^1;void delay(unsigned int i){unsigned int j;for(;i>0;i- -){for(j=0;j<50;j++){;}}}void main(){unsigned char i;P0=0x00;if(key1==0){while(key2==1){P0=0x01;delay(400);for(i=0;i<8;i++){P0<<=1;delay(400);if(key2==0)break;}}}if(key2==0){while(key1==1){P0=0x80;delay(400);for(i=0;i<8;i++){P0>>=1;delay(400);if(key1==0)break;}}}}【6】实验现象:当按下K1键,松开K2键时,流水灯向左移;当按下K2键,松开K1键时,流水灯向右移。
单片机课程实验二:独立按键电路设计专业:通信工程学号:1610111183 姓名:石万里一、实验步骤:在实验一STC89C52单片机控制8个流水灯的实验的基础上进行此实验。
本次实验目标:通过两个独立按键控制流水灯的变化,使得8个流水灯代表的8进制数,在按下K1键后自动加一,按下K2键后,自动减一,采用下降沿外部中断触发。
电路图在实验一的基础上进行改装,让P32与P33各自通过一个独立按键接地,手绘电路图如图1.1所示:图1.1独立按键电路图1.2独立按键电路焊接成果实验程序编写烧录后,在keil软件中生产hex文件,再烧录到单片机芯片中,再给电路板上电即可。
之后是实验程序的编写,流水灯程序编写好并在学习板上测试成功后,即可把芯片放到自己焊接的电路板上上电测试电路板,如果成功即可找老师验收,不成功需要用万用表对电路板进行测试,测试时先把万用表档位调到欧姆档,测试本实验焊接的独立按键电路是否存在开路,并检查是否存在有未焊接的部分,是否有虚焊漏焊的情况,是否上电测试时晶振未安装,电路板检查后继续进行测试,然后再检查、测试,直到自己焊接的电路板功能正常。
若是在学习板上程序未成功,则需要对程序进行修改,重新编译、烧录,不断测试。
二、流水灯程序:org 0000Hljmp mainorg 0003hljmp jiayiorg 0013hljmp jianyiorg 100h main:setb ex0setb IT0setb ex1setb IT1setb eamov r4,#07hmov r3,#07hmov r2,#02hmov a,#0fehmov p1,aloop2:acall delay next: rl aacall delaymov p1,adjnz r4,next here: acall delay//mov a,p1rr amov p1,adjnz r3,heremov r4,#07hmov r3,#07hdjnz r2,loop2acall delay loop1:mov a,#07chmov p1,asjmp loop1 delay:mov r5,#19h delay1:mov r6,#19h delay2:mov r7,#0ffhdjnz r7,$djnz r6,delay2djnz r5,delay1 retjiayi:mov a,p1dec aacall delaymov p1,asjmp jiayiretijianyi:mov a,p1inc aacall delaymov p1,asjmp jianyiretiend三、实验总结:实验结果如下图所示:前五张图片是加一结果,最后两张图片是减一结果因为拍照速度太慢,故加一减一在图中看起来可能不连续,但程序完全正确,已经过实验验证,本人建议最好录视频作为作业上交此实验是建立在实验一的基础上进行的,故相对较为简单,只需要P32与P33各自加独立按键接地即可。
宁德师范学院计算机系
实验报告
(2014—2015学年第2学期)
课程名称单片机原理
实验名称独立按键识别
专业计算机科学与技术(软工)年级2012级
学号B2012103145 姓名冯武
指导教师杨烈君
实验日期2015.5.27
实验步骤、实验结果及分析:
1 实验步骤:
1、使用
Proteus ISIS 7 Professional应用程序,建立一个.DSN文件
2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。
3、构建仿真电路
图1 按键识别1、2
图2 按键识别3
图3按一下暂停
图4归零
图5时钟调整
电路图
注:1、报告内的项目或设置,可根据实际情况加以补充和调整
2、教师批改学生实验报告应在学生提交实验报告10日内。
数码显示及键盘实验【实验内容】1、数码管显示0-72、独立按键识别【需要了解的知识】1、GPIO设定2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理【实验预习】仔细预读实验指导电子文档的实验六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一数码管显示0-7实验任务:1)先将“0-7”数码管的段码值写入存储器中,使8位数码管从右至左显示0-7.实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。
输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL的AT89S52的CPU。
选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。
接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。
单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。
然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。
独立式键盘的设计与应用实验报告实验报告:指导教师:xxx实验者:13410801 xx 13410802 xxx一、实验目的:1.了解直接输入键盘与矩阵键盘的原理。
2.了解键盘寄存器的功能。
3.掌握键盘输入的编程方法。
二、实验要求:1.对所有16个按键进行编码,当按键后,在七段数码管上显示对应的键盘编码(可以使用一个或两个七段数码管)。
2.对所有16个按键进行编码,当按键后,在八个LED上显示对应的键盘编码。
三、实验内容:1.在键盘寄存器KPC中,使能矩阵键盘。
2.必须在使用前添加下面语句:#define KAPS_VALUE (*((volatile unsigned char*)(0x41500020)))3.接下来在button_statusFetch函数中定义变量,其中j用来获取矩阵键盘的键值,具体如下:char j = 0;j = KAPS_VALUE ;4.最后,在直入键盘的分支语句后添加矩阵键盘的分支代码段,即switch(j){}代码段:switch (j){case 0x00: //key-press 5kbd_buff=0x8F12;LED_CS2 = kbd_buff;Delay(400);break;……四、程序编辑:;post_initGpio.sEXPORT post_initGpioAREA post_initGpio ,CODE ,READONLYldr r1,=0x40e00000;GPSR0MOV R0,#0x3000 ;GPIO<13:12>STR R0,[R1,#0x18];GPCR0MOV R0,#0x800 ;GPIO<11>STR R0,[R1,#0x24];GAFR0_L/////////////////////////////////////////////// /// MOV R0,#0x80000000 ;GPIO<15>:F2:nCS1 STR R0,[R1,#0x54];GAFR0_Uldr R0,=0x10 ;0xa5000010STR R0,[R1,#0x58];GPDR0///////////////////////////////////////////////// ldr R0,=0xc1a08000 ;GPIO<15>:nCS1 STR R0,[R1,#0xc];GPSR1MOV R0,#0STR R0,[R1,#0x1c];GPCR1MOV R0,#0STR R0,[R1,#0x28];GAFR1_LLDR R0,=0xc9c ;0xa9558STR R0,[R1,#0x5c];GAFR1_ULDR R0,=0xca0 ;0xaaa590aaSTR R0,[R1,#0x60]LDR R0,=0xca4 ;0xfccf0382STR R0,[R1,#0x10];GPSR2MOV R0,#0x10000STR R0,[R1,#0x20];GPCR2MOV R0,#0STR R0,[R1,#0x2c];GAFR2_L////////////////////////////////////ldrR0,=0xa0000000 ;0xaaaaaaaa ;GPIO<79:78>:nCS<3:2> STR R0,[R1,#0x64];GAFR2_U/////////////////////////////////////////ldr R0,=0x50000400;0x50090402 ;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4 STR R0,[R1,#0x68];GPDR2///////////////////////////////////////////ldr R0,=0x0221ffff ;GPIO<80:78>:nCS<4:2>STR R0,[R1,#0x14]; LDR R0,=0xca8; STR R0,[R1,#0x68]MOV R0,#0x20000STR R0,[R1,#0x118];GPCR3MOV R0,#0STR R0,[R1,#0x124];GAFR3_L////////////////////////////////////////////// ldr R0,=0x020a95c3 ;GPIO<108,105:98>STR R0,[R1,#0x6c];GAFR3_Uldr R0,=0x1408STR R0,[R1,#0x70];GPDR3///////////////////////////////////////////////// / ldr R0,=0x21381;GPIO<108,105:103>STR R0,[R1,#0x10c];config twice:;GAFR0_Uldr R0,=0xa5000010 ;0x0x10STR R0,[R1,#0x58];GAFR1_LLDR R0,=0xa9558 ;0xc9cSTR R0,[R1,#0x5c]LDR R0,=0xaaa590aa ;0xca0STR R0,[R1,#0x60];GPDR1LDR R0,=0xfccf0382 ;0xca4STR R0,[R1,#0x10];GAFR2_L/////////////////////////////////////////////// ////ldr R0,=0xa0000000 ;GPIO<79:78>:nCS<3:2>STR R0,[R1,#0x64];GAFR2_U/////////////////////////////////////////////// //////////////// ////////ldr R0,=0x50090402;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4STR R0,[R1,#0x68]mov pc,r14END;post_initKey.sEXPORT post_initKeyAREA post_initKey, CODE, READONLYnopnopldr r1,=0x41500000;KPCldr r0,=0x3FAFF1C2 ; (0x2FAFF9C3:interrupt) str r0,[r1,#0x0];KPDK; ldr r0,=0x1; str r0,[r1,#0x8]; ;KPREC; ldr r0,=0x1; str r0,[r1,#0x10];KPMK; ldr r0,=0x1; str r0,[r1,#0x18];KPAS; ldr r0,=0x1; str r0,[r1,#0x20]; ldr r0,=0x1; str r0,[r1,#0x0];KPKDIldr r0,=0x707str r0,[r1,#0x48]mov pc,r14END五、实验结果:当按下键盘上的按键时,七段数码管可以显示出对应的编码。
按键功能实验报告总结1. 引言按键是现代电子设备中常用的输入方式之一,通过按下不同的按键可以实现不同的功能。
本次实验旨在探究按键的功能实现及原理。
2. 实验过程2.1 实验材料本次实验所需材料如下:- 按键模块- Arduino UNO 控制板- 杜邦线2.2 实验步骤1. 将按键模块与Arduino UNO 控制板连接,确保电路连接正确无误。
2. 编写Arduino 代码,实现按键功能。
3. 将代码上传至Arduino UNO 控制板。
4. 进行功能测试,观察按键是否正常工作。
3. 实验结果实验过程中,我们成功实现了按键的功能。
通过编写Arduino 代码,我们实现了以下几种按键功能:3.1 单击按键当按下按键时,Arduino UNO 控制板会通过串口输出“Button Pressed!”的提示信息。
观察串口监视器,可以清楚地看到按键按下的时刻。
3.2 长按按键当按住按键一段时间后释放,Arduino UNO 控制板会通过串口输出“Button Released!”的提示信息。
通过修改代码中的延时时间,可以调节长按的时间阈值。
3.3 多次按下当连续按下按键多次后,Arduino UNO 控制板会通过串口输出按下的次数。
这可以用于实现计数等功能。
3.4 组合键通过将多个按键同时按下,可以实现组合键的功能。
例如,按下A 键和B 键可以触发某种动作,而单独按下任意一个按键不会有任何响应。
4. 实验分析通过本次实验,我们深入了解了按键的功能实现及原理。
按键模块采用了电磁原理,当按键按下时,电流通过按键形成一条通路,这个通路将电压传递到Arduino 控制板上。
Arduino 控制板通过读取某个引脚上的电压变化,来检测按键是否按下。
在编写Arduino 代码时,需要使用到状态机的思想。
通过不同的状态来判断按键的状态变化,从而实现不同的功能。
在本次实验中,我们使用了按键的两个状态:按下和释放。
此外,还需要注意防抖处理。
一、实验背景在单片机实验中,独立按键实验是一个基础且重要的实验项目。
通过本实验,我们能够了解独立按键的工作原理、硬件连接以及软件编程方法,从而为后续的单片机应用开发打下坚实的基础。
二、实验目的1. 掌握独立按键的工作原理及硬件连接方法;2. 学会编写独立按键的软件程序,实现按键控制LED灯的亮灭;3. 熟悉单片机编程过程中的延时函数、状态判断等基本操作。
三、实验内容1. 独立按键的工作原理独立按键是一种电子开关,通过内部金属片的接触与断开来控制电路的连通与断开。
在未按下按键时,内部金属片不接触,电路断开;当按下按键时,内部金属片接触,电路导通。
按键的内部结构如图1所示。
2. 独立按键的硬件连接本实验使用了一个独立按键和一个LED灯作为实验对象。
按键的一端接地,另一端连接到单片机的P3.0口,LED灯的正极连接到单片机的P1.0口,负极连接到地。
电路连接如图2所示。
3. 独立按键的软件编程(1)编写延时函数延时函数用于实现按键消抖处理。
以下是一个10ms延时的函数实现:```cvoid delay10ms(unsigned int ms){unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 123; j++);}```(2)编写按键检测函数按键检测函数用于检测按键是否被按下。
以下是一个按键检测函数的实现:```cunsigned char checkKey(void){if(P3_0 == 0) // 检测按键是否被按下{delay10ms(500); // 延时消抖if(P3_0 == 0) // 再次检测按键是否被按下return 1; // 按键被按下}return 0; // 按键未被按下}```(3)编写主函数主函数用于实现按键控制LED灯的亮灭。
以下是一个主函数的实现:```cvoid main(void){while(1){if(checkKey()) // 检测按键是否被按下{LED = !LED; // 切换LED灯状态delay10ms(500); // 延时消抖}}}```四、实验总结通过本次独立按键实验,我们掌握了以下知识点:1. 独立按键的工作原理及硬件连接方法;2. 独立按键的软件编程,包括延时函数、按键检测函数以及主函数;3. 按键消抖处理的重要性及实现方法。
实训二独立按键实训
一、实训目的
1.学会使用I/O口的基本输入、输出功能。
2.了解独立键盘接口技术及编程方法。
二、实训模块
SCM01 单片机模块、SCM02 指令模块、SCM04 显示模块2。
三、实训步骤
1.用2号实验导线将“单片机模块”上的P0.0~P0.7连接到“显示模块2”上的“数码管显示模块”的D0~D7;将“单片机模块”上的P2.6、P2.7、P3.6分别连接到“显示模块2”上的“数码管显示”模块的CS1、CS2、WR;将“单片机模块”上的P1.0~P1.7连接到“指令模块”上“独立键盘”模块的K1~K8;
2.接上各模块的电源。
3.将仿真器插到“单片机模块”上的40P锁紧插座中(注意方向)。
4.打开“MedWin V3.0”软件,在软件中打开项目“…\实训程序\02 独立按键\ DuLiKEY.mpf”。
5.将程序下载到仿真器中,全速运行程序,按动独立键盘上的按键观察数码管的显示。
6.现象:依次按下K1~K8,数码管对应显示1~8。
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
RR A
RR A
RR A
XOR A,#0F0H
MOV P1,A
SJMP START
END
#include <reg51.H>
unsigned char temp;
void main(void)
{
while(1)
{
temp=P1>>4;
temp=temp | 0xf0;
P1=temp;。
第1篇一、实验背景按键作为电子设备中常见的输入装置,其功能丰富,应用广泛。
本实验旨在通过设计和实现一系列按键功能,加深对按键工作原理的理解,并提高电子设计实践能力。
二、实验目的1. 掌握按键的基本原理和电路设计方法。
2. 熟悉按键在不同应用场景下的功能实现。
3. 培养电子设计实践能力,提高问题解决能力。
三、实验内容1. 实验器材:51单片机最小核心电路、按键、LED灯、电阻、电容、面包板等。
2. 实验内容:(1)单按键控制LED灯闪烁(2)按键控制LED灯点亮与熄灭(3)按键控制LED灯亮度调节(4)按键实现数字时钟调整(5)按键实现多功能计数器(6)按键实现密码输入与验证四、实验步骤1. 根据实验要求,设计电路图,并选择合适的元器件。
2. 使用面包板搭建实验电路,包括单片机、按键、LED灯、电阻、电容等。
3. 编写程序,实现按键功能。
4. 对程序进行调试,确保按键功能正常。
5. 实验完成后,撰写实验报告。
五、实验结果与分析1. 单按键控制LED灯闪烁实验结果:按下按键,LED灯闪烁;松开按键,LED灯停止闪烁。
分析:本实验通过单片机定时器实现LED灯的闪烁。
当按键按下时,定时器开始计时;当定时器达到设定时间后,LED灯点亮;定时器继续计时,当达到设定时间后,LED灯熄灭。
如此循环,实现LED灯的闪烁。
2. 按键控制LED灯点亮与熄灭实验结果:按下按键,LED灯点亮;再次按下按键,LED灯熄灭。
分析:本实验通过单片机的I/O口控制LED灯的点亮与熄灭。
当按键按下时,单片机将I/O口置为高电平,LED灯点亮;当按键再次按下时,单片机将I/O口置为低电平,LED灯熄灭。
3. 按键控制LED灯亮度调节实验结果:按下按键,LED灯亮度逐渐增加;松开按键,LED灯亮度保持不变。
分析:本实验通过单片机的PWM(脉宽调制)功能实现LED灯亮度的调节。
当按键按下时,单片机调整PWM占空比,使LED灯亮度逐渐增加;松开按键后,PWM占空比保持不变,LED灯亮度保持不变。
实验二独立按键试验实验报告
一、实验目的
独立按键试验是为了验证按键与单片机的连接是否正常,并测试按键
功能是否正常,通过实验掌握按键接口的使用和按键的原理。
二、实验原理
在实际应用中,常常需要使用按键来实现硬件的控制。
按键的原理是:当按键关闭时,两个按键引脚之间短接,按键关闭。
当按键打开时,两个
按键引脚之间断开,按键打开。
三、实验仪器
1.单片机开发板
2.按键
3.面包板和杜邦线
4.电源线
四、实验步骤
1.将按键连接到单片机开发板上的按键接口,并接通电源。
2.编写程序,监测按键是否被按下,并通过串口输出按键的状态。
3.烧录程序到单片机,运行程序。
4.进行按键试验。
五、实验结果与分析
按下按键后,通过监测按键引脚的电平变化,可以判断按键是否被按下。
根据不同的按键连接方式,可能需要使用上拉电阻或下拉电阻来连接按键。
六、实验结论
通过独立按键试验,我们验证了按键与单片机的连接是否正确,并测试了按键的功能。
在实际应用中,可以根据需要使用按键来实现硬件的控制。
七、实验心得
通过本次实验,我掌握了按键接口的使用方法和按键的原理。
在实际应用中,按键是一个常用的控制元件,有了这次实验的经验,以后在使用按键时会更加得心应手。
实验二独立按键试验实验报告
【1】实验目的:掌握如何完成用用按键控制流水灯的流动方向、流速、闪烁方式等程序的编译和烧写。
【2】实验原理:
实验原理图如下:
【3】实验步骤:
1.打开Keil编译器,创建项目:Project---New uVision Project,创建一个文件夹来放工程相关的文件,给工程项目命名为my work,点击保存。
2.选择芯片类型,这里选择ATMEL------AT89C52这个芯片。
3.把C文件添加到我们的工程文件里。
4.在test.c这个文档里编辑代码。
5.编译通过之后,我们需要输出hex文件,也就是单片机可执行的
二进制文件。
6.利用STC-ISP将编写好的程序烧写进单片机中。
7.如下图连接试验相关模块连线:
→JP165跳线帽断开
→JP10连接J12
→JP5连接JP8
→J21接左边
【4】程序设计内容:
(1)开关状态的检测过程
单片机对开关状态的检测相对于单片机来说,是从单片机的P1.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1按下去,即输入低电平,相当开关闭合,当松开开关K1,即输入
高电平,相当开关打开。
(2)输出控制
如图3所示,当P1.0端口输出低电平,即P1.0=0时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出高电平,即P1.0=1时,发光二极管L1亮。
所以通过对P1.0端口的设置就可以控制灯的亮灭。
(3)延时程序的设置
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔要长一些,否则人眼根本无法识别到灯的闪烁效果。
于是我们在执行某一指令时,插入延时程序,来达到我们的增加亮灯时长的效果。
【5】实验代码:
#include<reg51.h>
#include<intrins.h>
unsigned int key;
sbit key1=P1^0;
sbit key2=P1^1;
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i- -)
{
for(j=0;j<50;j++)
{
;
}
}
}
void main()
{
unsigned char i;
P0=0x00;
if(key1==0)
{
while(key2==1)
{
P0=0x01;
delay(400);
for(i=0;i<8;i++)
{
P0<<=1;
delay(400);
if(key2==0)break;
}
}
}
if(key2==0)
{
while(key1==1)
{P0=0x80;
delay(400);
for(i=0;i<8;i++)
{
P0>>=1;
delay(400);
if(key1==0)break;
}
}
}
}
【6】实验现象:
当按下K1键,松开K2键时,流水灯向左移;当按下K2键,松开K1键时,流水灯向右移。