基于LPC2103微控制器实现LED数码管的显示设计

发布者:Chunjie2022最新更新时间:2023-04-06 来源: elecfans关键字:LPC2103  微控制器  LED数码管 手机看文章 扫描二维码
随时随地手机看文章

SPI( Serial Peripheral Interface) 总线是Motorola公司提出的一个同步串行外设接口, 允许MCU与各种外围器件以串行方式进行通信、数据交换。SPI可以同时发出和接收串行数据, 它只需4条线就可以完成MCU与各种外围器件的通信。一般使用的4条线为:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。这些外围器件可以是简单的TTL移位寄存器、复杂的LCD显示驱动器、Flash、RAM、A/D转换器、网络控制器及其他MCU等。


本文给出了一种基于SPI总线的LPC2103控制外围LED显示的设计方法。利用74HC595驱动静态共阳LED数码管,使用串转并的方式实现I/O口的扩展。


1、 LPC2103中的SPI功能特性

LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,内部具有2个完全独立的SPI控制器,采用全双工的数据通信方式,最大数据位速率为外设时钟Fpclk的1/8。与SPI总线接口有关的专用寄存器有:(1)SPCR控制寄存器。该寄存器包含一些可编程位来控制SPI总线的功能,而且在数据传输之前进行设定,主要有时钟相位控制、时钟极性控制、主从模式选择、字节传输移动方向及SPI中断使能;(2)SPSR状态寄存器(为只读寄存器)。用于监视SPI功能模块的状态,包括一般性功能和异常情况。主要用途是检测数据传输是否完成,通过判断SPIF位来实现,其他位用于指示异常情况;(3)SPDR数据寄存器。为SPI提供数据的发送和接收,处于主模式时,向该寄存器写入数据,将启动SPI数据传输。串行数据的发送和接收通过内部移位寄存器来实现;(4)SPCCR时钟计数器寄存器。用于设置SPI时钟分频值,SPI处于主模式时,该寄存器用于控制时钟速率,即SPI总线速率,寄存器值为1位SCK时钟所占用的PCLK周期数,并且值为偶数,必须不小于8;(5)SPINT中断标志寄存器。包含了SPI的中断标志位,由数据传输完成及发生模式错误来引发。


1.1 SPI电气连接

利用SPI总线可在软件的控制下构成各种系统,如1个主MCU和几个从MCU、几个从MCU相互连接构成多主机系统(分布式系统)、1个主MCU和1个或几个从I/O设备所构成的各种系统等。在大多数应用场合, 可使用1个MCU 作为主机来控制数据,并向1个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。同一时刻只允许有1个主机操作总线。在数据传输过程中,总线上只能有1个主机和1个从机通信。在一次数据传输中,主机总是向从机发送1个字节数据,而从机也总是向主机发送1个字节数据[3]。图1为SPI在主模式下控制2个SPI从机的硬件连接图。

基于LPC2103微控制器实现LED数码管的显示设计

1.2 SPI数据传输

在SPI数据传输中,SPCR控制寄存器的CPHA和CPOL位作用非常关键。CPHA为时钟相位控制,该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束,该位为1,时钟前沿数据输出,后沿数据采样;为0,时钟前沿数据采样,后沿数据输出。CPOL为时钟极性控制,为1时,SCK为低电平有效;为0时,SCK为高电平有效。


图2为SPI的4种不同数据传输格式时序,描述的是8位数据传输。该时序图水平方向分成3部分:(1)描述SCK和SSEL信号;(2)描述CPHA为0时的MOSI和MISO信号;(3)描述CPHA为1时的MOSI和MISO信号。SSEL信号为低电平,说明SPI工作在从模式。其中,MOSI和MISO信号中的bit1~bit8表示传输的第几位数据。

2、 74HC595扩展I/O接口电路

SPI是一个串行输入输出的接口,使用串转并的接口芯片可以实现扩展I/O口。74HC595芯片为一种常用的8位串转并移位寄存器芯片,本系统利用74HC595来驱动静态共阳LED数码管。74HC595的主要优点:具有数据存储寄存器,在移位过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。LPC2103工作在SPI主模式下。


图3为74HC595逻辑图。图中,SI为串行数据输入引脚,用来连接LPC2103的MOSI功能引脚;SCK为移位寄存器的时钟输入,连接LPC2103串行时钟线SCK;为清移位寄存器引脚;RCK为锁寄存器锁存时钟引脚;即输出触发端与SSEL连接;为输出使能引脚;SQH为串行数据输出引脚,连接MISO;QA~QH引脚为并行输出。当为高电平、使能接低时,SCK产生一个上升沿,SI引脚当前电平值将在移位寄存器中左移1位,在下一个上升沿到来时移位寄存器中的所有位都会向左移1位,同时SQH引脚也会串行输出移位寄存器中的高位的值。当RCK产生上升沿时,移位寄存器的值将会被锁存到锁存器里,并从QA~QH引脚输出。

图4为SPI接口与74HC595的连接原理图。其中QA~QH分别连接共阳LED数码管的8个段。在SPI输出1个字节的数据时,SSEL产生1个低电平,SPI主机串行地发该字节的各个位,各个位都依次被锁存在74HC595的移位寄存器内,当1个字节的数据传输完成后,SSEL由低电平变为高电平,从而使74HC595的移位寄存器的值被锁存到74HC595的锁存器并从其QA~QH引脚输出;在SPI输出1个字节数据的同时,74HC595移位寄存器之前的值也通过MISO引脚被SPI主机读回。

3、 软件设计

软件设计包括:进行I/O口初始化,设置SPI引脚连接,启用LPC2103的SPI 0总线,设置GPIO的P0.4、P0.5、P0.6、P0.7为SPI 0总线的SCK0、MISO0、MOSI0、SSEL0特殊功能,置74HC595片选端的I/O口为输出功能。其代码如下:

PINSEL0=0x00005500; //设置SPI引脚连接

PINSEL1=0x00000000;

IODIR=HC595_CS; //设置片选端I/O口为输出


3.1 SPI总线操作初始化

图5为SPI总线操作流程图。使用LPC2103的SPI总线主模式下实现对74HC595的数据传输,用来驱动外围LED数码管。设置SPI时钟,在SPI主模式下,SPCCR寄存器控制SCK的频率,SPI速率为Fpclk / SPCCR。通过SPCR控制寄存器设置时钟相位、时钟极性、主模式控制、字节移动方向及SPI中断使能等。代码实现如下:

Void MSpiIni(void)

{ SPI_SPCCR = 0x52; //设置SPI时钟分频

SPI_SPCR = (0《《3)| //CPHA=0,数据再从SCK的第一时钟沿采样

(1《《4)| //CPOL=1,SCK为低有效

(1《《5)| //MSTR=1,SPI处于主模式

(0《《6)| //LSBF=0,SPI数据传输MSB(位7)在先

(0《《7); //SPIE=0,SPI中断被禁止

}


3.2 SPI总线主模式下数据发送过程

首先选择从机,设置片选。选择74HC595为从机,置片选端SSEL为低有效。将发送的数据写入SPDR,发送出去。等待SPIF置位,即数据发送完毕。最后可从SPDR读取收到的数据。以下为发送函数:

uint8 MSendData(uint8 data)

{ IOCLR=HC595_CS; //片选端,由LPC2103指定的I/O口置位

SPI_SPDR=data;

while(0==(SPI_SPSR&0x80)); //等待SPIF置位,即等待数据发送完毕

IOSET=HC595_CS; //片选置高无效,结束发送

return(SPI_SPDR); //返回接收到的数据

}


3.3 控制LED数码管主函数

主函数使用LPC2103的SPI接口输出给74HC595,用来控制LED数码管显示。DISP_TAB[ ]为LED显示0-F字模的16进制码表。MSendData( )实现每一字节数据的发送。

#define HC595_CS 0x00000100 //P0.8口为74HC595的片选

uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

int main(void)

{ uint8 rcv_data;

uint8 i;

PINSEL0=0x00005500; //设置SPI引脚连接

PINSEL1=0x00000000;

IODIR=HC595_CS; //设置LPC2103片选I/O口为输出功能

MSpiIni( ); //初始化SPI接口

while(1)

{ for (i=0;i《16;i++)

{rcv_data=MSendData(DISP_TAB[i]); //发送显示数据

DelayNS(50); //延时

}

}

return(0);

}


基于SPI总线的数据通信技术已经广泛应用在MCU与各种外围设备的串行通信中。如存储系统、A/D转换系统、网络控制器和多MCU构成的分布式系统。本文给出了74HC595芯片驱动LED数码管显示的电路,采用SPI总线技术实现对LED显示的数据传输,方便快捷、准确性高、速度快,满足了复杂微控制系统对外围设备控制的要求。

关键字:LPC2103  微控制器  LED数码管 引用地址:基于LPC2103微控制器实现LED数码管的显示设计

上一篇:基于LPC2124芯片和GPRS网络实现终端系统程序的远程升级
下一篇:基于ARM微控制器LPC2134的多道脉冲幅度分析器设计

推荐阅读最新更新时间:2024-11-13 07:34

51单片机自学笔记(一)——keil软件的使用
认识单片机 单片机:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 单片机的发展:单片机的发展大概经过三个阶段。第一个阶段,初级单片机阶段,以Intel公司的MCS-48为代表,这个系列的单片机在片内集成了8位CPU、并行I/O口、8位定时/计数器、RAM等,无串行接口,寻址范围不大于4KB。第二阶段,高性能单片机阶段,以MCS-51为代表,这个阶段的单片机均带有串行接口,具有多级中断处理系统,定时/计数器为16位,片内RAM和ROM容量相对增大,且寻址范围可达64KB。第三阶段,8位机巩固完善,16位、32位机推出阶段,以MCS-96和MCS-960为代表,片内RAM和ROM
[单片机]
51<font color='red'>单片机</font>自学笔记(一)——keil软件的使用
单片机高效率代码读取18B20 显示在LCD1602上
#include STC89C5xRC.H #include intrins.h sbit DATA_IO = P3^2; /* 软件延时函数,延时时间(t*10)us */ void DelayX10us(unsigned char t) { do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } while (--t); } bit GetACK() { bit ack; EA = 0; DATA_IO = 0; Del
[单片机]
<font color='red'>单片机</font>高效率代码读取18B20 显示在LCD1602上
基于51单片机的程控放大器
仿真图: 基于 数码管显示 ,具有方波 正弦波 三角波 锯齿波放大功能,放大倍数支持1倍20倍30倍50倍放大 程序设计 #include reg52.h #include intrins.h sbit sbF1 = P2 ^ 0; //不进行放大处理 sbit sbF20 = P2 ^ 1; //放大20倍 sbit sbF30 = P2 ^ 2; //放大30倍 sbit sbF50 = P2 ^ 3; //放大50倍 sbit sbDIN = P3 ^ 0; //MAX7219的数据引脚 sbit sbLOAD = P3 ^ 1; //MAX7219的控制引脚 sb
[单片机]
基于51<font color='red'>单片机</font>的程控放大器
Spansion完成对富士通微控制器和模拟业务部门收购
2013年 08月02日,中国北京 — 行业领先的嵌入式市场闪存解决方案创新厂商Spansion 公司(纽约证交所代码:CODE)今天宣布已经完成对富士通半导体有限公司微控制器和模拟业务部门的收购。根据双方所达成的协议,Spansion将为此交易出资约1.1亿美元,另加约3800万美元收购库存 。该收购有望增强 Spansion 2013年的公司业绩。 Spansion 公司总裁兼首席执行官John Kispert 先生表示:“本次收购将创造出的新产品和业务机会,对此我们倍感兴奋。凭借闪存、微控制器、模拟业务、模拟信号及系统级芯片在内的更丰富的产品线,我们将扩大Spansion在嵌入式市场的领导地位,服务我们的客户群体,并
[嵌入式]
8051单片机有哪些复位方法
问题:8051单片机复位后,各寄存器的初始状态如何?复位方法有几种? 解答:8051单片机复位后机器的初始状态,即各寄存器的状态:PC之外,复位操作还对其它一些特殊功能寄存器有影响,它们的复位状态如下: 寄存器 复位时内容 寄存器 复位时内容 PC 0000H TCON 0×000000B ACC 00H TL0 00H B 00H TH0 00H PSW 00H TH1 00H SP 07H TH1 00H DPTR 0000H SCON 00H P0—P3 FFH SBUF 不确定 TMOD ××000000B PCON 0×××0000B 单片机复位方法有:上电自动复位,按键电平复位和外部脉冲三种方式。
[单片机]
蓝桥杯STC15单片机复习——IO口的使用
前言 引脚图 点灯测试 由引脚图可以看出,STC15的外设资源与51单片机基本一致,常用的也是三组四组IO口(P0、P1、P2、P3),由于板子的电路设计,通过74LS138译码器进行P0的外挂模块的选择。 其中当P25 = 0、P26=0、P27=1;即选通Y4时,外挂的模块为LED灯,下面就开始点几个灯玩玩吧。 /* 彭某的蓝桥杯复习——LED 1、点亮一盏LED并闪烁 */ #include STC15F2K60S2.h #define uint unsigned int #define uchar unsigned char void ALL_Init(); void delay_
[单片机]
蓝桥杯STC15<font color='red'>单片机</font>复习——IO口的使用
单片机程序远程下载方法(包括STC单片机
简介:在某些特殊的场合单片机程序、软件需要进行远程下载,特别是单片机程序的远程升级。本文介绍一种使用串口转以太网模块ZLSN3000来实现51单片机(特别是STC单片机)、PIC单片机、ARM、AVR、PLC的程序远程升级的方法。 1.原理 1.1升级条件 任何能够通过PC机串口下载程序的单片机都可以用该方法实现远程程序升级。目前该方案已经在STC单片机、PIC单片机、ARM上验证。 1.2硬件连接图 如图 1 所示是通过Internet远程升级STC单片机程序的演示图。在设备端,使用卓岚ZLSN3000模块将STC单片机的串口(2根线)和ZLSN3000的RXD、TXD引线直接连接;ZLSN3000的网口连接到ADSL
[单片机]
<font color='red'>单片机</font>程序远程下载方法(包括STC<font color='red'>单片机</font>)
单片机中延时时间怎样计算
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i 0;i--) for(j=202;j 0;j--) for(k=81;k 0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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