ARM7 lpc2148之GPIO按键输入试验

发布者:梦回归处最新更新时间:2021-07-05 来源: eefocus关键字:ARM7  lpc2148  GPIO  按键输入 手机看文章 扫描二维码
随时随地手机看文章

简介:此实验中摁下某个按键后,把相关的信号并行传递到74HC165上,然后再通过串行方式传到处理器中,处理器在通过控制P0.22口(MAT0.0)来控制蜂鸣器。


此实验中摁下某个按键后,把相关的信号并行传递到74HC165上,然后再通过串行方式传到处理器中,处理器在通过控制P0.22口(MAT0.0)来控制蜂鸣器


#include


//宏定义

#define SCLK 0x01<<24

#define SCK0 0x01<<4

#define MISO 0x01<<5

#define MOSI 0x01<<6

#define RCK 0x01<<7


void HC595_Init(void);

void WriteByte(unsigned char data);

void Write595(void);

void HC165_CS(char flag);

unsigned char Read165(void);

void Delayn(unsigned long n);

//595扩展接口的数据显示缓存

unsigned int HC595_DATA = 0xFFFFFFFF;

//初始化595接口

void HC595_Init(void)

{

IO0DIR |= MOSI|RCK|SCK0;

IO1DIR |= SCLK;

IO1CLR |= SCLK;

IO0DIR |= RCK;

HC595_DATA = 0xFFFFFFFF;Write595();

}

//写字节

void WriteByte(unsigned char data)

{

unsigned char i;

//IO0CLR = RCK;

for(i=0;i<8;i++)

{

if(data&0x01) IO0SET=MOSI;

else IO0CLR=MOSI;

IO1SET=SCLK;

data>>=1;

IO1CLR=SCLK;

}

//IO0SET = RCK;

}

//刷新595的数据

void Write595(void)

{

IO0CLR = RCK;

WriteByte(HC595_DATA&0xff);

WriteByte((HC595_DATA&0xff00)>>8);

WriteByte((HC595_DATA&0xff0000)>>16);

WriteByte((HC595_DATA&0xff000000)>>24);

IO0SET = RCK;

}

//165片选

void HC165_CS(char flag)

{

if(flag) ////CLK INH写入高电平

HC595_DATA &= ~(1<<1);

else

HC595_DATA |= (1<<1);

Write595();

}

//读165的数据

unsigned char Read165(void)

{

unsigned char RD=0,i;

HC165_CS(1); //

IO1CLR_bit.P1_25 = 1;//写入1使对应引脚输出低电平,即使S/L(管脚1)得到低电平,在arm板接收数据前,必须将该引脚拉低,目的是为了将并行数据A--H上得数据装载到内部寄存器中,这里体现的时LOAD功能

Delayn(10);

IO1SET_bit.P1_25 = 1;//写入1使对应引脚输出高电平,接下来在接收数据的过程中必须将该引脚拉高,目的是为了使寄存器中的数据可以移动,从而从QH或QN'中移入单片机。这里体现的是SHIFT功能。

for(i=0;i<8;i++)

{

RD <<= 1; //左移一位

if(IO0PIN&MISO) //MISO0是74HC165输出的串行数据,看74HC165是否接收到数据,如果MISO0不为0则说明接收到了数据,

RD |= 1;//先接受高位

IO0SET=SCK0;//时钟为高,上升沿下一个数据移出(只有在CP为高时,才允许CE由低转高)

Delayn(10);

IO0CLR=SCK0;//时钟低电平 (我们只需将arm处理器的某一个端口拉低或抬高即可,这样数据就一步一步的被接收了。请务必记得上升沿有效。)

}

HC165_CS(0);

return RD;

}

main()

{

PINSEL0=0x000000;

PINSEL1=0x000000; //所有引脚连接GPIO


unsigned char HC165_DATA;

IO1DIR_bit.P1_25 = 1;

IO1SET_bit.P1_25 = 1;

PINSEL0_bit.P0_5 = 0;

//IO0DIR_bit.P0_5 = 0; //HC165输入管脚


IO0DIR=1<<22; //蜂鸣器控制口设置为输出,其余输入

HC595_Init();


while(1)

{

HC165_DATA = Read165();

if((HC165_DATA&(1<<4))==0) IO0SET=1<<22; //当KEY2按下的时候,蜂鸣器响起(此处解释见下面)

else IO0CLR=1<<22; //松开KEY2,蜂鸣器停止蜂鸣

}

}

//延时周期数

void Delayn(unsigned long n)

{

while(n--);


}


最后说明:


对主函数中if((HC165_DATA&(1<<4))==0) IO0SET=1<<22的解释,1<<4位使得第4位变为1,有74HC165数据手册中功能方图:


 可知第4位对应的外围引脚是3,再由上面的第一个图74HC165的连接图可发现它与KEY INT2相连,所以对应的是KEY2键


关于程序中74HC165的数据传送的方式自己还有待研究,之所以用到了74HC595,是因为力天电子的这款板子在进行设计是把把74HC165 的片选(165 CS)连接到了595上,所以必须得对595进行相应操作

关键字:ARM7  lpc2148  GPIO  按键输入 引用地址:ARM7 lpc2148之GPIO按键输入试验

上一篇:嵌入式系统中引导程序的实现
下一篇:ARM 架构/特性(处理器)全解

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

GPIO复位函数void GPIO_DeInit(GPIO_TypeDef* GPIOx) 的理解
通常我们需要对ST单片机的整个IO进行复位操作,这是我们可以用到复位函数void GPIO_DeInit(GPIO_TypeDef* GPIOx); 先来看一下这个函数的定义 void GPIO_DeInit(GPIO_TypeDef* GPIOx) { /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); if (GPIOx == GPIOA) { RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Pe
[单片机]
S3C2440中的GPIO
1.S3C2440GPIO简单介绍 GPIO即General-purpose input/output ,这些管脚除了可以用作输入输出外,还可以配置成一些其他的功能,例如I2C,UART等,其实就是管脚复用的思想。 所有的这些管脚主要通过下面的寄存器进行控制, 2.JZ2440原理图 从上面的原理图截图中我们可以看到: 1.我们的nLED_1,nLED_2,nLED_4是连接到3.3V电源上的,所以我们的管脚需要输出低电平,LED灯才会亮。 2.我们的nLED_1,nLED_2,nLED_4是连接到s3c2440的GPF4,GPF5,GPF6上面的。 另外,在原理图中还有如下知识点。 3.控
[单片机]
S3C2440中的<font color='red'>GPIO</font>
stm328种GPIO模式
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点: 1、利用外
[单片机]
stm328种<font color='red'>GPIO</font>模式
助力车载驾驶系统更灵活 纳芯微推出车规级I²C GPIO扩展器件NCA9539-Q1
2022年9月28日 – 纳芯微宣布(NOVOSENSE)推出全新车规I²C GPIO扩展芯片NCA9539-Q1,可通过I²C扩展16个GPIO通道,广泛适用于汽车座舱娱乐系统、汽车辅助驾驶系统、车身电子、新能源汽车动力总成等模块,工作温度可高达125度,且能在严苛要求的汽车领域提供更强抗干扰能力,同时有效降低了成本,为客户解决了成本与性能兼备的双向需求。 该产品已通过AEC-Q100(Grade1)可靠性认证,从设计、制造到封装测试实现了国产化全流程,确保供应的安全与可靠,以更好地满足客户的交付需求。 更简明的方案 NCA9539-Q1是一款汽车级24引脚CMOS器件,提供16位通用并行I²C总线数输入/输
[汽车电子]
助力车载驾驶系统更灵活 纳芯微推出车规级I²C <font color='red'>GPIO</font>扩展器件NCA9539-Q1
STM32F0xx_GPIO配置详细过程
前言 对于初学STM32的人来说,很多基础的知识没有掌握,这些基础知识就成为阻挡他们入门的门槛。因此,今天也把基础的知识分享出来,带领那些还没有迈过这个门槛的人入门。 今天总结“GPIO配置详细”,以F0标准外设库初始化结构体来重点讲解。接着昨天“新建软件工程详细过程”来进行讲解,今天分两大部分内容总结。工程描述、IO配置源代码详细讲解。 下载 ST标准外设库和参考手册、数据手册等都可以在ST官网下载的到(请自行下载)。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议使用这个,以后如果你换用一种型号芯片也方便了解。 今天提供下载的软
[单片机]
STM32F0xx_<font color='red'>GPIO</font>配置详细过程
cortex m0 lpc1114GPIO输出功能
GPIO是每个单片机的必备功能。单片机与外围电路的工作,大多数都是通过GPIO来控制的。学习任何一种新的单片机,都需要先学会控制它的引脚电平高低以及读取电平的高低。常用的I2C、SPI等通信协议都可以用GPIO来模拟。Ration敢放言,学会了控制引脚的电平和读取引脚的电平,就等于学会了单片机的一半,不同意者请勿拍砖。下面就将以最常用的按键和LED来学习LPC1114的输入与输出功能。 例如LED电路如下图所示,可以通过LPC1114的任何一个引脚控制其亮灭。LED_1P和LED2_P接单片机的引脚。 可以看出,当单片机的引脚为高电平的时候,LED灭;当单片机的引脚为高电平的时候,LED亮。此时应该把控制LED亮灭的引脚
[单片机]
cortex m0 lpc1114<font color='red'>GPIO</font>输出功能
stm32学习之三
1、GPIO之LED灯的点亮程序: GPIO的功能是多样的,驱动LED灯,获得按键的输入信息 。 对于驱动LED灯,按照上面就需要对GPIO进行配置。 基本知识掌握: 2013年4月24日: 下午: stm32学习的原因: 1、从内核上:一般人开始学习的时候,都是从arm7开始的,但是自从stm32开发板出现后,就发现了人们更多的在 使用了stm32了。 2、从用途上:stm32微控制器在工业控制上、消费电子、手持设备、汽车电子、安防监控等众多领域得到广泛的 应用,而且其高性价比,适合手工DIY的优点。 arm7与stm32的比较: Cortext-32的速度比arm7块三分之一,功耗低四分之一,并且能够实
[单片机]
飞思卡尔IMX6 gpio配置方法
使用imx6 的gpio时候需要关注board-mx6q_sabresd.h中的内容 本文以MX6Q_PAD_CSI0_DAT10__UART1_RXD进行详细说明: (1)用source insight查看MX6Q_PAD_CSI0_DAT10__UART1_RXD #define MX6Q_PAD_CSI0_DAT11__UART1_RXD (_MX6Q_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(MX6Q_UART_PAD_CTRL)) 主要由 _MX6Q_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL组成 (2)查看:_MX6Q_PA
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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