51单片机矩阵键盘响应程序
#include
// P0端口接LED
// P0端口接数码管
// P3端口接矩阵键盘
#define LED P0
#define KEY P3
#define DIG P0
unsigned char GetKey(void);
void delay10ms(void);
// 独立数码管的段码表
unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void main(void)
{
unsigned char key = 0;
while (1)
{
key = GetKey();
if (key != 0)
{
DIG = val[key];
}
}
}
unsigned char GetKey(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f; // 从IO口输出,写IO口
if (KEY != 0x0f)// 从IO口输入,读IO口
{
// 读出的不是0x0f说明有按键被按下
// 第1回合第2步:读出端口从读出值来判断是哪一行
delay10ms();
// 第一回合中算出行号
switch (KEY)
{
case 0x0e:hang = 1;break;
case 0x0d: hang = 2; break;
case 0x0b: hang = 3; break;
case 0x07: hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
switch (KEY)
{
case 0xe0:lie = 1;break;
case 0xd0: lie = 2; break;
case 0xb0: lie = 3; break;
case 0x70: lie = 4; break;
default: break;
}
// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
void delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=5;c>0;c--)
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}
关键字:51单片机 矩阵键盘 响应程序
引用地址:
51单片机矩阵键盘响应程序
推荐阅读最新更新时间:2024-03-16 16:06
51单片机水塔原理图与源程序
单片机源程序如下: #include reg52.h //定义一个数组,使数码管显示的数字和数组元素的下标相等 unsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; sbit shuiman=P1^0;//水满 sbit sw5=P1^1;//水位5 sbit sw4=P1^2;//水位4 sbit sw3=P1^3;//水位3 sbit sw2=P1^4;//水位2 sbit sw1=P1^5;//水位1 sbit shougong=P1^6;//手工上水 sbit dianji=P1^7;//
[单片机]
一个流水灯的小程序
很久没有写51单片机程序了,写个小程序练练手 #include //包含头文件 #include #define uchar unsigned char uchar temp; void delayms(int ms); void main() { temp=0x01; P1=temp; //点亮第一个灯 while(1) { temp=_crol_(temp,1); delayms(600); P1=temp; } } void delayms(int ms) { int i,j; for(i=0;i for(j=0;j 120;j++); }
[单片机]
第三节 趣讲51单片机之P1P2P3口深入讲解
一、P1口 P1口是4组Parallel Ports中最简单的。其结构图如下: 与P0口的区别是:由于没有端口复用功能,所以,P0口的V1变成了一个上拉电阻。 由于内部就有上拉电阻,所以,作为GPIO时,P1口不需要接上拉电阻,当然,您接了也没关系啦,就相当于两个上拉电阻并联嘛。 读端口、读引脚、写功能在P0中已经讲得非常详细了,此处略个一万字。 二、P2口 P2口的原理图如下图: 咋一看,和P0口有点像,都有控制信号,选择作为 地址/数据 总线还是作为GPIO;又和P0口有些不同,P2口没有推挽式输出的结构,即没有V1 MOS管。 我们说过,P0在作为 地址/数据 总线时
[单片机]
8051单片机教程第二课:单片机的内部、外部结构(一)
一、单片机的外部结构 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极
[单片机]
51单片机之LED流水灯
数据类型 在写流水灯程序之前,我们了解一下数据类型。 使用对应数据时,应该注意溢出问题,若溢出编译器也有可能编译通过,但是执行结果是错误的。 流水灯 操作LED前必须先了解LED是什么电平点亮,LED连接在什么引脚上,通常需要查找原理图。此处我的8个LED连接在P2口,为低电平点亮(因为灌电流比拉电流能力强)。 1、函数式循环流水灯: #include reg52.h #include intrins.h //函数头文件 #define led P2 //对整个LED的P2端口进行定义 /* 延时函数 */ void delay(unsigned int del) //10ms * del { uns
[单片机]
基于51单片机的智能小车系统设计
原理图: 程序运行图: 部分程序: /******************************************************************************* * 文件名称:main.c * 说明:本文件为小车控制的主函数 * 功能:1.看门狗定时器初始化 2.调用函数,进行小车直流电机的开环控制 *******************************************************************************/ #include AT89X52.h #include kongzhi.h /********************
[单片机]
学习笔记之-51单片机串口通信
1.原理 8051系列单片机有通用异步收发器(UART,universal Asynchronous Receiver/Transimitter)用于串口通信,发送时数据由TXD引脚引出,接收时数据从RXD引脚输入,有两个缓存器(Serial Buffer),一个作为发送缓存器,另一个作为接收缓存器。它们占用同一地址99H 。UART是可编程的全双工的串行口,短距离的机间通信可以使用UART的TTL电平,使用驱动芯片(MAX232)可以与通用微机进行通信。更多通信的知识可以看我的串口通信。 1.1 51单片机串行口的结构 : 1.2 51单片机串行口的控制寄存器 : 51单片机串口通信,重点就SCON,PCON,
[单片机]
以80C51单片机为例讲述单片机如何运行
前言 要想理解单片机是如何运行程序的,首先需要了解单片机的组成。本文以80C51单片机为例,给大家讲一讲程序在单片机中是如何运行的。 单片机的组成 8051单片机的内部硬件结构包括: 中央处理器CPU:它是单片机内部的核心部件,决定了单片机的主要功能特性,由运算器和控制器两大部分组成。 存储器:8051单片机在系统结构上采用了哈佛型,将程序和数据分别存放在两个存储器内,一个称为程序存储器,另一个为数据存储器在物理结构上分程序存储器和数据存储器,有四个物理上相互独立的存储空间,即片内ROM和片外ROM,片内RAM和片外RAM。 定时器/计数器(T/C):8051单片机内有两个16位的定时器/计数器,每个T/C既可以设置成计数方式
[单片机]