AVR 编程之矩阵键盘

2016-10-09来源: eefocus关键字:AVR  编程  矩阵键盘
#include   

#include

#define uchar unsigned char  
#define uint  unsigned int
uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0X00};// 显示段码值0123456789abcdef
void main()
{

uchar key=0;
uchar i=0;
DDRC|=BIT(7);
PORTC|=BIT(7);
DDRA=0XFF;
PORTA=0X00;
DDRB=0XFF;

while(1)
{
if(key_press())
key=keyscan();


ledshow(key,0);


}
}
uchar key_press()
{
uchar i;
DDRD=0XFF;
PORTD=0X0F;
DDRD=0XF0;
i=PIND;

if(i!=0X0F)
{
DDRD=0XFF;
return 1;
}
else
{
DDRD=0XFF;
return 0;
}
}


uchar keyscan()
{
uchar i,j,rkey;
delay (30);
if(key_press)
{
PORTD=0XF0;//先确定所在列,列拉高电平,行低电平
DDRD=0X0F;
//delay(1);
asm("NOP");
i=PIND;
switch(i)
{

case 0X70:rkey=0;break;
case 0XB0:rkey=1;break;
case 0XD0:rkey=2;break;
case 0XE0:rkey=3;break;
default:rkey=16;

}

PORTD=0X0F;//然后确定行,行拉高列拉低
DDRD=0XF0;
//delay(1);
asm("NOP");
j=PIND;
switch(j)
{
case 0X07:rkey+=12;break;
case 0X0B:rkey+=8;break;
case 0X0D:rkey+=4;break;
case 0X0E:rkey+=0;break;
default:rkey=16;
}

}
while(key_press());
return rkey;

}

void ledshow(int num,unsigned int i)
{
PORTA=i;
PORTB=table[num];
}

void delay(int ms)
{
  unsigned int i,j;
 for(i=0;i     {
    for(j=0;j<142;j++);
       }

}

 

注:读PIND前一定要加一个asm("NOP");或者先短暂延时,不然读不到正确的值!

DATASHEET:

不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚电平。如Figure 23 所示,
PINxn 寄存器的各个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟
状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。其缺点是引入了
延迟。Figure 24 为读取引脚电平时同步器的时序图。最大和最小传输延迟分别为tpd,max
和tpd,min。

AVR 编程之矩阵键盘 - 蓝眼泪 - 蓝眼泪的博客
下面考虑第一个系统时钟下降沿之后起始的时钟周期。当时钟信号为低时锁存器是关闭
的;而时钟信号为高时信号可以自由通过,如图中SYNC LATCH 信号的阴影区所示。时
钟为低时信号即被锁存,然后在紧接着的系统时钟上升沿锁存到PINxn 寄存器。如tpd,max
和tpd,min 所示,引脚上的信号转换延迟界于? ~ 1? 个系统时钟。
如Figure 25 所示,读取软件赋予的引脚电平时需要在赋值指令out 和读取指令in 之间有
一个时钟周期的间隔,如nop 指令。 out 指令在时钟的上升沿置位SYNC LATCH 信号。
此时同步器的延迟时间tpd 为一个系统时钟。

 

AVR 编程之矩阵键盘 - 蓝眼泪 - 蓝眼泪的博客

关键字:AVR  编程  矩阵键盘

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016100930246.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR 相位修正PWM模式应用
下一篇:AVR单片机TO定时器快速PWM模式范例

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

共商物联网发展,AVR-IoT 在线研讨会即将开幕

专注于引入新品推动行业创新的电子元器件分销商贸泽电子(Mouser Electronics)宣布将联手Microchip Technology(美国微芯科技公司)于7月16日举办“AVR-IoT开发板-简化物联网云连接设计的起点”在线研讨会。本次研讨会邀请了微芯科技MCU8产品应用工程经理,通过介绍AVR-IoT WG开发板和演示如何快速构建连接阿里云的动手操作,帮助工程师们了解如何通过该开发方案解决物联网应用中所面临的问题。  物联网的应用领域涉及到方方面面,在工业、农业、环境、交通、物流、安保等基础设施领域都有应用,有效地推动了各领域的智能化发展,而云平台连接的加入可以使用户随时随地获取所需信息,使得安
发表于 2019-07-15
共商物联网发展,AVR-IoT 在线研讨会即将开幕

AVRWARE++开发笔记1:综述

    从今天开始撰写AVRWARE++开发笔记,用以使用AVRWARE++程序架构,对Atmel公司的AVR系列单片机进行快速开发。对于开发笔记的任何问题,大家都可以进行留言探讨。    1、简介    AVRWARE++是一套开源的基于层次化软件设计思想的,用于Atmel公司AVR系列单片机开发的软件架构。相比较其它的软件架构,其具有的特点在于:    a、采用层次化软件设计思想进行单片机程序设计;    b、完备的单片机内部外设驱动程序库;    c、可扩展的单片机外部芯片(模块)驱动程序库; 
发表于 2019-07-13
AVRWARE++开发笔记1:综述

AVRWARE++开发笔记2:开发环境的建立

        本文详述AVRWARE++开发环境的建立方法,其主要开发软件有两个:Atmel Stdio和PROGISP。    1、Atmel Studio 6的系统需求    安装集成开发环境Atmel Studio 6,必须满足最小的硬件和软件要求,才能确保编译器以及其它程序功能的正常,应该具有:    a、Pentium-IV或兼容处理器的微型计算机,主频2.0GHz,内存512MB;    b、Windows XP/Win7操作系统;    c、1G硬盘空间; 
发表于 2019-07-13
AVRWARE++开发笔记2:开发环境的建立

AVRWARE++开发笔记3:III型测试板硬件原理

        本文只针对于初学者,高手请绕过!        AVRWARE++现有三种测试板供用户对软件架构进行评测,分别为I型、II型和III型,本文针对III型测试板,进行硬件原理介绍。    III型测试板相对于I型和II型来说,是一个简化版本,采用USB直接供电,具有以下模块:    a、蜂鸣器(长音);    b、8路直接I/O控制LED;    c、24路74HC595串行控制LED;    d、8路直接I/O键盘输入
发表于 2019-07-13
AVRWARE++开发笔记3:III型测试板硬件原理

AVRWARE++开发笔记4:调试III型测试板

    本文只针对于初学者,高手请绕过!    本文介绍III型测试板焊接完成后的调试步骤。    1、上电前准备    III型测试板焊接完成后,首先应仔细检查整个电路板是否有漏焊、虚焊或短路的情况发生,检查无误后,用万用表的测量二极管通断档,对如下图所示电路的C2和C4进行短路测试,如果发生短路现象,切不可上电。    短路故障排除步骤:    a、短路发生后,应首先检查C2、C4、C9和C11电容是否焊接正确,如果发生短焊现象,应重新焊接;    b、检查P2是否焊接正确,如果发生短焊现象
发表于 2019-07-13
AVRWARE++开发笔记4:调试III型测试板

AVRWARE++开发笔记5:蜂鸣器驱动实验

        本文只针对于初学者,高手请绕过!    1、实验目的    利用单片机的IO口,控制蜂鸣器,学会蜂鸣器的控制方法。     2、实验内容    编写一段程序,使蜂鸣器以1秒为间隔鸣叫。    3、硬件原理    蜂鸣器硬件原理图如下图所示,使用排线与端子P1相连,则单片机相应端口的第4引脚即与端子P1的BEEP引脚相连接(例如,使用排线将P10端子与P1端子相连接,则PD4引脚则连接到了BEEP引脚上,在这里需要注意的是,端口从0起排,而端子从1起排
发表于 2019-07-13
AVRWARE++开发笔记5:蜂鸣器驱动实验

小广播

何立民专栏

单片机及嵌入式宝典

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

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