51单片机C编程(五、矩阵键盘扫描加显示)

发布者:古泉痴迷者最新更新时间:2015-09-25 来源: eefocus关键字:51单片机  C编程  矩阵键盘 手机看文章 扫描二维码
随时随地手机看文章
这是个4x4的矩阵键盘,按下一个按键,在数码管上显示相应的键值。PROTEUS仿真电路图如下:

[转载]51单片机C编程(五、矩阵键盘扫描加显示)

//程序名称:矩阵键盘扫描加显示

//编    程:jumpmysoul

#include
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e};
void disp(char); // 数码管显示子程序
void delay(int); // 延时子程序
void keyscan();  // 键盘扫描子程序
char keynum;

//*********************主函数****************************

void main()

 while(1)
 {
   keyscan();
   disp(keynum);
 }
}

//*********************键盘扫描子函数****************************
void keyscan()     // 线反转法
{
  char lie,hang,temp1,temp2;
   P1=0x0f;
      delay(10);
  if(P1!=0x0f)
  {
   
    if(P1!=0x0f)
    {
    temp1=temp2=P1;
    hang=temp1&0xf0;
    P1=temp2&0xf0;
    if(P1!=(temp2&0xf0))
   {
    lie=P1&0x0f;
    }
    keynum=lie|hang;
    disp(keynum);
     }
   }
}

//*********************数码管显示子函数****************************

void disp(char x)
{
  switch(x)
  {
   case 0x11:P0=tab[0];break;
   case 0x12:P0=tab[1];break;
   case 0x14:P0=tab[2];break;
   case 0x18:P0=tab[3];break;
   case 0x21:P0=tab[4];break;
   case 0x22:P0=tab[5];break;
   case 0x24:P0=tab[6];break;
   case 0x28:P0=tab[7];break;
   case 0x41:P0=tab[8];break;
   case 0x42:P0=tab[9];break;
   case 0x44:P0=tab[10];break;
   case 0x48:P0=tab[11];break;
   case 0x81:P0=tab[12];break;
   case 0x82:P0=tab[13];break;
   case 0x84:P0=tab[14];break;
   case 0x88:P0=tab[15];break;
  default: P0=0xc0;break;
 
  }
}

//*********************延时子函数****************************

void delay(int s)
{
 int i,j;
 for(i=s;i>0;i--)
   for(j=100;j>0;j--);
}

关键字:51单片机  C编程  矩阵键盘 引用地址:51单片机C编程(五、矩阵键盘扫描加显示)

上一篇:51单片机C编程(四、定时器秒表数码管显示)
下一篇:51单片机C编程(六、定时器时钟显示时分秒)

推荐阅读最新更新时间:2024-03-16 14:33

51单片机串口中断功能的设置
51单片机的串口功能就是和外界进行通讯,所谓的“外界”也就是与单片机进行交互的媒介,最常用的就是我们经常使用的计算机、平板或者其他设备(比如另一个单片机配合显示模块使用)。 既然和外界需要“交互”,就必须使用“中断”功能,所以一般串口和中断是配合使用的。 在总结串口使用方法之前需要对一些基本概念进行理解 第一. 关于波特率(baud rate)的解释,网上有很多文章,以我个人的肤浅理解觉得说得是这样一回事儿: 西方某大国正在经历总统换届选举,选来选去没有选出个像样的,公民们有意见,非要到国会进行“抗议(0元购)”,一下子来了7680口,有的人还拿着枪,有长的有短的,还有扛炮的!眼看着要乱,警察和抗议者达成协议,进来
[单片机]
<font color='red'>51单片机</font>串口中断功能的设置
51单片机学习笔记:可对时电子钟
本篇是对上一篇的改进,昨天学习了第4章 中的独立键盘的使用 独立键盘拥有自己独有的IO口,所以比较简单,我上一篇写的电子钟程序只能烧程序对时, 不能手动按键对时,这肯定是最差劲的做法,所以学习了按键之后,就立马动手改进我的电子钟了 同时改进了数码管小数点的显示,消除了叠影 使用芯片STC89C52RC, 2个锁存器 6个带小数点共阴极数码管显示一个24时制时钟 没有时钟芯片,所以掉电后时间会复位 原理图为TX-1C开发板 ============================== 最终显示的 时.分.秒 是 16.31.37 形式 使用3个按键, S2 S3 S5 其中S2和S3是加减数值,S5是切换对时状态,
[单片机]
<font color='red'>51单片机</font>学习笔记:可对时电子钟
C51单片机学习——8×8LED点阵屏学习笔记
1.8×8LED点阵屏电路图 8×8LED点阵屏由8行8列共64个LED灯组成。 通过控制其中部分LED灯亮可以组成图形或者数字,和数码管类似。 点阵分为共阳极和共阴极,行控制线接的LED阳极的点阵称为共阳极点阵,行控制线接的LED阴极的点阵称为共阴极点阵。 如何点亮LED灯:正极给高电平,负极给低电平 2.74HC595芯片 芯片查询链接 管脚说明: 3.点阵模块电路图 4.开发板1602液晶接口电路原理图 5.实践编程 ①显示一个点 参考程序: #include sbit DIO = P3^4; sbit SCK = P3^5; sbit RCK = P3^6; void mian()
[单片机]
C<font color='red'>51单片机</font>学习——8×8LED点阵屏学习笔记
51单片机】0.96寸OLED取模教程
一、 文字取模 1.打开软件 2.选择模式 3.选项设置 点阵内的数字手动输入999,然后点击确定。 4.生成字模 以字宽字高16*16为例 复制到代码中调用即可。 如果需要改变字体大小可通过改变字宽字高比,进行重新取模 二、 图片取模 1.选择一张图片打开 打开方式选择画图 2.图片调整大小 0.96寸oled是128*64的,所以不能超出这个范围,否则就会乱码 我们这里选择的是68*64,可以自行修改,不要超出范围就行: (【水平x:0~127】;【垂直y:0~63】) 3.修改图片格式并且保存 4.打开软件,设置选项选择图形模式 5.打开选项设置进行调整
[单片机]
【<font color='red'>51单片机</font>】0.96寸OLED取模教程
51单片机环境的搭建-1.1 由点亮一个LED引入
第一章 51单片机环境的搭建 1.1 由点亮一个LED引入 用单片机来点亮LED,这几乎是每个同学学习单片机的第一个实验。那么谁来点,怎么亮?注意这里面涉及到两个研究对象,单片机和LED。要想知道单片机如何来点,先要知道LED为什么亮。这种由分析被控制对象来研究控制对象的思路在本教程后面会反复用到,这里先提出来亮个相。我们先来看LED为什么会亮,也就是说先来了解LED的工作原理。当有电流通过时(达到一定值比如5mA), LED便会发光。至于进一步的工作原理我们不去追究,有兴趣的可以自己查查,不属于我们讨论的内容。根据这个原理,我们只需要给LED一端(右边)接在5V电源下,LED左边接地,如图1所示,产生电势差,正向导通,那么LED
[单片机]
<font color='red'>51单片机</font>环境的搭建-1.1 由点亮一个LED引入
51 汇编编程:8255 驱动矩阵键盘和数码管
汇编编程:矩阵键盘控制数码管切换显示0~F。 下面是电路图。要求16个键按下能显示0~F字样。 看到这样的电路和程序,不由得想起初学单片机时情景。 十几年前,是一本北航的书,里面就是这样的程序。 后来又看过几本,里面也有雷同的程序。 其实,该程序编写的很滥。 它把行列号码,算的很清。还特意弄成几个分支。 换下一行时,行号就要分别存入 00H、08H、10H、18H。 想法也太笨了,其实,只要加上 8,就可以编写成循环程序了。 程序中,还有很多应该简化的地方。 这程序学起来,的确浪费了我不少的时间。 根据题目中的电路和程序,做而论道改写的程序如下。 ; ORG 0000H SJMP START ORG 0030H
[单片机]
51 汇编编程:8255 驱动<font color='red'>矩阵键盘</font>和数码管
8051单片机指令系统的7种寻址方式解析
寻址方式:寻址就是寻找操作数的地址。绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。所谓寻址方式就是通过什么途径获取操作数的方式。根据指令操作的需要,计算机总是提供多种寻址方式。一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。 8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。 寄存器寻址 寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。例如:MOV A R1 这条指令的功能是把工作寄存器R1
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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