| m6米乐app官网下载网页版|M6米乐手机登录APP入口 招聘信息 | ENGLISH | 样品申请 | 总机 : +86-0755-8367 6208
 
 
 

   
· m6米乐网页版入口 ·

单片机

多片机

m6米乐app官网下载
 
m6米乐网页版入口
m6米乐app官网下载【51单片机】矩阵键盘线反转法实验仿真
发布日期:2024-04-30 18:45:00

  在上篇文章【51单片机】〈C语言+Keil5+Proteus仿真〉矩阵键盘逐行扫描法-20210414中,提到了矩阵键盘的线反转法,但是在仿真上出现了一些问题,导致没能做出来。当时都已经开始怀疑自己,课本上的虽然是汇编写的代码段,但是我用C来实现居然会出错,不禁让我陷入沉思……后来经过不断地控制变量反复实验,终于我发现,这是仿真软件的问题,与我无瓜。

  主要体现在逐行扫描法可以完美运行,一换到线反转法就出错。所以这篇文章主要用于记录矩阵键盘线反转法的仿真实现。

  由于目前学校的实验课程尚未开始,即使实验课程开始我也不会用实验室的器材来记录,所以CSDN上的学习记录必将长期或绝大部分用软件仿真来实现。其实不论是仿真还是实际操作,其原理和目的都是一样的。

  这是一个常用的仿真软件,具体操作在这篇讲矩阵键盘的逐行扫描法中写到过,可以作为参考。其实,Proteus也可以写程序,但是同样需要先下载安装有Keil才能使用C语言写,否则只能是汇编语言。汇编语言程序我也能写,但是现在还是更倾向于用C。

  这是一个比较常用的单片机程序的编译软件,支持C、汇编以及其他语言的文件,软件界面类似VC++6.0。使用中的注意事项有:

  不能很好地支持中文!!!连中文的注释都有可能乱码,文件名也最好发放弃中文命名的习惯,软件有可能找不到中文命名的源文件地址!导致编译失败等等问题。(估计是只有我才有这样的习惯吧……)

  一定要记得在“option of target”的“output”中勾选创建.hex文件,并且要记得创建的位置。

  一开始,我以为可以按照逐行扫描法时一样的电路进行操作。所以选择的硬件都没变:Keypad-Smallcalc(键盘),80C51(芯片),Respack(排阻),Led-Bargraph-GRN(Led)以及电源端和接地端。所用到的原件如图:

  每次看着整整齐齐的线路图,倒还挺舒服的。是不是连线也相当简单?因为挂载的设备少,而且功能也比较简单,所以我们就不用扩展接口芯片了,直接用8051的P1口连接就按盘,P0口连接Led即可。

  在电路的基础上,我还是想实现一个计算器的基本功能。上次用逐行扫描法做的计算器只能计算两个数的计算,现在至少得进步一下才能看到新东西。所以这次琢磨中,实现了连续运算的功能。

  先行输低电平,列方向读入列值。当没有键按下时,列值应该为高电平,即FH。若有键按下,则列值不全为高电平。如行方向输入低电平0000B,若读入列值为1111B则表示没有键被按下,若为0111B则表示第一列右键按下。

  去抖动。去抖动是因为按键在电平变化是会出现尖峰抖动,影响程序判定按下的次数。所以需要对这段尖峰进行处理。常见的方法有硬件除抖动和软件除抖动。软件除抖动最简单的办法就是==“不能解决它就不要面对它”==。所以我们在程序中加入延时程序,忽略这段抖动就可以了。

  再读一次列值,若为列值不全为高电平则表示的确有键按下。然后就是键盘分析程序。一种是逐行扫描法,另一种是线反转法。

  逐行扫描法:既然我知道了有键按下,那我就逐行送入低电平,读列值。若这一列输入低电平,而列值全为高电平,则被按下的键不在这一行。换下一行。若列值有低电平,则保存此时的行值和列值。进行其他计算得到键码。

  线反转法:测试时读入的列值不全为高电平,则保存列值。然后行列的电平反转,即列输出低电平,读行值。这时得到一个行值和一个列值,两个数即代表了一个键的键码。

  temp = (P1//把行值(第四位)和列值(高四位)位或得到唯一指向按键的键码

  我发现按下不同的键,Led显示的键码低4为永远是全1。于是我又把行列的顺序换了再进行测试。即列先给低电平,读行值,有键按下再行给低电平读列值。

  temp = (P1//把行值(第四位)和列值(高四位)位或得到唯一指向按键的键码

  变成高4位全为高电平,低4位显示正确的情形。由此判断它只是有第一次读P1口的值有效,而第二次出错。于是这个问题纠结了我好几天。最终我发现了这个keypad-smallcalc 键盘有问题。

  后来通过不断尝试,想找出代码的问题,但是按照课本的汇编来说,这个逻辑并没有问题。于是我用button做了一个矩键盘,就没有问题了。

  用button做的键盘有一种原始的感觉,毕竟没有封装到一起。所以它是这样的。在这里插入图片描述

  由此可见,Led高4位显示的是列值,低4位显示行值,也就是说线反转法的额程序没有问题,是可以实现的。

  case 0xE7:saveop(+);break;//按下运算符键,可以对前面输入的两个数进行计算,并把新的运算符保存起来。进而可以进行连续运算。

  void output(){//输出的函数。即显示和等于的功能不同。按下等于之后实际上是要把num清零的,防止num的值影响后面的输入。而show函数不用,只是显示当前的值。

  但这就完成了。这次的功能实现是连续运算。比如12+13==>

  25-10==>

  15*2==>

  =30这样的操作。

  这次的核心是把线反转法实现,附加的实现了连续运算。也算是上次的后续吧。但是我还想再把七段数码管加进来显示,让I/O更人性化。毕竟看二进制还要转换,不如用十进制,我们熟悉的方式显示。后面几天我也会再学习学习七段数码管的使用,争取早点把这个计算器完善。

  下一篇:【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤

  普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机:Vofa+ 1.3.10 源于软件模拟SPI接口程序代码(4种模式)—— 内陆的咸水鱼,有改动。 硬知识 SPI协议简介 SPI的通信原理很简单,一般主从方式工作,这种模式通常有一个主设备和一个或多个从设备,通常采用的是4根线,它们是MISO(数据输入,针对主机来说)、MOSI(数据输出,针对主机来说)、SCLK(时钟,主机产生)、CS/SS(片选,一般由主机发送或者直接使能,通常为低电平有效) SPI接口介绍 SCK:时

  快速入门指南】5:软件SPI /

  矩阵按键貌似是学51单片机里面必备的一课,现在基本所有的51开发板都带这部分电路。因为它用8个IO口实现了16个按键的扫描检测,实现了IO口更充分的利用。 扫描矩阵按键的程序说简单也简单,说复杂也复杂。说它简单,是因为现在网络太发达了,随便搜索一下,都能找到可以直接用的源码。说它复杂,是因为如果不借助网络,全凭自己去摸索,确实要花一部分时间。 我当时是性子比较倔,只在网上看了矩阵按键的原理,没有看参考代码,完全凭借自己的理解,写了一段矩阵按键的扫描程序,花了三天时间才调试通。那三天,真的是折腾的死去活来,但是当程序调好的时候,真的感觉自己还是很拉风的。 这里,不是让大家学我那样去闭门造车,因为太

  一、前言 今天给大家推荐一个51单片机小实验,带你使用51单片机做一款简易的电子时钟,其中计时模块采用DS1302硬件模块,显示采用LCD显示屏,具体怎么实现开来一起看看吧! 二、DS1302模块介绍 DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟和31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟、日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年自动补偿等多种功能。时钟操作可通过 AM/PM 指示,DS1302 与单片机之间能简单地采用同步串行的方式进行通信,简易三线SPI通信模式: RES 复位 I/O 数据线 SCLK 串行时钟 SPI

  和DS1302时钟芯片做一个简易的电子时钟 /

  将片内30H~40H及片外0010H~0100H清零,然后将片内41H~47H的内容移到片外0041H~0047H,判断 1、若(0041H) 15,则求平方存放到0050H中,并将位00H置1 2、若(0041H)=15,则加15存放到0050H中,并将位01H置1 3、若(0041H) 15,则减15存放到0050H中,并将位02H置1 汇编程序: ORG 0000H;设置初始地址 MOV R0,#30H;对片内30H~40H清零 MOV R1,#11H CLR A CON1:MOV @R0,A INC R0 DJNZ R1,CON1 MOV

  AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。 图中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,

  对步进电机驱动器系统的设计 /

  这是一个基于单片机WIFI多路遥控开关设计,里面有文档,程序,图片等资料 制作出来的实物图如下: 电路原理图如下: Wifi开关元件清单 1) 9*15万用板 2) STC89C52单片机 3) 40脚IC座 4) 11.0592MHz晶振 5) 30pF瓷片电容*2 6) 10uF电解电容 7) ESP8266模块 8) 2*4P排母 9) 2P排母*2 10) 3.3V稳压模块 11) 2P接线(红、绿、蓝) 14) 8550三极管*3 15) 按键 16) 1k电阻*6 17) 10k电阻 18) 自锁开关 19) DC电

  WIFI控制多路遥控开关程序设计 /

  一、P0口特性: P0口为三态双向I/O口。对于内部有程序存贮器的单片机基本系统(如定制的8051),P0口可以作为输入/输出口使用,直接连外部的输入/输出设备;也可以作为系统扩展的地址/数据总线口。对于内部没有程序存贮器的单片机(如8031),P0口只能作为地址/数据总线口的输出驱动器中也有一个多路电子开关。输出驱动器转接至口锁动器的Q端时,P0口作为双向I/O口使用。 这时,CPU发来的控制信号为低电平,使输出驱动电路的上拉场效应管T1截止。P0口的锁存器为“1”时,输出驱动器中的两个场效应管均截止,引脚浮空;由于P0口输出电路是漏极开路的电路,必须外接10kΩ拉高电阻才能有高电平输出。而写入“0”时,下

  P0口的特性及使用方法解析 /

  本设计旨在使用 中断 0(INT0)的方式,完成2种样式的LED显示的设计。 操作方法:开始仿线样式,等一段时。


m6米乐app官网下载 上一篇:51单片机学习笔记之基础部分 下一篇:干货 八大主流单片机优缺点分析看看你用过哪一款
 
 
打印本页 || 关闭窗口

 



M6米乐手机登录APP入口 新闻资讯 产品中心 m6米乐网页版入口 m6米乐网页版入口>>
公司新闻
行业动态
单片机
多片机
地址:广东省深圳市福田区福虹路9号世界贸易广场A座1503室
电话:+86-0755-8367 6208 (总机)
           803/805/807/808/819 (分机)
传真:+86-0755-8375 7049
网站:http://m.bookoes.com
m6米乐app官网下载网页版|M6米乐手机登录APP入口 © 2000-2020 版权所有 m6米乐网页版入口 电话:0755-8367 6208
Copyright 2000-2020 m6米乐app官网下载网页版|M6米乐手机登录APP入口.,LTD All Right Reserved.