51单片机矩阵键盘例程

发布者:见贤思奇异果最新更新时间:2015-06-23 来源: 51hei关键字:51单片机  矩阵键盘 手机看文章 扫描二维码
随时随地手机看文章
#include

code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //表:共阳数码管 0-9

#define DAT P1     /按键值数据口

sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit key4=P1^4;
sbit key5=P1^5;
sbit key6=P1^6;
sbit key7=P1^7;


#define DATA_number P2   //数码管数据口

//-------数码管位选------
sbit H1=P2^0; 
sbit H2=P2^1;
sbit H3=P2^2;
sbit H4=P2^3;
 
sbit DA=P2^4;     //数码管驱动数据
sbit SC=P2^5;     //数码管驱动数据移动电平
sbit ST=P2^6;     //数码管驱动锁存输出电平

//-----------按键值返回函数------------------------
unsigned int key_scan(void)
{
 unsigned int temp;
 bit find=0;  
 DAT=0xf0; 
    if((DAT&0xf0)!=0xf0)
{
     find=1;
 if(key4==0){temp=3;}
 else if(key5==0){temp=2;}
 else if(key6==0){temp=1;}
 else if(key7==0){temp=0;}   
 DAT=0x0f;
 
 if(key3==0){temp+=12;}
 else if(key2==0){temp+=8;}
 else if(key1==0){temp+=4;}
 else if(key0==0){temp+=0;}     
}
if(find==1){return temp; }
else return 16; 
}
//----------------数码管驱动输出数字函数--------------
void output(unsigned char cnt)
{
 unsigned char i;
 for(i=0;i<8;i++)
 {
  SC=0;
  DA=cnt&0x80;
  SC=1;
  cnt<<=1;
 }
}

//-----------主函数显示按键值-------------
void main(void)
{
 unsigned int kk;
 while(1)
 {
   kk=key_scan();
   output(table[kk/10]);
   DATA_number=0x0f;   //关闭显示,位切换准备
   ST=0;                         /锁存准备 
   ST=1;                        //数据锁存到输出
   H1=0;                          //打开显示位0  
   output(table[kk%10]);
   DATA_number=0x0f;
   ST=0;
   ST=1;
   H2=0;
 }
}

//---------------------数码管驱动芯片采用---74HC595----


关键字:51单片机  矩阵键盘 引用地址:51单片机矩阵键盘例程

上一篇:51和VB数字量简易测试
下一篇:PCF8591(AD-DA)芯片-51单片机程序

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

嵌入式学习笔记1——51单片机之预备知识
1. TTL电平:高+5V(有电) 低0V(没电)。 2. RS232电平: 计算机串口 高-12V 低+12V, 所以单片机与计算机通信时要加电平转换芯片max232。 3. 概念:C51就是开发51单片机的C语言。 4. C51的数据类型扩展定义(即除了C中int 、char等之外): (1) sfr:特殊功能寄存器声明(一般情况编程时用不到) (2) sfr16:sfr的16位数据声明(一般情况编程时用不到) (3) sbit: 特殊功能位声明 (4) bit: 位变量声明 例:sfr SCON = 0x98; sfr16 T2 = 0xCC; sbit OV =PSW^2; sbit l
[单片机]
51单片机软件抗干扰的技术误区
单片机 中存在这样一种广泛流传的误解:在MCS-51系列单片机中,只要用指令使程序从起始地址开始执行,就可以复位单片机,摆脱干扰。通过一个简单的实验,揭示了软件复位的可靠方法。   有的单片机(如8098)有专门的复位指令,某些增强型MCS-51系统单片机虽然没有复位指令,但片内集成了WATCHDOG电路,故抗干扰也不成问题。而普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又不带硬件WATCHDOS,如果没有外接硬件WATCHDOG电路,就必须采用软件抗干扰技术。常用的软件抗干扰技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位
[单片机]
51单片机-LED部分(2)
8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include #include #define uchar unsigned char uchar x, temp; sbit buzzer = P2 ^ 3; void delayms(uchar z); void main() { temp = 0xfe; while(1) {
[单片机]
一种基于51单片机控制的数字视频混合器
近几年,数字电视技术发展很快,数字视频混合器可以将两路或多数数字视频信号按照一定的算法混合成一路或多路数字视频信号。作为数字视频信号的基本处理单元,该混合器在数字电视节目的编辑制作和播控传输系统中具有举足轻重的作用。 本文介绍的基于单片机控制的数字视频键控混合器具有以下特点:内含两级串联的键控混合器,可以在主信号中键两入两路附加数字信号,如时钟台标或各种字幕标识;可以远程遥控,也可现场按键控制;可以随时更新和保存系统配置,改变系统功能和技术参数;该系统稳定可靠,对掉电、死机等异常现象有自复位能力。 整个系统包括硬件和软件两部分,硬件包括数字混合部分和单片机控制部分。 1 数字混合部分 输入的数字信号有背景信号、键控信号和填
[单片机]
51单片机多机通信电路图及C语言程序
多机通信电路图 此处,U1作为主机,U2为从机1,U3为从机2。 多机通信C语言程序 (1)主机程序 #include #include #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Buff ; //数据缓冲区 unsigned char temp=0xff; sbit KEY1=P1^6; sbit KEY2=P1^7; //unsigned char addr; //延时1ms函数 void de
[单片机]
<font color='red'>51单片机</font>多机通信电路图及C语言程序
51单片机之定时器/计数器应用实例(方式0、1、2、3)
硬件:STC89C52RC 开发工具:Keil uVision4 对于刚接触单片机的同学来说可能会对定时器/计数器的应用很蒙圈,特别是初值的计算和各种定时方式的选择。下面希望能给你带来一个清晰的思路。 定时器:一般用于软件计时,给定时器设置一个时间,时间到了系统停止当前的工作跳转到事先定义好的定时器中断函数里,函数里可以做一些周期性的事情。 计数器:一般用于检测外来脉冲信号,给计数器设置一个次数,次数到了系统停止当前的工作跳转到事先定义好的计数器中断函数里,函数里做相应的事情。 先说一下相关的寄存器,也可以直接跳过,看后面的实例分析。 配置定时器或者计数器就是对相应的寄存器进行赋值,下面是相关的寄存器描述:
[单片机]
<font color='red'>51单片机</font>之定时器/计数器应用实例(方式0、1、2、3)
8051单片机的寄存器是什么样的
CPU中使用寄存器来临时存储信息,这些信息可以是要处理的数据,也可以是指向要获取的数据的地址。在8051单片机中,有一种数据类型是8位,从MSB(最高有效位)D7到LSB(最低有效位)D0。对于8 位数据类型,任何大于 8 位的数据类型都必须在处理之前分成 8 位块。 8051中使用最广泛的寄存器是 A(累加器)、B、R0-R7、DPTR(数据指针)和 PC(程序计数器)。所有这些寄存器都是 8 位的,除了 DPTR和 PC。 一、8051中的存储寄存器 我们将在这里讨论以下类型的存储寄存器: 1.累加器; 2.寄存器; 3.B寄存器; 4.数据指针 (DPTR); 5.程序计数器 (PC); 6.堆栈指针 (SP)。 (
[单片机]
80<font color='red'>51单片机</font>的寄存器是什么样的
基于8051单片机和SC1128芯片实现病房呼叫系统的设计
传统的病房呼叫系统普遍采用有线式,不仅布线安装繁琐、维护不便、利用率低,而且实时性差。虽然无线式呼叫系统没有布线问题,但它的可靠性差,而且无线电波会干扰其它医疗仪器设备,目前大多数医院不采用无线呼叫系统。 随着电力载波技术的发展,应用低压电力线作为传输媒质,采用扩频、数字编码、单片机控制等技术实现病房呼叫已成为可能。本文运用电力载波技术设计了一种病房呼叫系统。 1 病房呼叫系统的基本要求 临床求助呼叫是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断或护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士, 并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系
[单片机]
基于80<font color='red'>51单片机</font>和SC1128芯片实现病房呼叫系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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