Atmega128a的4位独立键盘控制程序

发布者:Zhenai5201314最新更新时间:2019-10-15 来源: eefocus关键字:Atmega128a  4位  独立键盘控制 手机看文章 扫描二维码
随时随地手机看文章

//***********************************************************************

//                        包含文件

//***********************************************************************


#include

#include

#define         F_CPU        16000000                // 单片机主频为16MHz,用于延时子程序,熔丝位必须设置到外部高频晶振才行

#include

#include

#include

#include            //中断信号头文件

#include "Config.h"


//***********************************************************************

//                        定义变量区

//***********************************************************************


uchar key;


//***********************************************************************

//                        IO端口初始化

//***********************************************************************


void system_init()

{


   KEYPort |= (1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7);        //四位独立按键连接在PD1/PD5/PD6/PD7上


   KEYDDR  = 0x00;                                                                                        //设置为输入,并且要打开上拉电阻                


   LED=0xFF;                                                                                                //LED灯IO口在PORTE


   LEDDDR=0xFF;                                                                                                //设置为输出


}


//**********************************************************************

//                键盘扫描子程序,采用逐键扫描的方式

//**********************************************************************


uchar keyboardscan(void) 

{

  uchar key_check;

  uchar key_checkin;


  key_checkin=KEYRead;                          //读取IO口状态,判断是否有键按下


  key_checkin&= 0xE2;                                  //读取IO口状态,判断是否有键按下


  if(key_checkin!=0xE2)                            //IO口值发生变化则表示有键按下

          {

            delay_ms(20);                          //键盘消抖,延时20MS


            key_checkin=KEYRead;


            if(key_checkin!=0xE2)                        //再次读取状态,判断是否有按键按下

                    {     

                             key_check=KEYRead;


                             switch (key_check & 0xE2)

                                     {

                                             case 0xE0:key=1;break;        //S1按下


                                             case 0xC2:key=2;break;        //S2按下


                                                case 0xA2:key=3;break;        //S3按下


                                             case 0x62:key=4;break;        //S4按下


                                     }


                    }

  }



else

        {

                  return(key);

          }

}


//*************************************************************************

//                        主程序

//*************************************************************************


int main(void)

{         

        system_init();                                                //初始化端口,注意按键端口要打开上拉电阻,确保稳定


        while(1)

                  {

                        keyboardscan();             //键盘扫描,看是否有按键按下


                    if(key!=0xff)               //如果有按键按下,则显示该按键键值1~4

                              {

                                      {

                                                switch(key)

                                                           {


                                                        case 1: LED=0x7F;break;           //给不同的键赋键值,键值1,亮1个LED灯


                                                     case 2: LED=0x3F;break;                //给不同的键赋键值,键值2,亮2个LED灯


                                                         case 3: LED=0x1F;break;                //给不同的键赋键值,键值3,亮3个LED灯


                                                         case 4: LED=0x0F;break;                //给不同的键赋键值,键值4,亮4个LED灯


                                                  }


                                  }

        

                               }

                     else

                                 {

                                 //LED=key;                                              //没有按键的时候显示上次的键值

                                 }


                  }


}


关键字:Atmega128a  4位  独立键盘控制 引用地址:Atmega128a的4位独立键盘控制程序

上一篇:AVR单片机I2C总线程序
下一篇:DMAVR-L的USART串口发送与接收数据示例程序

推荐阅读最新更新时间:2024-11-02 18:07

由普通元件组成的4路输入12AD转换器
近来市场上出售多种作为个人计算机扩展用的通用A-D转换扩展板,如果限定某种用途,制作成本则可以很低。 本电路是一种由普遍元件构成的,4路输入,采样和保持电路用的12位A-D转换器,可以输入正负的 模拟 信号。 电路工作原理 模拟输入的多路切换器采用标准的模拟 开关 DG201,用译码器IC选择1~4通道,通道选择器输入由2位正逻辑 控制 。选定通道后,向采样和保持电路输入宽度为10US左右的采样脉冲以保持模拟电压。该脉冲由A-D起动脉冲,利用此脉冲的上升沿开始12位的转换。转换时间大约为25US,12位数据从D0~D11输出。关于EOC信号:A-D转换开始时,EOC为“H”电平,并对时钟脉冲进行计数,转换一结束,
[电源管理]
纤巧、24 4 通道增量累加ADC具有校准的温度传感器和Easy Drive输入电流消除技术
2006 年 11 月 28 日 - 北京 - 凌力尔特公司( Linear Technology Corporation )推出 4 通道增量累加模数转换器( ADC ) LTC2492 ,该器件在纤巧的 4mm x 3mm DFN 封装中集成了一个温度传感器和一个新颖的前端设计。 LTC2492 的 Easy Drive TM 设计产生的平均差分输入电流为零,因此无需内部缓冲器就可测量高阻抗输入电源。这个已获专利的采样电路简化了前端信号调节电路的设计,并允许直接用电桥、 RTD 、热电耦和高阻抗传感器驱动该 ADC 。轨至轨输入信号可以直接数字化,同时保持卓
[新品]
11手机大佬的4G对话 华为高调小米雷军“哑口无言”
    近日,10家手机公司和中移动终端公司高管,坐在一起对4G手机的现状与趋势进行了最新解读。下面让我们听听华为中兴他们都聊了哪些干货?   下面是现场对话实录精华摘编。   中兴通讯移动总监办总经理王志:   中兴近期在做重大转变:把4千多人的研发队伍中,3千多人专职来做4G研发,把原有的和运营商紧密合作做B2B的业务,转向去做B2C的业务。   在中兴新做的4G手机里,更强调的是解放双手,通过语音来操作。内部来讲就是释放了双手,解放了思想,更多地体验到4G给我们带来的新业务体验。   青岛海信通信有限公司总经理卢庆亚:   海信正在利用家电、视频和4G高速下载,以抢占家庭客厅服务为目的,打造一个综合的在家庭娱乐、视频方面的综
[手机便携]
104倍过采样视频解码器,拓展了数字视频的
10位、4倍过采样视频解码器,具有业内最佳的性能 SUNNYVALE,CA,2009年6月8日。为拓展数字视频信号通道方案的应用范围,Maxim Integrated Products (NASDAQ:MXIM)推出业内功耗最低的10位、4倍过采样视频解码器 MAX9526 。该器件基于高性能54MHz、10位ADC构建,转换模拟视频信号至数字格式时能够提供优异的图像质量。可选择的8/10位视频输出能够提供与Blu-ray Disc®和其它高清格式(ITU-R BT.656 4:2:2)相同分辨率(8位)的图像质量。 这款高性能视频解码器设计用于拓展数字视频系统的应用领域。器件的成本与低端方案差不多,因而有效避免了出于成本考虑
[模拟电子]
10<font color='red'>位</font>、<font color='red'>4</font>倍过采样视频解码器,拓展了数字视频的
由普通元件组成的4路输入12A-D转换器
电路的功能 近来市场上出售多种作为个人计算机扩展用的通用A-D转换扩展板,如果限定某种用途,制作成本则可以很低。 本电路是一种由普遍元件构成的,4路输入,采样和保持电路用的12位A-D转换器,可以输入正负的模拟信号。 电路工作原理 模拟输入的多路切换器采用标准的模拟开关DG201,用译码器IC选择1~4通道,通道选择器输入由2位正逻辑控制。选定通道后,向采样和保持电路输入宽度为10US左右的采样脉冲以保持模拟电压。该脉冲由A-D起动脉冲,利用此脉冲的上升沿开始12位的转换。转换时间大约为25US,12位数据从D0~D11输出。关于EOC信号:A-D转换开始时,EOC为“H”电平,并对时钟脉冲进行计数,转换一结
[工业控制]
由普通元件组成的<font color='red'>4</font>路输入12<font color='red'>位</font>A-D转换器
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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