花了几天时间整了下单片机的键盘.我用的单片机板子是用的P2的8个IO端口对16个键达到控制的目的.
那怎样来使用8个端口控制16个键呢?其实很简单,先必须要掌握她的原理图,
附件中作者上传了一张,仅供参考.原理图看了之后,我们就可以正式开始编写程序了.
先将KEY0置低电平,其余的置高电平,当我们按下第一列的按键时,P2的高四位肯定会有所变化,而我们就是用的这种变化达到分辨不同按键的目的.同理,我们可以将KEY1置低电平,再去检测P2的高四位,也得出了第二列按的哪个键.依次类推,我们即可检测单片机的16个按键了.
下面有一个单片机键盘的完整示例程序,本程序已在89C52单片机上成功运行,产生的效果是,按下单片机上不同的键时,数码管将显示不同的值与之对应.
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda = P1^0;
sbit clk = P1^1;
sbit dig1 = P1^2;
sbit dig2 = P1^3;
sbit dig3 = P1^4;
sbit dig4 = P1^5;
uchar code table[]={0x7e,0x0c,0xb6,0x9e,
0xcc,0xda,0xfa,0x0e,
0xfe,0xde,0xef,0xf9,
0x72,0xb8,0xf2,0xe2};
uchar key = 255;
uchar diskey = 255;
void init();
void delay(uchar);
void write(uchar);
void display(uchar);
uchar scankey();
void main()
{
init();
while(1)
{
diskey = scankey();
display(diskey);
//scankey();
delay(10);
}
}
/** 键盘扫描 **/
uchar scankey()
{
uchar temp;
/* 检查第一列是否有按键按下 */
P2 = 0xfe;
temp = P2;
temp = temp&0xf0;
if(temp!=0xf0)
{
delay(5);
if(temp!=0xf0)
{
switch (temp)
{
case 0xe0 : key = 0;
break;
case 0xd0 : key = 1;
break;
case 0xb0 : key = 2;
break;
case 0x70 : key = 3;
break;
}
}
//display(key);//显示按的键
}
/* 检查第二列是否有按键按下 */
P2 = 0xfd;
temp = P2;
temp = temp&0xf0;
if(temp!=0xf0)
{
delay(5);
if(temp!=0xf0)
{
switch (temp)
{
case 0xe0 : key = 4;
break;
case 0xd0 : key = 5;
break;
case 0xb0 : key = 6;
break;
case 0x70 : key = 7;
break;
}
}
//display(key);//显示按的键
}
/* 检查第三列是否有按键按下 */
P2 = 0xfb;
temp = P2;
temp = temp&0xf0;
if(temp!=0xf0)
{
delay(5);
if(temp!=0xf0)
{
switch (temp)
{
case 0xe0 : key = 8;
break;
case 0xd0 : key = 9;
break;
case 0xb0 : key = 10;
break;
case 0x70 : key = 11;
break;
}
}
//display(key);//显示按的键
}
/* 检查第四列是否有按键按下 */
P2 = 0xf7;
temp = P2;
temp = temp&0xf0;
if(temp!=0xf0)
{
delay(5);
if(temp!=0xf0)
{
switch (temp)
{
case 0xe0 : key = 12;
break;
case 0xd0 : key = 13;
break;
case 0xb0 : key = 14;
break;
case 0x70 : key = 15;
break;
}
}
//display(key);//显示按的键
}
return key;
}
/** 显示一个3位的整数 **/
void display(uchar num)
{
uchar bai,shi,ge;
bai = num/100;
shi = num%100/10;
ge = num%10;
/* 显示个位 */
dig4 = 0;
write(table[ge]);
delay(10);
dig4 = 1;
/* 显示十位 */
dig3 = 0;
write(table[shi]);
delay(10);
dig3 = 1;
/* 显示百位 */
if(bai!=0)
{
dig2 = 0;
write(table[bai]);
delay(10);
[img]/upload/attachment/89564/a2582c87-2c23-3974-bf9c-f935ad8c6c92.bmp[/img]
[img]/upload/attachment/89564/a2582c87-2c23-3974-bf9c-f935ad8c6c92.bmp[/img]
dig2 = 1;
}
}
/** 程序初始化函数 **/
void init()
{
P2 = 0xfe;
//dig1 = 1;
//dig2 = 1;
//dig3 = 1;
//dig4 = 0;
}
/** 向数据码管写入一个字节数据 **/
void write(uchar u)
{
uchar i;
for(i=0;i<8;i++)
{
clk = 1;
sda = u&0x80;
clk = 0;
u = u<<1;
}
}
/** 延迟函数 **/
void delay(uchar t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=101;y>0;y--);
}
- 大小: 53.9 KB
分享到:
相关推荐
单片机矩阵键盘编程.ppt
根据电路原理图,键盘扫描方法是:行线P1O~P13为输出线,列线P14~P17为输入线...51单片机综合学习系统资源丰富,板内有:8位LED数码管、32路LED、4x4矩阵键盘、4个直控按键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、S
关于单片机的C语言proteus仿真程序,为键盘4*4结构
单片机键盘输入编程(C语言).
单片机矩阵键盘编程PPT学习教案.pptx
64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言实例Proteus仿真和代码)64-矩阵键盘中断扫描(51单片机C语言...
键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。键盘分两大类:编码键盘和非编码键盘。 编码键盘:由硬件逻辑电路完成必要的键识别工作与可靠性措施。每按一次键,键盘自动提供被...
轻松掌握51单片机基本编程 第一章 AT89S51单片机实验及实践系统板简介 第二章 Keil C软件使用 第三章 AT89S51单片机下载器软件使用 第四章 实验及实践课题 1.闪烁灯 2.模拟开关灯 3.多路开关状态指示 4.广告灯的左移...
单片机的按键输入一般可分为简单的独立式按键输入及行列式键盘输入两种,本文主要介绍单片机键盘输入编程。希望对你的学习能有帮助。
单片机矩阵键盘的编程.doc
* 单片机广泛应用于各种领域,如军事、自动控制、PC 机上的键盘等。 知识点2:8051 单片机概述 * 8051 单片机基于简化的嵌入式控制系统结构,被广泛应用于各种应用系统上。 * 8051 单片机由 Intel、Philips、...
第一章 AT89S51单片机实验及实践系统板简介┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅1 第二章 Keil C软件使用┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅14 第三章 AT89S51单片机下载器软件使用┅┅┅┅┅┅┅┅┅┅...
单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+Proteus仿真)单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+Proteus仿真)单片机C语言程序设计4×4键盘矩阵控制条形LED显示(基于8051+...
单片机开发资料及题目 单片机控制的矩阵键盘扫描程序集
在本文中,小编将对pic单片机的4×4行列式键盘的工作原理加以介绍,以帮助大家增进对pic单片机键盘系统的了解,方便后期编程使用。(1)单片机系统键盘原理行列式键盘的接法比独立式键盘的接法复杂,编程实现上也会...
4x4矩阵键盘和单片机,显示器的接口电路图,编程等51串行编程器可以很好的支持ATMEL公司89系列单片机机,包括89C51/52/55,89S51/S52/S55和89C2051/4051等17种常用的单片机。对于学习51单片机和业余开发是完全够用的...
多个单片机C语言编程C实例,包含020-DS18B20+数码管显示 050-PS2键盘+数码管显示 054-步进电机转动 059-LCD12864指针时钟 074-彩屏显示汉字-1
单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+Proteus仿真)单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+Proteus仿真)单片机C语言程序设计数码管显示4×4键盘矩阵按键(基于8051+...
1. 行列式键盘接口的编程方法,用89C51单片机的P1口作为4X4行列式键盘的行列口,完成四位扫描、四位读数,并将键号(非键值)放入指定的缓冲区域内(内存区域)。 2. 在数码管上显示学号字样; 3.利用8255板和键盘板...
用at89s52做的小小计算器,由4*4键盘输入,lcd1602输出,很好用哦,还有声音控制。c语言编的程序,