`
yunchow
  • 浏览: 324464 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

单片机 键盘编程

阅读更多
   花了几天时间整了下单片机的键盘.我用的单片机板子是用的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
1
0
分享到:
评论

相关推荐

    单片机键盘扫描实验

    ### 单片机键盘扫描实验知识点 #### 一、单片机并行口的理解与应用 **并行口概述:** 单片机的并行口是实现外部设备接口的重要手段之一,通过这些并行口可以方便地控制各种外设如LED、键盘等。通常情况下,单片机...

    单片机的C语言键盘编程

    单片机的C语言键盘编程是嵌入式系统开发中的基础技能之一,尤其在设计交互式设备时,键盘作为输入设备起着至关重要的作用。在这个主题中,我们主要讨论4*4键盘结构的C语言编程,以及如何在Proteus仿真环境中实现这一...

    MCS-51单片机C语言编程100例.rar

    《MCS-51单片机C语言编程100例》是一份专注于STC单片机编程的实践教程,其核心是通过100个实际的C语言编程实例,帮助学习者掌握MCS-51系列单片机的使用技巧和应用方法。这份资源特别强调了STC15F2K60S2型号的单片机...

    51单片机键盘显示系统设计程序

    本文将深入探讨“51单片机键盘显示系统设计程序”的相关知识点,帮助你理解如何构建这样的系统。 1. **51单片机基础**:51单片机是Intel公司开发的8051系列微控制器,具有8位CPU、4KB的ROM、128B的RAM以及一系列的I...

    单片机矩阵键盘编程.ppt

    "单片机矩阵键盘编程" 在单片机系统中,键盘是一种常用的输入设备,它是由多个按键组成的。键盘可以分为独立式键盘和矩阵式键盘两种。独立式键盘的工作过程与矩阵式键盘类似,但硬件结构和软件设计都比较简单。矩阵...

    单片机键盘电路的优化

    单片机键盘电路的优化是IT领域中一个重要的技术议题,尤其对于嵌入式系统设计者而言,如何在有限的I/O资源下实现更多功能,是他们不断探索的方向。本文聚焦于一种创新的键盘电路设计思路——准矩阵式组合键盘,通过...

    基于 单片机 鼠标键盘 (合集)

    7. **中断编程**:在单片机中,中断是处理外部事件的重要机制,如键盘按键按下或鼠标移动,都需要通过中断服务程序来响应。 8. **实时操作系统(RTOS)概念**:虽然51单片机可能不涉及复杂的RTOS,但了解其基本概念...

    单片机C语言编程与实例

    5. **外设驱动开发**:通过对常见外设(如LCD显示屏、键盘矩阵等)的驱动程序设计,加深对单片机与外设交互的理解。 通过上述内容的学习,读者不仅能够掌握单片机C语言编程的基础知识,还能够在实践中不断提高自己...

    51单片机C语言编程入门(详讲版).

    本书不仅涵盖了单片机C语言编程的基础知识,还深入探讨了高级应用,如扫描式键盘的实现、EEPROM芯片AT93C46的读写操作、Keil C的高级使用技巧等。此外,还特别关注了编写高质量单片机C程序的技巧,包括文件结构、...

    单片机键盘显示器接口.ppt

    单片机键盘和显示器接口是单片机系统中不可或缺的部分,它们使得用户能够与设备进行交互。在PC机中,主机通常需要与键盘、显示器等外部设备连接,而在单片机系统中,同样需要类似的接口来实现输入和输出功能。 键盘...

    单片机矩阵键盘编程PPT学习教案.pptx

    单片机矩阵键盘编程是单片机应用中常见的输入设备控制技术。在单片机系统中,键盘分为编码键盘和非编码键盘。编码键盘通过硬件电路直接产生按键对应的键码和选通脉冲,适用于简单易用但硬件复杂的场景,而单片机通常...

    单片机中键盘、点阵、LCD实验 单片机实验 单片机

    在单片机编程中,键盘、点阵和LCD(液晶显示屏)是常见的接口设备,用于实现人机交互和数据展示。下面将详细讲解这三个模块在单片机实验中的应用及其实现方法。 首先,键盘是单片机系统中最基本的输入设备。在...

    用单片机c语言编程的计算器

    【标题】:“用单片机C语言编程的计算器” 在这个项目中,我们关注的是如何使用C语言在AT89S52单片机上实现一个简单的计算器。AT89S52是一种广泛应用的8位微控制器,具有丰富的内置资源,如8KB的闪存、256字节RAM和...

    单片机键盘输入的程序代码

    单片机键盘输入是单片机系统中常见的人机交互方式,主要用于获取用户操作指令或数据。本程序代码着重展示了如何实现单片机通过键盘接收输入,并在单片机的数码管上显示所按下的键值。以下是相关知识点的详细说明: ...

    单片机_键盘操作完整项目(包括RS232串口通信)_C语言版

    本项目“单片机_键盘操作完整项目(包括RS232串口通信)_C语言版”旨在通过C语言编程实现单片机的键盘输入与RS232串口通信功能。下面将详细探讨这两个核心知识点。 首先,我们来看键盘操作部分。在单片机系统中,...

    51单片机C语言编程100例_51单片机、C语言编程_

    6. **并行I/O接口**:51单片机的P0-P3口提供了丰富的并行I/O接口,可用于控制LED、LCD显示、键盘输入等。通过C语言编程,可以实现对这些端口的读写操作。 7. **A/D转换与D/A转换**:在模拟信号与数字信号之间转换时...

    单片机键盘扫描C语言程序

    在探讨“单片机键盘扫描C语言程序”的知识点时,我们首先需要理解单片机、键盘扫描以及C语言编程的基本概念及其在实际应用中的结合。根据给定的文件信息,我们将深入解析标题、描述和部分代码片段所涉及的核心知识点...

    单片机键盘算法(C语言)

    总的来说,单片机键盘算法在C语言中的实现涉及到硬件接口编程、中断服务、消抖处理、多键冲突解决等多个方面。理解和掌握这些知识点,能帮助我们更好地设计和实现单片机键盘控制系统,提升产品的功能和性能。

    单片机键盘控制程序

    单片机键盘控制程序是电子工程领域中一个基础但至关重要的环节,特别是在嵌入式系统设计中。这个程序主要是用C语言编写的,专为飞思卡尔(现为NXP半导体的一部分)的微控制器设计。飞思卡尔是一家知名的半导体公司,...

Global site tag (gtag.js) - Google Analytics