51单片机的4X4矩阵键盘的C语言程序

发布者:WhisperingSong最新更新时间:2015-08-26 来源: eefocus关键字:51单片机  矩阵键盘  C语言程序 手机看文章 扫描二维码
随时随地手机看文章
#include 
 /////////////////////////////////////////数码管常量///////////////////////////////////////////////////////// 
unsigned char code table[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};          //LED段码 
unsigned char code position[]={1,2,4,8}; //LED选位码  
 
/////////////////////////////////////////延时函数//////////////////////////////////////////////////////////// 
  延时t毫秒 
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
void  delay_ms(unsigned char t) 
  unsigned char t2=126; 
  while(t--)while(t2--);  
 
/////////////////////////////  数码管显示函数  //////////////////////////////////////////////////////////////////////// 
参数:待显示的数据 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
void led_display(unsigned int dat )                   
{      
unsigned int dat1=dat000;  //四位数码管只能显示到一千,此处用于防止溢出    
P0=table[dat1/1000]|position[0]; 
delay_ms(2); 
P0=table[(dat100)/100]|position[1]; 
delay_ms(2); 
P0=table[dat10/10]|position[2]; 
delay_ms(2);                                     
P0=table[(dat1)]|position[3]; 
delay_ms(2);  
}   
/////////////////////////////////////////////////////////////////////////////////////////////////////////////  
                按键扫描函数  
                若有按键按下:返回 键值(1-16);  
                若没按键按下:返回  255                 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
unsigned char getch (  )   
{      
    unsigned char X=0,                        
    Y=0,   
    Z=0,   
    k=255;   
    P2=0xff;   
    P2=0x0f;       //先对P2置数  行扫描   
    if(P2!=0x0f)     //判断是否有键按下   
    {     
        //延时,软件去干扰   
        if(P2!=0x0f)   //确认按键按下X = P2;   
        {   
            X=P2;          //保存行扫描时有键按下时状态   
            P2=0xf0;       //列扫描   
            Y=P2;          //保存列扫描时有键按下时状态   
            Z=X|Y;         //取出键值   
            switch ( Z )   //判断键值(那一个键按下)   
            {   
                case 0xee: k=0; break; //对键值赋值   
                case 0xde: k=1; break;    
                case 0xbe: k=2; break;    
                case 0x7e: k=3; break;    
                case 0xed: k=4; break;    
                case 0xdd: k=6; break;    
                case 0xbd: k=7; break;    
                case 0x7d: k=8; break;    
                case 0xeb: k=9; break;    
                case 0xdb: k=7; break;     
                case 0xbb: k=10;break;    
                case 0x7b: k=11;break;    
                case 0xe7: k=12;break;    
                case 0xd7: k=13;break;    
                case 0xb7: k=14;break;    
                case 0x77: k=15;break;    
            }   
            while(P2!=0xf0);   
        }             
    }      
    return k;   
}   
void main()   
{    
    unsigned char temp=0,key=255;   
    while(1)   
    {   
        key=getch();           //扫描   
        if(key!=255)temp=key;  //有按键按下          
        led_display(temp);     //显示按键值   
    }   
}  
关键字:51单片机  矩阵键盘  C语言程序 引用地址:51单片机的4X4矩阵键盘的C语言程序

上一篇:51单片机的MODBUS C语言程序(从机)
下一篇:51单片机控制硬盘的C语言源码程序

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

51单片机玩转物联网基础篇08-定时器
前言 在实时控制系统中,经常需要定时时钟以实现精准延时、定时,也经常需要计数功能以实现对外界脉冲进行计数, 本节,我们开始学习51单片机的定时器,然后开启一个定时器,实现1S翻转一次电平,控制LED灯亮灭。 一、基础知识 1.定时器简介 51单片机的定时器有两个,分别是T0和T1,它们可以用于定时或者对外部脉冲(事件)计数,还可以作为串行口的波特率发生器使用,定时器裸机结构图如下所示 定时器工作在定时方式时候,计数器对内部时钟机器周期数进行计数,每个机器周期等于12个晶体震荡周期,定时器工作在计数方式时候,计数脉冲来自外部输入引脚P3.4、P3.5,当外部输入信号从1到0跳变时,计数器的值加一。 2.定时器相关寄存
[单片机]
<font color='red'>51单片机</font>玩转物联网基础篇08-定时器
51单片机解决调试过程
对于一个新设计的电路板,调试起来往往会遇到一些困难,特别是当板比较大、元件比较多时,往往无从下手。但如果掌握好一套合理的调试方法,调试起来将会事半功倍。对于刚拿回来的新PCB板,我们首先要大概观察一下,板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象。如果有必要的话,可以检查一下电源跟地线之间的电阻是否足够大。 然后就是安装元件了。相互独立的模块,如果您没有把握保证它们工作正常时,最好不要全部都装上,而是一部分一部分的装上(对于比较小的电路,可以一次全部装上),这样容易确定故障范围,免得到时遇到问题时,无从下手。一般来说,可以把电源部分先装好,然后就上电检测电源输出电压是否正常。如果在上电时您没有太大的把握(即使有
[单片机]
51单片机基础之GPIO输出
代码: #include reg52.h //引用51单片机的头文件,包含寄存器等操作 sbit LED=P2^0; //定义P2^0引脚,这属于位操作,等下用于输出高低电平,以便于点亮LED灯 void delay(unsigned int u16) //unsigned是无符号类型,也就是非负数,这个函数可以实现0.6秒内的延时,本质上就是让CPU等待 { while(u16--); } void main(void) //主函数,程序都是从主函数开始执行的。 { while(1) //循环操作,一直执行程序 {
[单片机]
<font color='red'>51单片机</font>基础之GPIO输出
8051单片机(STC89C52)八个LED灯闪烁
#include STC89C5xRC.h void delay() { int i,j; for(i=0;i 200;i++) for(j=0;j =200;j++) { ; } } int main() { while(1) { P2 = 0xff;//八灯灭 delay(); P2 = 0;//八灯亮 delay(); } }
[单片机]
51单片机控制+MAX7219+DS1302 电子钟
/************************************************** *程序名称: MAX7219 C语言控制程序 *程序功能: 3线串行控制8位共阴数码管 *3线定义:DIN 串行数据输入 * LOAD 数据锁存 * CLK 时钟输入 ***************************************************/ #in
[单片机]
基于51单片机的正弦波发生器设计
程序运行图: 仿真原理图: 部分程序: #include reg52.h //接口定义 sbit DA = P1^1; sbit CK = P1^2; sbit CS = P1^4; //10bit取样,1024点正弦查表数据 unsigned int code sine_dot = { 0x200,0x203,0x206,0x209,0x20c,0x20f,0x212,0x215,0x219,0x21c,0x21f,0x222,0x225,0x228,0x22b,0x22f,0x232, 0x235,0x238,0x23b,0x23e,0x241,0x244,0x247,0x24b,0x24e,0x251,0x
[单片机]
基于AT89C51单片机设计的简易智能机器人
   引言   随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。    1 设计思想与总体方案   1.1 简易智能机器人的设计思想   本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目
[单片机]
PC机与多MCS-51单片机间的串行通信设计
【摘 要】 主要讲解了IBM-PC机与MCS-51单片机多机系统的通信原理,给出了其硬件接口框图,并详细地分析了系统的多机通信软件设计。   关键词:单片机,分布式系统,串行通信 1 引 言   在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBM-PC微机和MCS-51单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机
[工业控制]
PC机与多MCS-<font color='red'>51单片机</font>间的串行通信设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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