一、输入/输出端口gpio编程
一—(01)、一位数码管静态显示(通过74hc595实现)
1、管脚连接模块
首先介绍一下lpc2106的相关的管脚~~
特性:可以实现独立的管脚配置
应用:管脚连接模块的用途是将管脚配置为需要的功能(这一章节主要就是介绍gpio功能~~别的会在接下来的章节中分别予以介绍~~)
描述:管脚连接模块可以使所选管脚具有一个以上的功能。配置寄存器控制多路开关来连接管脚与片内外设。外设在激活和任何相关只读使能之前必须连接到适当的管脚。任何使能的外设功能如果没有映射到相应的管脚,则被认为是无效的。
寄存器的描述:
管脚连接模块包括两个寄存器:
管脚功能寄存器0:(pinsel0)
pinsel0寄存器按照下表当中的设定来控制管脚的功能。
iodir寄存器中的方向控制位只有在管脚选择为gpio的功能时才有效(也就是本章要讲述的)。对于其它功能,方向是自动控制的。
管脚功能寄存器1:(pinsel1)
pinsel1寄存器按照下表来设定控制管脚的功能。
iodir寄存器中的方向控制位只有在管脚选择gpio功能时才有效。对于其它功能,方向是自动控制的。
在复位时拉低dbgsel时,只要管脚p0.17-p0.31的功能控制有效。
管脚功能寄存器值:
pinsel寄存器控制器件管脚的功能。如下图。
每一对寄存器位对应一个特定的器件管脚。
只有当管脚选择为gpio功能时,iodir寄存器的方向控制位才有效。
其它功能的方向是自动控制的。
每个派生期间通常具有不同的管脚分布,因此每个管脚可能有不同的功能。
2、gpio
特性:
1)单个位的方向控制
2)单独控制输出的置位和清零
3)所有i/0口在复位后默认为输入
应用:
1)通用i/0口
2)驱动led或者其他指示器
3)驱动片外器件
4)检测数字输入
管脚描述:
寄存器描述:
gpio包含4个寄存器,如下表:
gpio引脚值寄存器iopin:
gpio输出置位寄存器ioset:
gpio输出清零寄存器:
gpio方向寄存器:
然后就是今天要做的实验:
一位数码管的静态显示
用iar for arm就是调不好~~
换用了keil
浪费我大把时间了
早知道就早用keil了
回头还得再调试一下iar
然后就是程序了~~
mdk1_1.c(先是主程序吗~~你懂得)
//------------------------------------------------------------------------------
//led数码管显示
//通过i/o模拟同步串行接口与74hc595进行连接,控制74hc595驱动led数码管显示
//------------------------------------------------------------------------------
#include“lpc210x.h”
typedef unsigned long uint32;
typedef unsigned char uchar;
#define spi_io 0x00000150 //spi接口的i/o设置字
uchar const seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0.82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//------------------------------------------------------------------------------
//延时函数
void delay(uint32 z)
{
uint32 i;
for(;z》0;z--)
for(i=0;i《50000;i++);
}
//------------------------------------------------------------------------------
//main
int main()
{
uchar i;
pinsel0=0x00000000;
pinsel1=0x00000000; //设置左右引脚连接gpio
iodir=spi_io; //设置spi控制口为输出~~由于这是模拟的,所以需要自己设置方向位
while(1)
{
for(i=0;i《16;i++)
{
hc595_send_data(seg[i]);
delay(1);
}
}
}
74hc595.c
//------------------------------------------------------------------------------
//74hc595模拟spi通信,便于调用
#include“lpc210x.h”
typedef unsigned long uint32;
typedef unsigned char uchar;
#define spi_cs 0x00000100 //p0.8模拟片选
#define spi_da 0x00000040 //p0.6模拟数据传输口
#define spi_clk 0x00000010 //p0.4模拟clk
//------------------------------------------------------------------------------
//向74hc595发送一个字节函数(发送数据时,高位在前)
//还是大概介绍一下74hc595吧:
//74hc595是具有8位移位寄存器和一个存储器,三态输出功能。
//移位寄存器和存储器是分别的时钟。
//数据在sh_cp的上升沿输入到移位寄存器中,在st_cp的上升沿输入到存储寄存器中去。
//如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲(一般不会这么用吧~~)。
//移位寄存器有一个串行移位输入(ds),和一个串行输出(q7’),和一个异步的低电平复位。
//存储寄存器有一个并行8位的,具备三态的总线输出,当使能oe时(为低电平),存储寄存器的数据输出到总线。
void hc595_send_data(uchar dat)
{
uchar i;
ioclr=spi_cs; //spi_cs=0
for(i=0;i《8;i++) //模拟spi~~
{
ioclr=spi_clk; //spi_clk=0
if((dat&0x80)!=0) //设置spi_da的输出值
ioset=spi_da; //要从最高位发送,当最高位为1时,置位spi_da
else
ioclr=spi_da; //当最高位为0时,清零spi_da
dat《《=1; //dat循环左移一位
ioset=spi_clk; //spi_clk为1,一个脉冲上升沿,将数据移入移位寄存器
}
ioset=spi_cs; //spi_cs=1,输入到存储寄存器中,由于片选一直为低,所以直接就输出显示的数据
}
MineData 4.0|紧贴用户需求 四维图新多元服务触达物流市场
支持无线WiFi 悍马全固热管890GX
跨网段NAT网关(工业网络耦合器)有什么功能及应用场景
谁说技术宅不懂浪漫 他用分布式技术开发了一款自拍神器
致命干货:41个555定时器经典设计项目
arm7单片机编程实例,ARM7之输入/输出端口GPIO编程教程
保隆科技助力汽车智能网联产业化
开奖 | 不装了,就是超级能装!
在Raspberry Pi上安装Android的方法
企业如何快速构建基于音视频服务的业务
三星得州芯片厂停产预计损失3.53亿美元 全球晶圆厂预测报告发布
家里的加湿器怎么接入爱星物联云平台,实现智能控制?
魅族pro7最新消息:魅族pro7与魅族mx7肩负着联发科的使命,高通全力发飙,联发科危在旦夕!
一加7Pro和iPhoneXSMax哪个屏幕最好用
吉时利数字源表怎么支持四象限工作?
电流模式控制DC/DC转换器中的电流检测电路设计
Linux 开发者 Christopher Helwig 决定放弃上诉 VMware 源码侵权案
开关柜上电器装置的要求盘点
谷歌预计今年再裁员,力推AI等领域投资
区块链技术的价值主要体现在哪里