矩阵键盘的51程序

发布者:古宝奇缘最新更新时间:2016-10-30 来源: eefocus关键字:矩阵键盘  51程序 手机看文章 扫描二维码
随时随地手机看文章
//  P1口扩展4*4矩阵键盘,P1.7-P1.4作为行线,P1.3-P1.0作为列线。

//  数码管显示按键值,P0提供段码,P2.7-2.5通过74ls138,作为位码,片选数码管。

#include
void leddisplay();       // 数码管显示
unsigned char keyscan(); //键盘扫描
unsigned char keyin();   //按键值读取
void delayms(unsigned int k);
unsigned char data ledxs[8]={16,16,16,16,16,16,0,0}; // 数码管显示缓冲区
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,0xff};
                          //共阴极代码 0-F,  全灭,全亮
void main()
{
   unsigned char i,keyword;
   delayms(200);
   while(1)
   {
     
       for(i=0;i<38;i++)   // 按下一个按键300ms后再响应下一个,不检测按键弹起  
       {
         ledxs[6]=keyword/10;
         ledxs[7]=keyword%10;
         leddisplay();        
       }  
       i=keyin();                        
       switch(i)
       {
          //case 0x0f: keyword=0;break;
          case 0x77: keyword=6;break;
          case 0x7b: keyword=7;break;
          case 0x7d: keyword=8;break;
          case 0x7e: keyword=9;break;
          case 0xb7: keyword=10;break;
          case 0xbb: keyword=11;break;
          case 0xbd: keyword=12;break;
          case 0xbe: keyword=13;break;
          case 0xd7: keyword=14;break;
          case 0xdb: keyword=15;break;
          case 0xdd: keyword=16;break;
          case 0xde: keyword=17;break;
          case 0xe7: keyword=18;break;
          case 0xeb: keyword=19;break;
          case 0xed: keyword=20;break;
          case 0xee: keyword=21;break;
          default:break;
       }
   }
}
unsigned char keyin()     //读取按键值
{
  unsigned char i;
  do
  {
    i=keyscan();         // 读取键值
    leddisplay();        // 8ms 去抖
  }
  while(i!=keyscan());   // 无键按下继续扫描
  return i;              // 有键按下返回键值
}
unsigned char keyscan()  //按键检测
{
  unsigned char i=0x0f,d;
  P1=0xff;
   
  P1=0x7f;       // 扫描第1行
  i=P1&0x0f;     // 读取列值
  d=i|0x70;      // 高4位为行号,低4位为列号
  if(i!=0x0f)
     return d;    // 返回键值

  P1=0xbf;       // 扫描第2行
  i=P1&0x0f;
  d=i|0xb0;
  if(i!=0x0f)
     return d;

  P1=0xdf;      // 扫描第3行
  i=P1&0x0f;
  d=i|0xd0;
  if(i!=0x0f)
     return d;

  P1=0xef;      // 扫描第4行
  i=P1&0x0f;
  d=i|0xe0;
  if(i!=0x0f)
     return d;

  return i;    //无键按下,返回0x0f

}
void leddisplay()
{
  P2=0xdf;
  P0=tab[ledxs[0]];
  delayms(1);
  P0=0x00;

  P2=0x5f;
  P0=tab[ledxs[1]];
  delayms(1);
  P0=0x00;

  P2=0x9f;
  P0=tab[ledxs[2]];
  delayms(1);
  P0=0x00;

  P2=0x1f;
  P0=tab[ledxs[3]];
  delayms(1);
  P0=0x00;

  P2=0xff;
  P0=tab[ledxs[4]];
  delayms(1);
  P0=0x00;

  P2=0x7f;
  P0=tab[ledxs[5]];
  delayms(1);
  P0=0x00;

  P2=0xbf;
  P0=tab[ledxs[6]];
  delayms(1);
  P0=0x00;

  P2=0x3f;
  P0=tab[ledxs[7]];
  delayms(1);
  P0=0x00;
}
void delayms(unsigned int k)  //延时 n ms
{
  while(k)
  {
  int i;
  i=110;
  while(i--);
  k=k-1;
  }
}

关键字:矩阵键盘  51程序 引用地址:矩阵键盘的51程序

上一篇:51单片机串口发送和中断接收程序
下一篇:PCF8563的51程序

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

51单片机OLED+dht11显示温度的源程序
入门51单片机一个多月,参加一个比赛熬夜写出了OLED+DHT11程序。 单片机源程序如下: #include REG51.h #include oled.h #include intrins.h typedef unsigned char BYTE; typedef unsigned int WORD; #define uint unsigned int #define uchar unsigned char sbit io=P1^2;//dht11data端接单片机的P1^0口// sbit IN1 = P1^0; sbit IN2 = P1^1; //输入电机接口 sbit K1 = P3^
[单片机]
轻松搞定独立键盘控制与4*4行列式矩阵键盘扫描
电路图很简单就不画了,电路的接法是p1口接矩阵键盘,p3口接独立键盘,8个led灯接在p0口上的. #include reg52.h #define uchar unsigned char #define uint unsigned int #define on 0 #define off 1 sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2; sbit led4=P0^3; sbit led5=P0^4; sbit led6=P0^5; sbit led7=P0^6; sbit led8=P0^7; sbit key1=P3^0; sbit key2=P3^1; sbit key3=
[单片机]
51单片机控制小车前后左右运动程序
单片机源程序如下: #include reg51.H sbit IN1 = P0^0; // 高电平1 后退(反转) sbit IN2 = P0^1; // 高电平1 前进(正转) sbit IN3 = P0^2; // 高电平1 前进(正转) sbit IN4 = P0^3; // 高电平1 后退(反转) sbit ENA = P0^6; // 高电平使能 sbit ENB = P0^7; // 高电平使能 //延时函数 void delay(unsigned int k) { unsigned int x,y; for(x=0;x k;x++)
[单片机]
<font color='red'>51</font>单片机控制小车前后左右运动<font color='red'>程序</font>
51单片机矩阵键盘响应程序
51单片机矩阵键盘响应程序 #include reg51.h // P0端口接LED // P0端口接数码管 // P3端口接矩阵键盘 #define LED P0 #define KEY P3 #define DIG P0 unsigned char GetKey(void); void delay10ms(void); // 独立数码管的段码表 unsigned char val = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e}; void main(void) { unsig
[单片机]
<font color='red'>51</font>单片机<font color='red'>矩阵键盘</font>响应<font color='red'>程序</font>
MCS-51单片机实用子程序库(二)
(11) 标号: DIVS 功能:双字节二进制有符号数除法(补码) 入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。 出口信息:OV=0时商在R2、R3中,OV=1时溢出。 影响资源:PSW、A、B、R1~R7 堆栈需求: 5字节 DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值 PUSH PSW ;保存结果的符号 LCALL DIVD ;计算两个绝对值的商 JNB OV,DVS1 ;溢出否? POP ACC ;溢出,放去结果的符号,保留溢出标志 RET DVS1: POP PSW ;未溢出,取出结果的符号 MOV R4,#0 MOV R5,#0 MDSE: JB F0,MDS2 ;用补码表示结果
[单片机]
C51教程 第三个51程序:数码管显示
第三个51程序:让数码管循环显示0-9 这是一个AT89c51单片机教程,我们每次都会提供博文教程以及附带资料下载。 单片机就是一个小型CPU,在电子领域应用广泛,电视、冰箱、洗衣机、空调等产品中都能见到他们的身影。它是一个可编程的mcu,根据代码的不同可实现非常多功能 数码管是生活中常见的电子元件之一,它其实是由8个led连接而成,可显示数字与部分字母。数码管又可以分为共阴极与共阳极之分。本实验采用共阴极为例 了解数码管之后,就可以开始今天的实验了。打开proteus仿真,找到一个共阴极的数码管,可参考下图中左上角元件名称,查找,连接电路 有人要问了,为什么要接上拉电阻呢,因为接的是P0口,P0没有输出能力,只能
[单片机]
C<font color='red'>51</font>教程 第三个<font color='red'>51</font><font color='red'>程序</font>:数码管显示
51单片机温度控制报警和时间显示程序+Proteus仿真
本系统由AT89C51单片机、DS18B20温度检测部分、DS1302日期时间记录部分、数码管显示部分、按键输入部分和蜂鸣器报警部分组成。该系统通过按键一来调整模式,共五个模式。模式一是DS18B20采集环境温度并保存在存储器中通过单片机将温度显示在数码管上,当温度低于下限或高于上限时蜂鸣器报警;模式二是利用按键二和按键三调整报警的最高温度加减;模式三是利用按键二和按键三调整报警的最低温度加减;模式四是DS1302记录的日期通过单片机显示在数码管上;模式五是DS1302记录的时间通过单片机显示在数码管上。 仿真原理图如下 单片机源程序如下: #include reg52.h #include intrins.h #def
[单片机]
<font color='red'>51</font>单片机温度控制报警和时间显示<font color='red'>程序</font>+Proteus仿真
51单片机烧写程序的方法
STC89C51是应用广泛的51单片机,很多人都是通过该单片机入门学习的,单片机的学习需要勤动手。单片机需要烧写程序,要用到相关的软件和硬件。下面介绍一下51单片机烧写程序的方法。 1 所用到的硬件工具 51单片机烧写程序需要用到单片机的UART串口,所用到的工具为USB/TTL,具有四个引脚分别为5V、GND、TXD、RXD,需要和单片机的UART口连接,在连接的时候需要注意的是,串口要交叉连接,即USB/TTL的TXD和单片机的RXD连接;USB/TTL的RXD和单片机的TXD连接。 2 所用到的软件以及设置 STC的51单片机需要用到STC-ISP软件,该软件可以在STC的官网上下载到 烧写过程为:1)选择具体的单片机型
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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