课程设计:矩阵键盘(c51,使用扫描法实现)

发布者:tyloo820最新更新时间:2016-09-13 来源: eefocus关键字:课程设计  矩阵键盘  c51  扫描法 手机看文章 扫描二维码
随时随地手机看文章
//可以比较一下和以前发表的一篇用反转法实现的不同(感觉一下那个更简单)

//这种方法是用只用P3口的前高四位来比较,看改变了么(由于比较仓促,没有proteus仿真,不过这是个比较经典的方法,网上有很多这个代码,源自郭天祥的视频和书籍)

#include

#define uchar unsigned char

#define uint unsigned int

 

sbit wela=P2^7;

sbit dula=P2^6;

 

uchar num,num1;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

 

void delay(uint xms)

{

       uint x,y;

       for(x=xms;x>0;x--)

              for(y=111;y>0;y--);      

}

 

void display(uchar num)

{    

       dula=1;

       P1=table[num];

       dula=0;

//     delay(10);

}

 

void matrixkeyscan()

{

       uchar temp,key;

 

       P3=0xfe; //第一行

       temp=P3;

       temp=temp&0xf0;                                                         

       if(temp!=0xf0)

       {

              delay(10);

              temp=P3;

              temp=temp&0xf0;

              if(temp!=0xf0)

              {    

                     temp=P3;

                     switch(temp)

                     {

                            case 0xee:

                                          key=0;

                                          break;

                            case 0xde:

                                          key=1;

                                          break;

                            case 0xbe:

                                          key=2;

                                          break;

                            case 0x7e:

                                          key=3;

                                          break;

                     }

                     while(temp!=0xf0)

                     {

                            temp=P3;

                            temp=temp&0xf0;

                     }

                     display(key);

              }

       }

 

       P3=0xfd; //第二行

       temp=P3;

       temp=temp&0xf0;                                                         

       if(temp!=0xf0)

       {

              delay(10);

              temp=P3;

              temp=temp&0xf0;

              if(temp!=0xf0)

              {    

                     temp=P3;

                     switch(temp)

                     {

                            case 0xed:

                                          key=4;

                                          break;

                            case 0xdd:

                                          key=5;

                                          break;

                            case 0xbd:

                                          key=6;

                                          break;

                            case 0x7d:

                                          key=7;

                                          break;

                     }

                     while(temp!=0xf0)

                     {

                            temp=P3;

                            temp=temp&0xf0;

                     }

                     display(key);

              }

       }

 

       P3=0xfb;               //第三行

       temp=P3;

       temp=temp&0xf0;                                                         

       if(temp!=0xf0)

       {

              delay(10);

              temp=P3;

              temp=temp&0xf0;

              if(temp!=0xf0)

              {    

                     temp=P3;

                     switch(temp)

                     {

                            case 0xeb:

                                          key=8;

                                          break;

                            case 0xdb:

                                          key=9;

                                          break;

                            case 0xbb:

                                          key=10;

                                          break;

                            case 0x7b:

                                          key=11;

                                          break;

                     }

                     while(temp!=0xf0)

                     {

                            temp=P3;

                            temp=temp&0xf0;

                     }

                     display(key);

              }

       }

 

       P3=0xf7;          //第四行

       temp=P3;

       temp=temp&0xf0;                                                         

       if(temp!=0xf0)

       {

              delay(10);

              temp=P3;

              temp=temp&0xf0;

              if(temp!=0xf0)

              {    

                     temp=P3;

                     switch(temp)

                     {

                            case 0xe7:

                                          key=12;

                                          break;

                            case 0xd7:

                                          key=13;

                                          break;

                            case 0xb7:

                                          key=14;

                                          break;

                            case 0x77:

                                          key=15;

                                          break;

                     }

                     while(temp!=0xf0)

                     {

                            temp=P3;

                            temp=temp&0xf0;

                     }

                     display(key);

              }

       }                  

}

 

void main()

{

       dula=0;

       wela=1;

       P1=0x00;

       wela=0;

       //dula=0;

       while(1)

       {     //dula=0;

               matrixkeyscan();

       }

}

关键字:课程设计  矩阵键盘  c51  扫描法 引用地址:课程设计:矩阵键盘(c51,使用扫描法实现)

上一篇:课程设计:电子琴(世上只有妈妈好)
下一篇:课程设计:单片机da转换

推荐阅读最新更新时间:2024-03-16 15:09

C51单片机定时器/计数器控制字设置
在使用定时/计数器之前需要先通过定时/计数器的方式控制字来设置其工作方式。 在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。 从图1中我们能看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。 从图2中我们能看出,TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(我们暂不管)。而TF1(0)我们上节课已提到了,当计数溢出后TF1(0)就由0变为
[单片机]
<font color='red'>C51</font>单片机定时器/计数器控制字设置
4*4矩阵键盘制作电路+键盘扫描89c52c程序驱动数码管
这里介绍最常用的4*4矩阵键盘,其他的更多键在此基础上拓展。 一般我们用的电路就如下,此图我随手画下,看懂意思就好了 如果你有兴趣可以按照此电路制作,下面附上焊接实物图 矩阵键盘的识别方法一般有扫描法,线反转法 扫描法: 矩阵式键盘结构:输出行线锁存器,输入列线缓冲器。 工作过程: 1.CPU先使行线P1.0为低,其余行线为高 2.CPU读入输入缓冲器的状态,以确定哪条列线为0状态,若此时P1.7为0,则 C 键按下;若P1.5为0,则 E 键按下 3.若输入缓冲器(列线)状态全部为1,说明P1.0行没有键盘按下,CPU急继续使P1.1为0,其余行线为高,再读入输入缓冲器的状态,以确定哪条列线为0
[单片机]
单片机C语言C51的程序结构
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按51单片机相应情况来定义的; (2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对51单片机特有的数据类型; (3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与51单片机的存储器紧密相关; (4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
[单片机]
基于C51单片机Pl口的矩阵式键盘控制
  矩阵式键盘又叫行列式键盘。就是用I/O口线组成行、列结构,按键设置在行列的交点上。在按键较多时多用矩阵式键盘,可以节省I/O口线。例如:占用8个I/O口线的4×4矩阵式结构可以构成16个键的键盘。当有键按下时,要逐行或逐列扫描来判断是哪个按键按下。通常的扫描方式有扫描法和反转法。   1、硬件设计      单片机的Pl口的低4位接矩阵键盘的行线,高4位接矩阵键盘的列线,如下图所示。   2.程序设计      扫描函数的返回值为按键特征码,若无键被按下,返回值为0。程序清单如下:
[单片机]
基于<font color='red'>C51</font>单片机Pl口的矩阵式键盘控制
一个stc89c52单片机下的矩阵键盘程序
下面是一个stc89c52单片机下的矩阵键盘程序,P0口接键盘,显示在P2口. #include reg52.h #define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; uchar code tab ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定义八个灯的工作状态。 uchar code wep ={0x00,0x01,0x02,0x03,0x04,0x05,0x06,
[单片机]
STM32 矩阵键盘扫描程序
#define __JUZHENJIANPAN_H extern u8 KeysCAN(void); extern void GPIO_Config(void); #endif #include stm32f10x.h #include juzhenjianpan.h #include gpiobitmap.h #define PC0 PCo_0 #define PC1 PCo_1 #define PC2 PCo_2 #define PC3 PCo_3 #define PC4 PCo_4 void GPIO_Config(void) { R CC _APB2Peri
[单片机]
C51语言使用外部存储器的方法
简介:课本上学到的外部存储器操作基本上都是用汇编语言实现的,但是在实际工作中,大都用C语言编写单片机的程序,那么对外部存储器的操作就不仅仅是给一个普通变量赋值那样子了。 简单地说,注意两个方面: 软件部分: 1.添加头文件#include 2.在需要读写的地方用XBYTE就行,具体做法如下: 比如要访问0xA0B0这个地址(读数据):变量名=XBYTE 就行 反过来要给0xA0B0这个地址赋一个值(写数据):XBYTE =变量名 硬件部分: 硬件连接,将51单片机的P2口接外部存储器的高8位,P0口接数据并通过锁存器接外部存储器的低8位,锁存器的锁存端接51单片机的ALE, 51单片机的读写端要
[单片机]
stm32学习笔记——按键(扫描
目的:利用扫描IO口的方式直接操作按键 配置文件:#include stm32f10x_gpio.h #include stm32f10x_rcc.h 寄存器、结构体定义以及库函数参看流水灯一节 程序代码分析:(代码出自FIRE) Led.c文件再次不在叙述,参看流水灯一节 重点分析key.c文件,其基本结构如下: 1、按键io口初始化,这里有两个按键key1和key2,初始化过程完全相同 void Key1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved