#include "config.h"
#define HC595_CS (1 << 7)
#define NixieTube_CS (1 << 11)
void DelayMS(uint32 dly)
{
uint32 i;
for(; dly > 0; dly--)
{
for(i = 0; i < 50000; i++);
}
}
void MSPI_Init(void)
{
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00001500;
SPCCR = 0x52; // 设置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 中断被禁止
}
void MSPI_SendData(uint8 data)
{
IOCLR = HC595_CS; // 片选74HC595
SPI_SPDR = data;
while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕
IOSET = HC595_CS;
}
/* 此表为LED0~F以及L、P、C的字模 */
uint8 const DISP_TAB[19] = {
// 0 1 2 3 4 5 6 7 8 9
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,
// A b C d E F
0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E,
// L P C
0xC7, 0x8C,0xC6 };
int main (void)
{
uint8 i;
PINSEL0 = 0x00001500; // 设置SPI管脚连接
IODIR = HC595_CS|NixieTube_CS;
IOSET = IOSET|NixieTube_CS;
MSPI_Init();// 初始化SPI接口
while(1)
{
for(i = 0; i < 16; i++)
{
MSPI_SendData(DISP_TAB[i]); // 发送显示数据
DelayMS(80);
}
}
return 0;
}
关键字:ADS LPC2103 SPI 数码管
引用地址:
ADS_LPC2103开发板SPI 4位数码管测试试验
推荐阅读最新更新时间:2024-03-16 14:39
MSP430数码管的使用Ⅱ
通过宏定义设置段选位选 #include msp430f149.h typedef unsigned char uchar; #define wei_h P5OUT |= BIT5 #define wei_l P5OUT &= BIT5 #define duan_l P6OUT &= ~BIT6 #define duan_h P6OUT |= BIT6 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar num = 0; void main( void ) {
[单片机]
使用51单片机并行口驱动LED数码管显示电路及程序
介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据
[单片机]
第六个试验----认识数码管扫描程序
玩单片机一定要玩转数码管了;上图是我们xp套件的两位数码管的截图照片;这个数码管怎样来显示1,2,3,4呢?别着急,听我慢慢道来。 数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们的xp套件和倚天套件用的都是两位8的共阳极扫描型数码管。 什么是共阳极呢;就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的由他们的位选位来控制哪一位的数码管来亮。看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管哪一边亮。 动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的 8 个笔划段 a-h 同名端连在一起,而每一个显示器的公共极 COM 是各自独立地受
[单片机]
基于单片机的数码管动态显示器的设计方案
1.前言 数码管静态显示系统需要占用过多的单片机口线,但是可以保证正常的亮度。为了解决占用口线较多而浪费硬件资源等问题,研究人员开发了一系列诸如74HC595的数码管驱动芯片,该类芯片可以实现串行转并行的工作方式,驱动数码管实现静态和动态显示。但是,这样一种工作方式暴露出控制系统实时性不足等问题,在某些对系统响应时间要求比较高的场合的应用产生了一定的限制。为了解决上述几个弊端,本文提出了一种基于单片机的数码管动态显示器的设计方案,以IAP15F2K61S2系列单片机做控制核心,并采用全新的软硬件电路实现数码管的动态显示。 2.控制系统硬件设计 2.1 显示器外观设计 本显示器采用六个共阳极的数码管,按照通常的做法,六个数码管水平排
[电源管理]
ADS8344及其在电子式互感器高压侧数据处理系统中的应用
摘要:电子式互感器是一种利用现代数字处理和光纤通信技术来实现电力系统电压、电流测量和保护的新型互感器装置。ADS8344是TI公司生产的8通道、16位、高精度、低功耗A/D转换芯片。TMS320LC545是TI公司生产的16位、低功耗、高速DSP芯片。文中介绍了ADS8344的主要特点,给出了其在电子式互感器高压侧数据处理系统中与TMS320LC545的接口设计。
关键词:ADS8344;电子式互感器;数据处理;TMS320LC545
互感器主要用于电力系统基本参数的测量,同时为电力系统的计量、保护与监控单元提供信号。随着电力系统输电容量的增长和电网电压等级的提高,基于电磁式原理的传统互感器渐渐不能满足电力系统飞速发展的需要,
[电源管理]
SD卡的SPI模式的初始化顺序
为了使SD卡初始化进入SPI模式,我们需要使用的命令有3个:CMD0,ACMD41,CMD55(使用ACMD类的指令前应先发CMD55,CMD55起到一个切换到ACMD类命令的作用)。 为什么在使用CMD0以后不使用CMD1?CMD1是MMC卡使用的指令,虽然本文并不想讨论MMC卡的问题,但是我还是要说:为了实现兼容性,上电或者发送CMD0后,应该首先发送CMD55+ACMD41确认是否有回应,如果有回应则为SD卡,如果等回应超时,则可能是MMC卡,再发CMD1确认。 正确的回应内容应该是: CMD0 0x01(SD卡处于in-idle-state) CMD55 0x01(SD卡处于in-idle-state) AC
[单片机]
51 汇编编程:8255 驱动矩阵键盘和数码管
汇编编程:矩阵键盘控制数码管切换显示0~F。 下面是电路图。要求16个键按下能显示0~F字样。 看到这样的电路和程序,不由得想起初学单片机时情景。 十几年前,是一本北航的书,里面就是这样的程序。 后来又看过几本,里面也有雷同的程序。 其实,该程序编写的很滥。 它把行列号码,算的很清。还特意弄成几个分支。 换下一行时,行号就要分别存入 00H、08H、10H、18H。 想法也太笨了,其实,只要加上 8,就可以编写成循环程序了。 程序中,还有很多应该简化的地方。 这程序学起来,的确浪费了我不少的时间。 根据题目中的电路和程序,做而论道改写的程序如下。 ; ORG 0000H SJMP START ORG 0030H
[单片机]
华为提前量产“L4”
秘密研发6年、团队规模超过2000人!华为在自动驾驶领域,终于亮出了王牌。 名为ADS的“高阶”自动驾驶方案即将在2022年Q1登上量产车,可让消费者在“自家车库”到“公司车库”之间,全部实现自动驾驶。 你没看错,就是日常通勤的驾驶任务全部交给汽车来做——这就是L4级自动驾驶系统的功能。 如果能够实现量产,ADS将直接碾压现存所有L2和期货L3级系统,是典型的“高维打低维”做法。不得不说,华为出手确实很有分量。 刚刚过去的北京车展上,ADS方案以PPT的形式进行了简单展示,但具体包括哪些功能、驾驶责任如何划分、背后拥有怎样的技术细节等关键问题都没有披露。 ▲华为智能汽车BU智能驾驶产品线总裁苏箐 国庆假期之
[汽车电子]