#include <reg52.h>
#include "./delay/delay.h"
#define KEYPORT P1
#define SEGPORT P0
sbit bit_select = P2^0;
sbit seg_select = P2^1;
unsigned char segdata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char TempData[2];
void display()
{
static unsigned char i = 0;
SEGPORT = 0x0;
seg_select = 1;
seg_select = 0;
SEGPORT = 0xff;
bit_select = 1;
bit_select = 0; //消重影
SEGPORT = TempData[i];
seg_select = 1;
seg_select = 0;
SEGPORT = bitdata[i];
bit_select = 1;
bit_select = 0;
i++;
if(2 == i)
{
i = 0;
}
}
void timer0_isr(void) interrupt 1
{
TH0 = (65536 - 2000) / 256;
TL0 = (65536 - 2000) % 256;
display();
}
void timer0_init(void)
{
EA = 1;
TH0 = (65536 - 2000) / 256;
TL0 = (65536 - 2000) % 256;
TL0 = 0xD8;
ET0 = 1;
TR0 = 1;
}
unsigned char key_scan(void) //获取矩阵键盘的物理键值
{
unsigned char keyvalue;
KEYPORT = 0xf0;
if(0xf0 != KEYPORT) //有按键按下
{
delay_ms(10);
if(0xf0 != KEYPORT) //确实有按键按下
{
KEYPORT = 0xfe;
if(0xfe != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0;
keyvalue += 0x0e; //过滤干扰
while(0xfe != KEYPORT);//有按键抬起
delay_ms(10);
while(0xfe != KEYPORT);//确实有按键抬起
return keyvalue;
}
KEYPORT = 0xfd;
if(0xfd != KEYPORT)
{
}
KEYPORT = 0xfb;
if(0xfb != KEYPORT)
{
}
KEYPORT = 0xf7;
if(0xf7 != KEYPORT)
{
}
}
}
return 0xff;
}
unsigned char key_pro() //获取逻辑键值
{
unsigned char keynum;
keynum = key_scan();
switch(keynum)
{
case 0x7e:return 0;break;
case 0xbe:return 1;break;
case 0xde:return 2;break;
case 0xee:return 3;break;
default:return 0xff;break;
}
}
void main()
{
unsigned char key;
timer0_init();
while(1)
{
key = key_pro();
if(0xff != key)
{
TempData[0] = segdata[key / 16];
TempData[1] = segdata[key % 16];
}
}
}
相关推荐
51单片机之矩阵键盘
矩阵键盘
protues仿真键盘控制灯点亮
74LS373是一种带三态门的8D锁存器,当CLR为高电平且CLK端电平正跳变时,D0------D7端数据被锁存到8D触发器中,74LS244常用作三态数据缓冲器,OE有效时传送,OE无效时为高阻状态,P1口为独立式键盘的输入,P3口接8个发光二极管,按每个按钮对应的二极管亮。
使用51单片机的矩阵键盘和LCD1602做一个密码锁
使用51单片机与LCD1602模块做了一个密码锁。
基于51单片机的多音阶电子琴proteus仿真程序原理设计
硬件设计 仿真图1: 总共二十几个按键,高中低音阶,同时可以播放歌曲,开机可设置显示学号 仿真图2: 7个音符按键,切换高中低音阶,同时可以播放歌曲 程序设计 #include<reg52.h> #define keyport P1 #define uchar unsigned char #define uint unsigned int uchar high,low; //定时器预装值的高8位和低8位 sbit speak=P3^0; sbit gao=P3^5; sbit di=P
单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序详解
51单片机矩阵键盘扫描程序详解#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换#define KeyPort P1sbit LATCH1=P2^2;//定义锁存使能端口 段锁存sbit LATCH2=P2^3;// 位锁存unsi...
步进电机综合控制
#include #define KeyPort P3 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[10]={0x3f,0x06
【51单片机】矩阵键盘
数码管扫描(输出扫描) 原理:显示第1位→显示第2位→显示第3位→……,然后快速循环这个过程,最终实现所有数码管同时显示的效果。因为它的扫描速度是非常快的,根据人的肉眼现象,你所看到的扫描都是同时进行显示的。这就是少量 IO 口,连接到矩阵减少 IO 口的一个目的。 矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。原理:跟数码管是极其相像的,扫描的过程其实是由电脑的显卡来进行扫描的这个是一
51单片机实现矩阵键盘密码锁
在51单片机上,使用矩阵键盘与led1602显示屏实现密码锁
51单片机(六)矩阵键盘和矩阵键盘密码锁
相较于独立按键,矩阵键盘可以减少i/o口的占用。独立按键是每个按键都占用一个i/o口;而矩阵键盘是利用四行四列达到16个键盘占用8个i/o口的目的;减少了i/o口的占用。有点类似于利用坐标系,用行号和列号来定位具体的键盘。即采用逐行或逐列的“扫描”,就可以独处任何位置按键的状态。什么是扫描呢?
51单片机——矩阵键盘扫描(矩阵键盘1602显示及密码锁)
可以看到矩阵键盘是4*4的一个结构,而独立按键是2*4的结构从原理图可以看到,二者按键数量虽然不同,但I/O口数量均为8个,这也就是矩阵键盘的优势所在,大大减少了外设对I/O口的使用;独立按键:4个按键为一小组,一端接GND(低电平),另外一端连接4个I/O口,也就是说,通过给予I/O口高低电平进行按键的扫描矩阵键盘:低四位(接口1234)控制行,高四位(5678)控制列,也就是说整个按键就是一个坐标图,通过(行,列)/(列,行)坐标来进行扫描,从而判断哪个按键被按下。
51单片机之矩阵键盘的使用
首先据我个人理解,矩阵键盘其实和独立按键具有相似之处,独立按键把按键的公共端接在了GND上,另一端接在了IO口上,而矩阵键盘则是把一行的四个单独拿出去就是和独立按键差不多了。
用51单片机矩阵键盘控制数码管显示数字
用51单片机矩阵键盘控制数码管显示数字 #include<reg51.h>//头文件 #define keys P1//宏定义矩阵键盘 #define smg P0//宏定义数码管 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x
proteus进行51单片机矩阵键盘仿真实验
本文通过在proteus上搭建51单片机的矩阵键盘电路并联合keil编程软件编写的源程序进行8*8矩阵键盘仿真,进而熟悉proteus仿真软件的仿真操作。 目录(一)4×4矩阵键盘原理1.逐行扫描2.行列扫描(二)8×8矩阵键盘设计1.proteus电路图设计2.程序设计3.矩阵键盘仿真效果(三)总结 (一)4×4矩阵键盘原理 1.逐行扫描 通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下;然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 2.
【51单片机入门】矩阵键盘
在嵌入式系统设计中,键盘输入是一种常见的人机交互方式。其中,矩阵键盘因其简单、方便和易于扩展的特性,被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的设计,包括硬件连接、键盘扫描算法以及按键处理等内容。希望通过本文的学习,读者能够掌握矩阵键盘的基本原理和设计方法,为自己的项目提供强大的输入功能。矩阵键盘是一种常见的输入设备,它由多个按键组成,通常是以矩阵的形式排列。每个按键都有一个唯一的行和列位置,通过检测行和列的电平变化来确定按下的是哪个按键。
51单片机矩阵键盘响应程序
51单片机矩阵键盘响应程序 #include // P0端口接LED // P0端口接数码管 // P3端口接矩阵键盘 #define LED P0 #define KEY P3 #define DIG P0 unsigned char GetKey(void); void delay10ms(void); // 独立数码管的段码表 unsigned char
51单片机——矩阵键盘+动态数码管
基于protues8,13,搭建51单片机最小系统连接4*4矩阵键盘(P3)和两位数码管(段选P0、位选P20\P21) 功能要求;两位数码管显示00~15,00~15与矩阵键盘对应,上电后数码管不显示,按下按键后显示对应的数字。
06 51单片机之矩阵键盘
06 51单片机之矩阵键盘
51单片机矩阵键盘程序
#include<reg52.h> typedef unsigned char uchar; typedef unsigned int uint; sbit a=P1^0; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; ...
1646




被折叠的 条评论
为什么被折叠?



