基于GPS授时的点阵LED屏显示时钟设计报告.docx
《基于GPS授时的点阵LED屏显示时钟设计报告.docx》由会员分享,可在线阅读,更多相关《基于GPS授时的点阵LED屏显示时钟设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
![基于GPS授时的点阵LED屏显示时钟设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/24/e763d52f-53c3-45e8-8803-8423e5fa1a0b/e763d52f-53c3-45e8-8803-8423e5fa1a0b1.gif)
基于GPS授时的点阵LED屏显示时钟设计报告
2013第九届“博创杯”全国大学生嵌入式物联网设计大赛
作品设计报告
基于GPS授时的点阵LED屏显示时钟
ALEDClockBasedonGPS
设
计
报
告
队伍编号:
参赛学校:
大学
作者:
蔡成瑶、严帅、照
指导教师:
凯
是否恩智浦单项:
是
否□
摘要
本设计采用了大赛指定硬件开发平台:
NXPLPC11C24FB(ARMCortex-M0微控制器),设计了GPS授时的点阵LED屏时钟显示系统。
系统从GPS卫星上获取标准的时钟信号,并将这些信息通过UART接口传到LPC11C24主控模块上,再通过LED点阵屏将经过LPC11C24处理后的时间信息显示出来。
如果UART未收到GPS数据则系统将采用LPC11C24的部定时器计时,该设计以软硬件相结合的方式完成整个GPS数据的接收和显示过程完成了一台LED点阵屏显示GPS时钟的设备。
此设计由于使用的是GPS时钟信号,所以时间精确度可以达到纳秒级,同时结合了点阵LED屏,就使得系统整体显示效果好。
关键词:
LPC11C24、GPS、LED点阵屏
Abstract
NXPLPC11C24(Cortex–M0microcontroller)isusedasthespecifiedhardwareplatforminthedesignoftheGPStiminglatticeLEDclockdisplaysystem.SystemstandardfortheclocksignalfromGPSsatellites,anduploadtheinformationthroughtheUARTinterfaceLPC11C24mastercontrolmodule,throughtheLEDlatticescreenwillbedisplayedafterLPC11C24processingtimeinformation.IfUARTisnotreceivedGPSdatasystemwilladoptLPC11C24internaltimertiming,thedesignwithacombinationofhardwareandsoftwaretocompletethewholeprocessofGPSdatareceivinganddisplaycompletedaLEDdotmatrixscreenGPSclockdevice.ThisdesignisduetotheuseofGPSclocksignal,sotheprecisioncanreachnanosecondtime,combinedwithlatticeLEDscreenatthesametime,makesthesystemasawholedisplayeffectisbetter.
Keyword:
LPC11C24、GPS、LEDLatticescreen
摘要1
目录2
第一章绪论4
1.1设计背景4
1.2ARMCortex-M0处理器4
第二章系统方案5
2.1系统总体方案5
2.2系统方案结构图5
第三章基于GPS授时的点阵LED屏显示时钟的系统6
3.1NXPLPC11C24主控板6
3.1.1NXPLPC11C24简介6
3.1.2开发环境7
3.1.3LPCXpresso的项目建立8
3.2点阵LED屏显示模块8
3.2.1P10LED点阵屏电路图9
3.2.2P10LED点阵显示屏的指标9
3.2.3LED点阵屏上控制LED的亮灭原理10
3.2.4LED点阵屏的动态扫描原理10
3.2.5主控模块LPC11C24与LED点阵屏的引脚连接11
3.2.6LED点阵屏的显示的软件设计12
3.2.6.1控制LED亮灭的设计过程13
3.2.6.2LED点阵屏的动态扫描设计过程14
Buf缓冲区数据组织15
3.2.7时钟显示秒的控制19
3.3GPS卫星数据接收模块GR-8720
3.3.1GPS技术简介20
3.3.2GR-8721
3.3.3引脚功能21
GR-87指标22
3.3.4硬件接口—UART23
3.3.5通信协议NMEA24
3.3.5主控模块LPC11C24与GR-87的连接24
3.3.6UART接收GPS数据软件设计25
3.4供电电源的选择29
第四章系统测试29
4.1测试仪器和设备29
4.2测试方案30
4.2.1LED点阵屏显示测试30
4.2.2GPS通信测试30
4.2.3NXPLPC11C24测试30
4.2.4系统综合测试30
4.3测试30
4.3.1LED点阵屏显示测试30
4.3.2GPS通信测试31
4.3.3系统综合测试32
4.3.4结果分析32
第五章系统特色33
5.1高精度的时钟信号33
5.2LED点阵屏特色33
第六章结论34
附录34
第一章绪论
1.1设计背景
随着社会的进步人们对于时间信号的精度要求越来越高,而传统的时钟一般是采用部晶振精确度不高,长期运行过程中由于种种原因都会产生误差已经不能满足工业生产的需要,因此我们要寻找一种稳定可靠的方法来来产生精确的时钟。
使用原子钟可以使时间精度达到纳秒级,所以在科学技术领域、人们日常的生活生产领域都可以广泛的运用“原子钟”。
另外,LED显示屏是利用发光二级管点阵模块组成的平面式显示屏幕由于它具有发光率高、使用寿命长、组态灵活、适应能力强等优点在国外的到广泛应用。
基于GPS授时的点阵LED屏显示时钟就是利用GR-87接收卫星上“原子钟”精确的时间信号传送给LPC11C24,经过LPC11C24处理后发往点阵LED显示屏并显示出时间。
1.2ARMCortex-M0处理器
作为ARMCortex处理器系列的最新成员,32位Cortex-M0处理器采用了低成本90纳米低功耗(LP)工艺,耗电量仅9μA/MHz,约为目前主流8位或16位处理器的三分之一,却能提供更高的性能。
这种行业领先的低功耗和高性能的结合为仍在使用8位或16位架构的用户提供了一个转型开发32位器件的理想机会,从而在不牺牲功耗和面积的情况下,提高日常设备的智能化程度。
Cortex-M0处理器的特点促成了智能、低功耗微控制器的面市,并为“物联网”量的无线连接设备提供高效的沟通、管理和维护。
低功耗联网功能深具潜能,可驱动各种节能和生活关键应用,包括从无线方式分析住宅或办公大楼性能与控制的感测器,到以电池运作、通过无线方式连接监控设备的身体感测器。
而现有的8位或16位微控制器(MCU)缺少足够的智能和功能来实现这些应用。
Cortex-M0处理器不仅延续了易用性、C语言编程模型的优势,而且能够二进制兼容已有的Cortex-M0处理器工具和实时系统(RTOS)。
作为Cortex-M处理器系列的一员,Cortex-M0处理器同样能够获得ARMCortex-M生态系统的全面支持,而其软件兼容性使其能够方便地被移植到更高性能的Cortex-M3或Cortex-M4处理器。
率先获得Cortex-M0+处理器授权的厂商包括飞思卡尔半导体和恩智浦半导体。
第二章系统方案
2.1系统总体方案
本系统利用NXPLPC11C24作为主控模块。
首先从GPS系统获取全球标准时间源,经过CPU处理后将时间数据通过UART接口输出到LPC11C24主控模块上,LPC11C24可把接收到的GPS时间数据利用软件来处理,再把数据发送到显示模块,实现时间的显示。
LED点阵屏为主要的显示模块,把从LPC11C24传来的数据显示出来,并且可以实现左右移动等功能。
2.2系统方案结构图
根据总体方案画出了系统的结构图,是按照结构层次划分三层:
硬件平台NXPLPC11C24为核心,同UART连接的是GPS模块,32*16的点阵屏是用杜邦线和和控制系统相连的。
整体方案结构框图如下:
图2.1系统总体方案结构图
第三章基于GPS授时的点阵LED屏显示时钟的系统
3.1NXPLPC11C24主控板
LPC11C24为核心控制芯片,工作过程分为两个部分:
数据接受处理和时钟数据扫描显示。
LPC11C24开发板部集成了串口通信电路,本设计就是应用UART通用串行数据接口接受外部GR-87发来的卫星数据,有选择的将数据存储到数据缓冲区,然后我们将缓存区里的数据取出经过CPU的处理后送到LED点阵显示屏上显示出我们所需要的时钟信息。
3.1.1NXPLPC11C24简介
LPC11C24FBD48是ARMCortex-M0微控制器,设计用于8位/16位微控制器应用,具有高新能,低功耗,简单指令集,统一编址寻址等优点,而且,LPC11C24可以比传统的8位/16位单片机在执行大多数普通的微控制器任务时减少40%到50%的代码量,这是通过强大的Cortex-M0v6-M指令集实现的。
这种指令集以16位的Thumb指令为基础,迄今唯一应用于32位微处理器。
具有高于45DMIPS处理能力的LPC11C24为CAN节点提供了强有力的信息和数据处理能力。
这种对电源的优化能力是当今的8位/16位单片机难以实现的
特色和优点
●ARMCortex-M0处理器,工作频率高达50MHz
●ARMCortex-M0置可嵌套中断向量控制器(NVIC)
●程序代码的密度要比8/16位MCU更小
●闪存ISP命令可通过UART或C_CAN发出
●超快速模式下,2个I²C总线引脚上的大电流吸收驱动器(20mA)
●带小数波特率生成器的UART
●36个高速5V相容GPIO引脚,可选择引脚高电流驱动(20mA)
●12MHz部RC振荡器,温度及电压围精确度可达1%
●支持完整I²C总线规及超快速模式的I²C总线接口
●CAN2.0BC_CAN控制器具备on-chipCANopen驱动器与整合式收发器片高速CAN收发器
●工作围从1MHz到25MHz的晶体振荡器
●频率围从7.8kHz到1.8MHz的可编程看门狗振荡器
●最大限度降低功耗的集成式PMU(电源管理单元)
●采用中断和强制复位的4个独立阀值进行的掉电检测
●可用作芯片识别的唯一序列号
●3.3V单电源(1.8V至3.6V)
3.1.2开发环境
此次设计的软件开发环境使用的大赛的合作方恩智浦半导体针对它旗下采用的ARM处理器的LPC系列微控制器推出的开发工具平台LCXpresso。
LCXpresso根据简单易用的理念设计而成,它为系统设计人员提供了一种快速便捷的使用LPC1100的方式。
利用LPCXpresso这款功能全面的工具链还可以轻松实现在高性能的ARM7、ARM9以及包括LPC1300和LPC1700在的Cortex系列微控制器之间的产品移植。
LPCXpresso开发平台基于功能强大的Eclipse集成开发环境(IDE)工具,拥有由恩智浦设计的全新、直观的用户界面、针对Cortex-M0优化的编译器和函数库、LPC-LinkJTAG/SWD调试探针和目标板,同时具有一流的C编程环境以及语法高亮度显示、代码折叠和展开、快速点击导航变量和函数定义及声明的高级功能,为用户提供丰富的开发工具,加速产品开发,缩短新品上市时间。
3.1.3LPCXpresso的项目建立
1.打开LPCxpresso软件弹出workspacelauncher对话框选择项目要放的文件夹
2.菜单栏FILE->new->project弹出newproject对话框选择LPCxpressocproject-next再选择lpc11xx-cprogect–>next-在projectneme中输入项目名称-netx-选择lpc11c24/301next在cmsislibrarytolinkprojectto:
中选择NONE-finish
3.这样项目就建立好了,在编译过程中缺什么头文件就去示例文件夹中复制到SRC文件夹下就可以了
3.2点阵LED屏显示模块
这次我们选用的是P10LED成品屏。
P10LED点阵显示屏作为此次设计的数据显示模块,它的作用就是将从缓冲区里取出的数据经过CPU的处理后显示出我们所需要的信息。
我们可以利用LPC11C24的GPIO端口控制LED点阵屏显示相应的信息。
3.2.1P10LED点阵屏电路图
下图是P10LED点阵屏的电路图,其中74HC245D是驱动放大芯片、74HC595是移位寄存器、74HC138D是译码器
图4.2P10LED点阵屏电路图
3.2.2P10LED点阵显示屏的指标
●LED分辨率:
LED显示屏像素的行列数称为LED显示屏的分辨率 ,我们所用的P10LED点阵屏的分辨率是32*16。
●LED点距:
10mm
●像素配置:
1R(纯红)
●视距:
3m~300m
3.2.3LED点阵屏上控制LED的亮灭原理
通过P10LED屏的电路图可以发现,整个屏有通过一个74HC138来控制行和16个74HC535一位寄存器控制列。
按正常理解32*16的LED点阵2个138和16个595才能控制整个屏。
而这里只用了1个138是用了4953LED驱动芯片,一个138输出信号被分成了4个一样的信号连接到了每个4*8小模块的LED的阳极上这样138输出的4路信号就被分成了16个信号,这16个信号中每4个一组一样的信号共4组。
这样行就能全部控制了。
因为屏上4*8小模块都配了一个595所以一次通过595输入端通过移位可以输入16*8位数据进入595中。
这就移位着当138输出高电平信号,595移位移入128个0进去时这是屏就会显示4行且这4行是隔4个亮一行。
如果要只亮一个点只需把送入595的128中对应的那一位写0其他127位写1就可以显示一个点了。
例如要让下图中第一行第一列的那个LED亮,只需要OUT1送高电平,列1送入低电平即可。
OUT1端的高低电平由74HC138来控制,而它阴极的电平高低则是由74HC595来控制。
让138输出信号快速的输出四个信号,这时屏上显示的就是点亮的那个点的所在的4*8的小模块中的亮点所在的列的4个点都亮了起了。
这就是动态扫描。
后面还会详细解释。
3.2.4LED点阵屏的动态扫描原理
通过上面已经可以把一个点点亮了,接下来就是要在屏幕上显示要显示的容了。
如果138的输出容不变只能显示4行,只有把138输出的容改变,且速度要快这样16行就可以全部显示出来了。
这就是动态扫描。
比如我们要在左边的16*8的区域显示一个数字“1”首先就要的编写“1”在16*8的区域的16进制编码并放入一个数组中,这就是字库。
编写好字库后还要再加一个64字节的数据缓存区用来存放屏上所用点的数据,595就从数据缓存区中取数据送去显示。
而缓存区中的容是从字库通过算法加载进去的。
现在我们把“1”的数据放入数据缓存区中对应显示的地方。
595取128位送入屏幕,这时138选择的是4*8的第一行,这时在要显示的16*8中亮了1,5,9.13行,接着595再取下一行的128位数据送入屏,138选中4*8的第二行。
这时在要显示的16*8中亮了2,6,10,14行,依次类推共4次,就把16*8的所有行就都显示了。
由于程序执行速度很快,肉眼看不出切换所以就看到一个完整的“1”了。
这就实现了动态扫描。
3.2.5主控模块LPC11C24与LED点阵屏的引脚连接
LPC11C24引脚
LED点阵屏引脚
+5VIN
5V供电电源
GND
GND
P0_3
OE
P1_8
SCLK
P2_6
R
P2_7
CLK
P2_8
B
P2_10
A
图5.4LED点阵屏与LPC11C24引脚的连接图
LPC11C24与LED点阵屏的连接图
3.2.6LED点阵屏的显示的软件设计
对于这个系统的软件设计一开始是我们是从控制LED点阵屏的显示入手,而为了防止在控制LED显示的初始阶段烧坏LPC11C24开发板以及更快的入手LPC11C24开发板,我们首先决定先用51单片机来写程序点亮控制LED点阵屏,在可以任意的控制LED屏的显示之后再将程序移植到LPC11C24开发板上。
而控制LED点阵屏的首要问题就是点阵屏上每一行的亮灭是如何在单片机中实现的,接下来我们就试着去控制点阵屏的的每一个点的亮灭,直到可以控制任意点亮和灭。
然后,我们再考虑去让点阵屏去显示数字以及在哪个位置去显示,最后我们才再想方设法的使LED点阵屏的不同位置显示出我们想要显示的数字而这又是最困难的一步,由于在一个时刻LED点阵屏只能让一块显示所以要想让整个的屏都显示不同的数字就使用到动态扫描的技术。
这里要真正实现动态扫描则分为两部分第一部分是buf数据缓存区的数据的动态变化,第二部分是对LED屏的行的动态扫描。
控制一个点显示
控制一行显示
任意显示数字
图LED点阵屏显示设计思路程
3.2.6.1控制LED亮灭的设计过程
首先我们是先通过看对P10LED点阵屏电路图走线方式,电路的芯片的作用来理解电路。
电路是用74HC138译码器和74HC595移位寄存器组合实现的,这样就大概知道电路是如何工作的,我们就试着按自己的理解去连接的电路并给通过单片机控制LED点阵屏,写了几个程序发现LED点阵屏上一直不亮,就考虑是否是硬件出了问题,但是经过测试后发现LED屏的正负极是有+5V电压的,并且LED的引脚同51单片机的连接也正确。
只能是程序写的不对,然后我们就上网查阅各种资料,包括595移位寄存器和138译码器的手册、例程,通过查阅之后才对595和138的工作有了更进一步的了解,我们之后又重新编写了一个程序和发现还是不能点亮LED屏,问了老师后才知道是我们对595理解有误,
之后我们试着写了一个程序发现LED点阵屏果真亮了,但是LED灯都是在乱闪的,琢磨的一晚上也没找到是什么原因,直到第二天问了老师才发现是LED屏和单片机没有共地,我们找了一跟线将LED的地和单片机的地线连接起来这下屏上的显示就稳定了,但是是4行一起亮的,看了原理图后发现138的输出信号又通过LED驱动芯片分出4个一样的信号,输出的信号被用于控制4行,所以16行需要4个138译码输出信号,这样2个138的输入信号输出00、01、10、11四个信号,就能把整块屏的16行给控制起来。
能够控制行,还得能控制任意一个点。
一开始只知道595是如何工作的,就全送入0,后来改变输入595的128位,发现第一个送进去的0会在4行中的最后一个点上,就理解了什么叫“位显示的先送”这句话,这样就已经能控制128位中的任意一点的亮和灭。
3.2.6.2LED点阵屏的动态扫描设计过程
实际上,我们要做的远不止让行和点亮起来这么简单,因为引脚的有限,我们只能用动态扫描的方式来让屏幕显示全部的容,但是问题有来了,138和595的组合输入究竟是什么样的。
时序是如何组合在一起的,我们就试了一下发现屏上的显示规律并不是我们想的那样从左到右依次来的,而是8位一组从左下方开始再到左上方,然后再从下方的往右8位再往上依次类推,直到右上方。
这样就影响到了数据组织问题,做到这里老师对我们提出了一个数据缓冲区的概念,说这块屏的显示程序对应有三部分,第一部分就是一个64字节的缓冲区里面是屏上的每个点对应的值,第二个部分是4个变量也就是屏上列分成8位一组的点钟要现实的容的值。
第三个部分就是扫描输出程序,这个程序只需要扫描64字节的缓冲区其它的不用管,这三部分的工作过程是,程序通过4个变量在字库中选择要显示的值的编码送入64字节的显示缓冲区中对应的位置,在通过扫描程序来把显示缓冲区中的容送给显示屏。
这个过程也是成为整个程序的主要框架后面的功能在这些基础上添加和修改的。
程序写到这里出现了单片机无法解决的问题——RAM的大小不够用无法执行程序。
这时就不再使用单片机来编写了,我们把程序移植到LPC22C24上面去,由于LPC11C24中引脚的使用不同单片机引脚使用初始化引脚即GPIOSETDIRL(x,x,1)第三位为1表示引脚的状态为输出,前面两位分别为第几个IO口的第几位。
而IO口的输出要用GPIOSETVAIL(x,x,x).第一个x表示第几个IO口,第二个x表示第几个IO口的第几位,第三个x表示输出0或1.由于这种输出方式带来的问题是只能用0和1来输出,所以只能把原来程序中的数据移位一个一个输出,这是和单片机的一个区别。
原来程序移植到LPC11C24中后下载可用位就可改变现实的容了。
原来只能显示4位数字,现在要把时间和日期一起显示了。
这样就要重新规划数据缓冲区的数据组织和传入数据缓冲区的算法了,用移位来把重新规划的数据缓冲区填入正确的值,并正确显示年-月-日-时-分
Buf缓冲区数据组织
控制点阵屏显示时钟就要知道点阵屏上每个点在Buf缓冲区中对应的存储位置,因为我们所使用的是32*16的LED点阵屏,所以Buf缓冲区就应该是一个64字节的数据缓冲区,每一个字节表示LED屏上的8个点如果我们要在某个位置上显示某一个数字就把Buf缓冲区中对应位置的值改成要显示数字的编码。
下图是我们定义时间的年、月、日、时、分在点阵屏上的显示位置和Buf缓冲区对应关系。
注:
图中0~63每个数字代表一个字节,数字表示这个字节在BUF缓冲区数组中的位置。
比如说图中‘51’就是从左往右的八个小方格,图中的‘6’就是从左往右的八个小方格。
51
35年十位
19
3显示
50
34位置
18
年个位
显示
位置
55
月十位
显示
位置
59月个位
43显示
27位置
11
58
42
26
63日十
47显示
31位置
15
62
46
30
日个位
显示
位置
39
23
7
点
点
54
38
22
2
6
10
14
49
53
57
61
33
时十位
显示
位置
37
时个位
显示
位置
41
分十位
显示
位置
45分个位
29显示
13
60位置
44
2