单片机之矩阵键盘的驱动程序

发布者:JoyousJourney最新更新时间:2019-08-15 来源: eefocus关键字:单片机  矩阵键盘  驱动程序 手机看文章 扫描二维码
随时随地手机看文章


#include

 

#define KEYPORT P1

#include "./delay/delay.h"

 

sbit seg_select = P2^0;      //段选

sbit bit_select = P2^1;      //位选

#define SEGPORT  P0

 

 

unsigned char segdata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char TempData[2];

 

void display(void)

{

  static unsigned char i = 0;

  SEGPORT = 0x0;              //消除重影

  seg_select = 1;

  seg_select = 0;

  

  SEGPORT = 0xff;

  bit_select = 1;

  bit_select = 0;

  SEGPORT = TempData[i];

  seg_select = 1;

  seg_select = 0;

  

  SEGPORT = bitdata[i];

  bit_select = 1;

  bit_select = 0;

  

    i++;

    if(2 == i)

    {

i = 0;

}

}

 

void timer0_init(void)                       //中断函数

{

EA = 1;                               //打开总中断

  TMOD |= 0x01;                        //设置定时器工作方式

  TH0 = (65536 - 2000) / 256;

  TL0 = (65536 - 2000) % 256;

  ET0 = 1;                           //打开定时器中断允许

  TR0 = 1;                           

}

 

void timer0_isr(void) interrupt 1    //中断服务程序

{

TH0 = (65536 - 2000) / 256;

  TL0 = (65536 - 2000) % 256;

  display();

  

}

 

 

unsigned char key_scan(void)

{

unsigned char keyvalue;

  KEYPORT = 0xf0;

  if(0xf0 != KEYPORT)                                // 有按键按下  

{

delay_ms(10);

  if(0xf0 != KEYPORT)                          //确实有按键按下

{

  //KEYPORT &= 0xfo;

KEYPORT = 0xfe;

  if(0xfe != KEYPORT)

{

keyvalue = KEYPORT;

  while(0xfe != KEYPORT);           //有按键抬起

delay_ms(10);

while(0xfe != KEYPORT);          //确实有按键抬起

return keyvalue;

}

KEYPORT = 0xfd;

if(0xfd != KEYPORT)

{

 

}

KEYPORT = 0xfb;

if(0xfb != KEYPORT)

{

 

}

KEYPORT = 0xf7;

if(0xf7 != KEYPORT)

{

 

}

}

}

return 0xff;

}

 

unsigned key_prc()

{

unsigned char keynum;

  keynum = key_scan();

  switch(keynum)

{

case 0x7e: return 0; break;

  case 0xbe: return 1; break;

  case 0xde: return 2; break;

  case 0xee: return 3; break;

  default: return 0xff; break;

}

}

 

void main()

{

unsigned char key;

timer0_init();

  while(1)

{

key = key_prc();

  if(0xff != key)

{

  TempData[0] = segdata[key / 16];

  TempData[1] = segdata[key % 16];

}

}

}

 

/*********delay.c*******/

void delay_us(unsigned char t)

{

while(--t);

}

 

void delay_ms(unsigned char t)

{

while(t--)

{

delay_us(245);

delay_us(245);

}

}

 

void delay_s(unsigned char t)

{

    while(t--)

{

        delay_ms(200);

delay_ms(200);

  delay_ms(200);

delay_ms(200);

  delay_ms(200);

}

}

 

/*******delay.h******/

#ifndef _DELAY_H_

#define _DELAY_H_

 

extern void delay_us(unsigned char t);

extern void delay_ms(unsigned char t);

extern void delay_s(unsigned char t);

 

#endif


关键字:单片机  矩阵键盘  驱动程序 引用地址:单片机之矩阵键盘的驱动程序

上一篇:单片机码表的驱动程序
下一篇:单片机之利用按键来使数码管上两位示数增加

推荐阅读最新更新时间:2024-11-04 20:33

51单片机学习笔记【三】——数码管实验
数码管基础: 数码管由八个发光二极管组成成“8“字型,按极性分为共阴极数码管(阴极链接在一起)和共阳极数码管(阳极连接在一起)。本实验采用的是共阳极,若要亮,则相应位置0,即为低电平。 可以通过给数码管引脚置值来控制亮和灭,显示不同的图案,如下图所示 共阳极数码管再进行取反操作便可以显示相同的图案。 一.静态数码管实验 1.电路原理图 2.说明:实验中使用P0口控制,用排线接P0口和JP3.让数码管依次显示0-9。 3.源代码如下: /*********************************************** File Name: 静态数码管 Author: pengshp
[单片机]
51<font color='red'>单片机</font>学习笔记【三】——数码管实验
单片机解密常用方法及反破解对策
1 引言 单片机(Micro controller )一般都有内部ROM ASH供用户存放程序 SH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。事实上,这样的保护措施很脆弱,很容易被破解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和
[单片机]
单片机型FM有线/无线遥控广播系统
引言 在许多单片机应用系统中,常常利用电信号与非电信号,来传送控制信号和数据信息,以实现遥控或遥测的功能,例如光信号、超声波信号、电脉冲信号等。而本FM有线/无线遥控广播系统中,是使用双音频电信号发送接收挖出,实现对FM有线/无线广播的远程控制管理。这种双音频通信具有控制简单,实施方便,传输可靠,而且造价低廉的特点,也是一种较为常用的通信方式。实现单片机系统双音频通信的关键在于双音频接收电路设计和应用,以及检测程序的设计。 1 遥控广播系统的基本原理 基本原理如图1所示。 遥控广播系统的通信是电话拨号收发的一种双音频通信方式,是一项可靠、成熟的通信技术。它取代了传统的电话拨号脉冲通信方式,成为现代电话通信拨号的主要通信方式
[单片机]
<font color='red'>单片机</font>型FM有线/无线遥控广播系统
单片机模拟I2C总线通信的几个关键程序
I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。以下为单片机模拟I2C总线通信的几个关键程序: 1、总线初始化 void main() { SCl=1; delay(); SDA=1; delay(); } //将总线都拉高以释放总线 2、启动信号 void start() { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); } //SCL在高电平期间,SDA一个下降沿启动信号 3、应答信号 void respons() { uchar i=0; SCL=1; dela
[单片机]
基于ISP技术及89C55单片机的图像处理系统设计
随着图像处理技术应用的普及,其应用范围越来越广。在医学、军事、公安等领域,特别是近些年在工业自动化、工业检测方面得到广泛应用。目前的图像处理系统大多采用计算机加上视频采集卡和摄像头来构成其硬件系统,这种硬件结构对于处理自满不复杂的简易图像处理系统显然是不合适的。 目前,EPLD芯片内部的资源越来越多,速度越来越快,开发的软件功能也更加完善,使其应用逐步扩大。人们普遍认为,今后的许多电子系统,将以CPU+RAM+EPLD的结构为特征。图像系统将向小型化发展。如何设计一套简单的、低成本的图像处理系统是将图像处理技术应用到更广的领域的迫切要求。 本文介绍的系统正是针对这样的需求而开发出来的。 1 总体设计方案 整个系
[单片机]
51单片机课程设计:基于TCS230/3200的颜色复制显示器
本程序将从颜色识别模块读取到的数据显示在LCD1602上,同时生成对应的PWM波操作三色灯显示不同颜色,以此来实现颜色的复制显示,关于各模块的接线方法在源码都有详细介绍,同时,相关工程文件以及资料可在文章最下方下载。 关于粘贴复制乱码的问题:如果程序复制到Keil编译器上出现注释乱码,可以先建一个.c文件,也就是说不在keil里面编辑,然后用记事本打开.c文件,将源码复制进去,再在keil中添加文件即可。 /************************************************************************************** 基于TCS3
[单片机]
基于FPGA和单片机的频率监测系统
O.引言 本系统利用单片机和FPGA有效的结合起来共同实现等精度频率测量和IDDS技术,发挥各自的优点,使设计变得更加容易和灵活,并具有频率测量范围宽、产生的波形频率分辨率高及精度大等特点。 系统方便灵活,测量精度和产生的波形分辨率高,能适应当代许多高精度测量和波形产生的要求,可以在各类测量系统和信号发生器中得到很好的利用,频率测量在电路实验、通讯设备、音频视频和科学研究中具有十分广泛的用途。等精度测量技术具有广阔的应用前景,由于其性能的优越性,在目前各个测量领域中都可以发挥着很好的作用,特别是在海洋勘探,太空探索以及各类实验中都得到了应用。 1.DDS信号发生器的实现 使用FPGA与单片机相结合的方式构成DDS信号
[单片机]
基于FPGA和<font color='red'>单片机</font>的频率监测系统
基于AVR单片机的发电机负荷缸多路遥控开关量数字遥控并编解码的实现
负荷缸是船舶电力核心发电机性能的负荷试验必备的重要工装设备,通过负荷试验,可以检验发电机长期工作的性能稳定的情况(静态特性)和对突加突卸负荷的应变能力(动态特性) AVR单片机具有高性能低价格的优点,在本文中利用AVR单片机对发电机负荷缸的多路远程遥控开关量进行采集监控并进行数字信号编解码,用2芯的电缆取代原来40芯的粗电缆传输控制信号,有效地解决了工作中遇到的问题。 1 问题的提出 我们通过把由发电机供电的通电极板放到负荷缸水电阻中,用充气升降极板和补给水调节水电阻大小的方法控制试验发电机所带负荷的大小,对发电机的性能进行试验。体积庞大的负荷缸一般放置在码头,在船舶发电机的负荷试验中需要在船舶配电板处控制负荷缸的各个部件,
[单片机]
基于AVR<font color='red'>单片机</font>的发电机负荷缸多路遥控开关量数字遥控并编解码的实现
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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