一、输入/输出端口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便是调欠好~~
shit~~
然后就换用了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,输入到存储寄存器中,因为片选一向为低,所以直接就输出显现的数据
}