AVR单片机节约I/O口的键盘程序设计

发布者:Xiaohan521最新更新时间:2017-12-18 来源: eefocus关键字:AVR单片机  I  O口  键盘程序 手机看文章 扫描二维码
随时随地手机看文章

#i nclude<90s8515.h>
#define uchar unsigned char 
#asm
equ __LCD_port=0x18 ;PORTB
#endasm
#i nclude
#i nclude
/************按键功能说明:0--9为数字键 ********/

#define cEnter 16                //确认键
#define cFuntion 15       //功能菜单键
#define cDown 14        //上,下选择键
#define cUp 13
#define cRn_Stop 12             //运行/停止切切实实换键
#define cDel 11                 //删除 
uchar lcd_buffer[33];
uchar getkey(void)
{
 uchar key_temp;
 PORTC|=0x07;                 //向PORTC.0--PORTC.2写入高电平
 DDRC=0x00;                   //把PORTA设置为输入模式
 key_temp=PINC&0x07;         //读取PORTA.0--PORTA.2上的值并屏蔽其它位
 /*****如果K0---K6按下,key_temp就为相应的键值,如果K7--K15按下,则读入PINC.0--PINC.2都为高电平,key_temp==7
 然后PORTC.0--PORTC.2依次输出低电平,判断K7--K15那个键按下**********/
 if(key_temp==7)             //判断K7--K9是否按下
 {
   DDRC|=0x01;                //设置PORTC.0输出0
   PORTC&=0xfe;
   DDRC&=0x00;
   key_temp=PINC&0x07;
   key_temp=(key_temp+1)/2+7;
   if(key_temp==10)           //判断K10--K12是否按下
   {
    DDRC|=0x02;               //设置PORTC.1输出0
    PORTC&=0xfd;
    DDRC&=0x00;
    key_temp=PINC&0x07;
    key_temp=(key_temp+1)/2+10;
    if(key_temp==13)             //判断K13--K15是否按下
    {
     DDRC|=0x04;                  //设置PORTC.2输出0
     PORTC&=0xfb;
     DDRC&=0x00;
     key_temp=PINC&0x07;
     key_temp+=13;
    }
   }
  }
  return key_temp;
}
void init()
{
 PORTB=0x00;     //PORB的初始化
 DDRB=0x00;
 DDRC=0x00;
// LCD module initialization
lcd_init(16);//清屏并把显示坐标设定在0列0行
}
void main()
{
 uchar result;
 init();
 result=getkey();
 sprintf(&lcd_buffer[2],"%c",result);
 lcd_gotoxy(0,4);
 lcd_putchar(lcd_buffer[2]);
 while(1);
}


关键字:AVR单片机  I  O口  键盘程序 引用地址:AVR单片机节约I/O口的键盘程序设计

上一篇:AVR控制的DS1302 C程序
下一篇:SD卡接口程序(AVR)

推荐阅读最新更新时间:2024-03-16 15:49

基于I2C接口控制方式的LED驱动器的实现
无论是手持设备、游戏机、霓虹灯、广告牌等,LED无疑都是当前最热的应用。眩目的色彩及高质的光亮,总能第一时间吸引人的眼球。在当前众多的LED控制器面前,如何选择一款功能丰富且性价比又高的产品来迎合自己的设计,无疑是摆在每个设计师面前的问题。   最简单的LED驱动,我们可以用普通的I/O来实现。但I/O控制只能实现LED的ON与OFF,无法用来进行混光、闪烁等功能,而且每个LED都需要占用一个单独的I/O资源,无疑性价比很低。我们也可以用专用的大电流LED控制器来设计,但昂贵的成本首先会成为问题,而且设计复杂,程度也会跟着各种干扰的出现相应地提高。基于这些,恩智浦(NXP)推出一系列使用I2C接口的LED驱动器,它可以通过I2C
[电源管理]
基于<font color='red'>I</font>2C接口控制方式的LED驱动器的实现
AVR单片机学习按键与数码管的程序设计
简介:按键与数码管的程序设计 AVR IO口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管 一、输入状态IO寄存器设置 1、DDRx 某一位置0,相应位的IO口被设置为输入 2、PORTx某一位置1,使能对应IO口相应位的上拉电阻 3、PINx的对应位是输入的数据,0或1 选择结构语句 一、关系运算符和关系表达式 小于 小于等于 = 大于 大于或等于== 不等于!= 二、逻辑运算符和逻辑表达式 逻辑与&&逻辑或||逻辑非! 三、if 语句结构 if(表达式1)语句1 else if(表达式2)语句2 else 语句3 四
[单片机]
<font color='red'>AVR单片机</font>学习按键与数码管的<font color='red'>程序</font>设计
S3c2440 I2C驱动与测试程序追踪交叉分析
VMware虚拟机+Fedora10, 硬件平台TQ2440, 内核2.6.30.4 最近学习linux I2C驱动, 用刘洪涛老师的测试程序测试内核自带的驱动, 打开调试语句dev_dbg后(具体参考我的另一篇博客),发现应用程序 对应的驱动程序豁然开朗, 然后自己添加了一些dev_dbg后, 对于不理解的地方也有了一定的参考提示, 记录下来与大家分享. 测试程序如下: ----------------------------------------------------------------------------- /*i2c_test.c * hongtao_liu lht@farsight.com.cn
[单片机]
ARM/DSP多机I2C通信方案
引言 在很多嵌入式控制系统中,系统既要完成大量的信息采集和复杂的算法,又要实现精确的控制功能。采用运行有嵌入式Linux操作系统的ARM9微控制器完成信号采集及实现上层控制算法,并向DSP芯片发送上层算法得到控制参数,DSP芯片根据获得的参数和下层控制算法实现精确、可靠的闭环控制。 本文以Samsung公司的ARM9芯片S3C2440和TI公司的DSP芯片TMS320F28015为例,分析了I2C通信接口的原理及特点,提出了基于I2C总线的多机通信接口设计方法。测试结果验证了该系统的可行性及可靠性,对嵌入式系统设计具有一定的借鉴价值。 1 多机系统组成 该多机控制系统以ARM9微控制器s3c2440为核心,采用I2
[单片机]
ARM/DSP多机<font color='red'>I</font>2C通信方案
Valor 和i-PULSE合作提供NPI解决方案
  Yamaha Motor Group旗下的i-PULSE有限公司日前已与华尔莱科技(Valor)结为合作伙伴关系,基于Valor的vPlan生产规划工具向i-PULSE组装设备的使用者提供完整的从设计到制造的NPI解决方案。在近期日本东京举办的Protec展会(6/11-6/13)上,i-PULSE首度展出了该新产品并将直接向其客户进行销售。   新产品的名称为“iPlan”,它将提供一系列专为i-PULSE设备用户定制的功能。iPlan具有智能数据输入及准备、BOM处理、设备优化以及为i-PULSE设备自动生成设备零件数据库等功能。iPlan还能提供为用户预先创建工作流程定义的能力,进一步提高了产品的使用性能。   i-
[焦点新闻]
基于AVR单片机的上下课自动打铃系统的实现
昨晚花一晚上把这些资料整理了一下,全部发出来了。 由于补课没有铃。3月份做了这个东西,已实际使用,稳定运行一个学期。 上运行图: 硬件如下:AVR ATmega16单片机,开发板(用到上面的:继电器、LED走马灯、两个按钮)、门铃、LED若干、16Mhz无源晶振。 硬件照片: 开发板: AVR单片机: 晶振: 好了 照片晒完了,下面开始正文 原理图如下: 好吧我的能耐真大,这电路图不是用什么CAD专业软件画的,而是用Windows画 图板用鼠标一笔一划画的。。。所以效果不是很好,凑合着看吧,知道个大概就行了。(开发板上肯定还有其他资源,电路图中的资源也不
[单片机]
基于<font color='red'>AVR单片机</font>的上下课自动打铃系统的实现
TQ2440学习笔记——Linux上I2C驱动的两种实现方法(1)
内核版本:Linux-3.14 u-boot版本:U-Boot 2015.04 硬件:TQ2440 (NorFlash:2M NandFlash:256M 内存:64M) 摘要 这里并不深入分析Linux下I2C驱动的实现,只是以TQ2440硬件平台为例分析I2C驱动的两种方法。 第一种方法: 使用S3C2440自带的I2C控制器实现,这个kernel已经支持,我们只需要配置即可。 第二种方法: 使用GPIO模拟,这个在kernel中已经集成,实现代码在drivers/i2c/busses/i2c-gpio.c。 在TQ2440平台上有一个EEPROM,型号是:AT24C02C。我们就以驱动at24c02c为例。 硬件原理
[单片机]
TQ2440学习笔记——Linux上<font color='red'>I</font>2C驱动的两种实现方法(1)
基于AVR单片机的LED显示屏的灰度设计与实现
LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的 LED显示屏 解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介   AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达
[单片机]
基于<font color='red'>AVR单片机</font>的LED显示屏的灰度设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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