线阵LED图文显示装置.docx

上传人:b****2 文档编号:17025496 上传时间:2023-07-21 格式:DOCX 页数:21 大小:360.60KB
下载 相关 举报
线阵LED图文显示装置.docx_第1页
第1页 / 共21页
线阵LED图文显示装置.docx_第2页
第2页 / 共21页
线阵LED图文显示装置.docx_第3页
第3页 / 共21页
线阵LED图文显示装置.docx_第4页
第4页 / 共21页
线阵LED图文显示装置.docx_第5页
第5页 / 共21页
线阵LED图文显示装置.docx_第6页
第6页 / 共21页
线阵LED图文显示装置.docx_第7页
第7页 / 共21页
线阵LED图文显示装置.docx_第8页
第8页 / 共21页
线阵LED图文显示装置.docx_第9页
第9页 / 共21页
线阵LED图文显示装置.docx_第10页
第10页 / 共21页
线阵LED图文显示装置.docx_第11页
第11页 / 共21页
线阵LED图文显示装置.docx_第12页
第12页 / 共21页
线阵LED图文显示装置.docx_第13页
第13页 / 共21页
线阵LED图文显示装置.docx_第14页
第14页 / 共21页
线阵LED图文显示装置.docx_第15页
第15页 / 共21页
线阵LED图文显示装置.docx_第16页
第16页 / 共21页
线阵LED图文显示装置.docx_第17页
第17页 / 共21页
线阵LED图文显示装置.docx_第18页
第18页 / 共21页
线阵LED图文显示装置.docx_第19页
第19页 / 共21页
线阵LED图文显示装置.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

线阵LED图文显示装置.docx

《线阵LED图文显示装置.docx》由会员分享,可在线阅读,更多相关《线阵LED图文显示装置.docx(21页珍藏版)》请在冰点文库上搜索。

线阵LED图文显示装置.docx

线阵LED图文显示装置

·1系统方案论证与比较

·1.1单片机G2553控制选择

采用TI公司的MSP430G2553,该单片机具有超低功耗及强大的处理能力,并有高性能模拟技术及丰富的片上外围模块,其构成系统工作稳定,具有方便高效的开发环境,因此在性价比、功耗、速度都优越于其他控制器。

·1.2电机的比较与选择

方案一:

采用步进电机来带动旋转平台,步进电机是将电脉冲信号转变为角位移或线位移的控制元件,使得在速度、位置等控制领域用步进电机变的非常简单。

故不选择。

方案二:

运用直流电机带动旋转平台,直流动机具有调速性能好、起动容易、能够载重起动等优点,所以目前直流电动机的应用仍然很广泛。

因为步进电机转速不易调整,而直流电机机械特性和调节特性的线性度好,调速范围广、维护方便,满足题目要求,所以我们选择直流电机带动旋转平台。

·1.3电机驱动电路比较与选择

方案一:

中功率三级管直接搭建。

在电机驱动要求不高的地方可以由三极管直接搭建一个驱动电路,使用三级关搭建的电机驱动电路电路简单,但功率和性能一般。

对输入信号要求较高,输出性能只能满足一般要求。

方案二:

使用单片机MSP430G2553控制电机驱动芯片L298N。

L298N的驱动能力强,输入电压可变化范围大,是一块专用直流电机驱动芯片。

其各项性能都较好,但价格较高,在电机要求驱动器较高的地方使用较佳。

在该系统中,带动旋转平台的直流电机使用L298N驱动模块,很容易实现对电机较稳的控制,故采用方案二。

·1.4亮度自动调节电路比较与选择

方案一:

采用线性较好的光敏电阻,将光敏电阻串入控制电路的输出端再接入线阵LED灯,当光亮度变化时即可改变电流大小,从而达到亮暗调节。

但是电路不稳定,故不采取此方案。

方案二:

采用光敏电阻与TLC555搭建电路。

用TLC555、电容、电位器组成振荡电路产生稳定的PWM波输出。

而光敏电阻的变化引起输出PWM波占空比的变化,从而改变显示亮度。

电路简单,且易于控制,因此选定此方案作为环境亮度变化调节电路。

·2理论分析与参数计算

·2.1线状点阵LED驱动参数分析与计算

该线状点阵中LED驱动方法为普通的LED与电阻串联的方式来驱动点亮LED,该限流电阻计算公式如下:

根据设计要求,

可求得限流电阻:

经计算采用

电阻与LED串联即可。

·2.2线阵LED运动参数分析与计算

在电机的带动下,线阵LED依靠旋转平台进行旋转,设电机周期为

,LED完成需要时间为

,软件延时为

,它们之间存在下列关系:

只要保证

,经计算由

,线阵LED就能很好的地显示图文。

·2.3指针式秒表分析与计算

指针秒表完全通过软件来控制显示,设电机周期为

,LED完成需要时间为

,软件延时为

,存在下列关系:

保证

成立,确定LED完成需要时间为

,线阵LED就能很好的地显示秒表计时。

·2.4显示亮度自动调节分析与计算

采用TI的TLC555、电容

、电阻

和光敏电阻

等组成振荡电路产生稳定的PWM波输出。

则产生PWM波的周期、高电平及其占空比的计算公式如下:

光敏电阻的变化引起输出PWM波占空比的变化,从而改变显示亮度,即电流控制。

控制电流大小计算如下:

·3电路与程序设计

·3.1电路设计

·3.1.1系统总体方案设计

本系统将外接的12V电源给电机供电,4.2V电源为控制器供电,通过电源调压芯片LP2950-33LPR为系统提供3.3V电压。

单片机按照一定的算法控制电机的转动,使电机转动稳定以完成各种控制动作,总体设计框图如图1。

图1

·3.1.2系统电源设计

系统需要12V、3.3V电源,采用12V开关电源给直流电机供电,需要的3.3V电压则从4.2V锂电池通过TI公司的电源调压芯片LP2950-33LPR位系统提供3.3V电压,系统电源电路图见附图一。

·3.1.3单片机G2553控制电路的设计

控制电路主要有单片机MSP430G2553、串并转换芯片74HC164、16个限流电阻和16个LED组成的。

单片机很好地利用软件程序发送串行数据,通过串并转换芯片把从单片机发出的数据通过限流电阻并行送到16个LED,控制线阵LED显示图文,单片机G2553控制电路图见附图二。

·3.1.4亮度自动调节电路设计

通过采用TI公司的芯片TLC555与光敏电阻搭建电路。

用TLC555、电容、电位器组成振荡电路产生稳定的PWM波输出。

而光敏电阻的变化引起输出PWM波占空比的变化,从而改变显示亮度,实现亮度随外界环境变化而自动调节,亮度自动调节电路图见附图三。

`3.1.5起始标志杆检测电路设计

本电路采用霍尔传感器采集数据并检测标志杆,把霍尔传感器固定到旋转平台,一块小磁铁固定到标志杆上,并与霍尔传感器水平一条线放置。

当旋转平台边缘上网霍尔传感器经过标志位的小磁铁时,传感器感应到磁场发生变化,同时产生输出电压脉冲,并将此脉冲送入单片机。

起始标志杆检测电路图见附图四。

·3.2程序设计

·3.2.1主程序设计

当系统上电后单片机初始化后,先进行LED检测,按键触发计数选择显示不同的图文,程序则按照相应部分的程序算法执行,主程序流程图如图2。

图2

·4测试结果

·4.1测试仪器

示波器DS1302CA、万用表DT-9205

·4.2测试结果完整性

1.完成制作一个由16只LED构成的线状点阵及其控制电路,安装于可旋转的平台上,在平台的中心设置一个按键,用于功能的切换,电机带动平台以合适速度旋转。

2.开机时装置完成显示自检,能对点阵中16只LED逐个点亮,每只LED显示时间约为1秒,此时平台不旋转。

3.通过按键切换,实现16个同心圆图形分别顺序<由大到小)和逆序<由小到大)显示,每个同心圆图形显示时间为0.3秒左右。

4.LED显示亮度能依据环境亮度变化自动调节。

5.通过按键切换,显示字符“TI杯”,要求字符显示较稳定,无明显漂移。

6.通过按键切换,显示一个指针式秒表,该秒表以标志杆为起始标志,秒针随时间动态旋转,旋转一周的时长为60±1秒。

·4.3测试结果分析

经过测试,可以确定系统构架设计比较合理,可以很好确定旋转平台的中心,电路功能实现基本符合设计要求。

·5结束语

经过多日的辛勤努力,系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标,在硬件调试的过程中,我们遇到很多问题。

因为时间紧,工作量大,系统还存在许多可以改进的地方。

本次竞赛锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。

·参考文献:

[1]秦龙编著.《MSP430单片机常用模块与综合系统实例精讲》.北京:

电子工业出版社,2007.7

[2]沈建华等.《MSP430系列16位超低功耗单片机实践与系统设计》.北京:

清华大学出版社,2005.4

[3]郁有文等.《传感器原理及项目应用》.西安:

西安电子科技大学出版社.2008.6

[4]张剑平编著.《模拟电子技术教程》.北京:

清华大学出版社.2018.3

[5]龙治红、谭本军编著。

《数字电子技术》.北京:

北京理工大学出版社.2018.7

·附录一:

1.系统电源电路图<见附图一)

附图一

2.单片机G2553控制电路图见附图二

附图二

3.亮度自动调节电路图<见附图三)

附录三

4.起始标志杆检测电路图<见附图四)

附图四

5.电机驱动电路图<见附图五)

附图五

·附录二:

#include//单片机头文件

#defineCPU_F((double>1000000>

#definedelay_us(x>__delay_cycles((long>(CPU_F*(double>x/1000000.0>>//调用delay_ms(2000>。

延时2000MS

#definedelay_ms(x>__delay_cycles((long>(CPU_F*(double>x/1000.0>>//调用delay_us(x>。

延时Xus

#defineL_WRP1OUT&=~BIT5

#defineH_WRP1OUT|=BIT5

#defineL_CLKP2OUT&=~BIT0

#defineH_CLKP2OUT|=BIT0

#defineL_DAT0P2OUT&=~BIT1

#defineH_DAT0P2OUT|=BIT1

#defineL_DAT1P2OUT&=~BIT2

#defineH_DAT1P2OUT|=BIT2

#defineL_ENP2OUT&=~BIT3

#defineH_ENP2OUT|=BIT3

//#defineKEYP1。

//霍尔传感器A04E设置中断标志位

unsignedcharconstzimu[],aa[]。

unsignedchart=0。

unsignedcharm=0。

unsignedcharx=0,y=0。

/*********************************************************************************************

函数名:

关闭所有LED灯<操作硬件)

结果:

所有LED灯熄灭

**********************************************************************************************/

voidDISPLAY_OFF(void>

{

delay_us(50>。

//显示停留

L_WR。

H_WR。

}

/**********************************************************************************************/

/*********************************************************************************************

参数:

16位显示数据<下高位)

上面8位,e:

下面8位)

**********************************************************************************************/

voiddisplay(unsignedcharconstd,unsignedcharconste>//第1列横向显示程序

{

unsignedchari,a,b。

L_EN。

a=d。

b=e。

for(i=0。

i<8。

i++>

{

L_CLK。

if((a&0x80>==0x80>

H_DAT0。

else

L_DAT0。

if((b&0x80>==0x80>

H_DAT1。

else

L_DAT1。

H_CLK。

a<<=1。

b<<=1。

}

H_EN。

DISPLAY_OFF(>。

}

voiddisplay1(unsignedcharconstd,unsignedcharconste>//第1列横向显示程序

{

unsignedchari,a,b。

L_EN。

a=e。

b=d。

for(i=0。

i<8。

i++>

{

L_CLK。

if((a&0x80>==0x80>

H_DAT0。

else

L_DAT0。

if((b&0x80>==0x80>

H_DAT1。

else

L_DAT1。

H_CLK。

a<<=1。

b<<=1。

}

H_EN。

}

/****************************************************************************

时钟初始化

***************************************************************************/

voidOSCILLATOR_Init(void>

{

if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF>

{while(1>。

}//Ifcalibrationconstantserased,trapCPU!

!

BCSCTL1=CALBC1_1MHZ。

//Setrange

DCOCTL=CALDCO_1MHZ。

//SetDCOstep+modulation

BCSCTL3|=LFXT1S_2。

//SetLFXT1

IFG1&=~OFIFG。

//ClearOSCFaultflag

BCSCTL2|=SELM_1+SELS+DIVM_0。

//SetMCLK

}

/*********************************************************************************************

函数名:

IO初始化程序

**********************************************************************************************/

voidinit(void>//初始IO接口状态

{

P1DIR=0xff。

P2DIR=0xff。

P1OUT=0xff。

P2OUT=0xff。

}

/*****************************************************************************

定时器初始化

*************************************************************************/

voidTIMER(>

{

TACTL=TASSEL_2+MC_1。

//SMCLK,Contmode使计数模式为增计数

CCTL0=CCIE。

//CCR0interruptenabled

CCR0=14000。

//初始值为14000相当于1s

}

/*************************************************************************

扫描中断初始化函数

******************************************************************************/

voidZ_init(>

{

P1DIR&=~BIT4。

P1DIR&=~BIT0。

P1SEL&=~BIT4。

P1SEL&=~BIT0。

P1IFG&=~BIT4。

P1IFG&=~BIT0。

P1IE|=BIT4。

P1IE|=BIT0。

P1IES&=~BIT4。

P1IES|=BIT0。

}

/******************************************************************************/

voidLDE_0(>//16个LED逐个亮1S

{

unsignedchari=0。

for(i=0。

i<32。

i+=2>

{

display1(aa[i],aa[i+1]>。

delay_ms(1000>。

}

//P2OUT|=BIT2。

//启动电机

delay_ms(10>。

_EINT(>。

//开中断

}

/***************************************************************************/

voidLED_1(>//同心圆从大到小0.3S

{

unsignedchari=0。

for(i=0。

i<32。

i+=2>

{

display1(aa[i],aa[i+1]>。

delay_ms(300>。

}

}

/***************************************************************************/

voidLED_2(>//同心圆从小到大0.3S

{

unsignedchari。

for(i=32。

i>0。

i-=2>

{

display1(aa[i-2],aa[i-1]>。

delay_ms(300>。

}

}

/*****************************************************************************/

voidLED_3(>//TI杯显示

{

unsignedchara。

unsignedintc=0。

//数据指针

for(a=0。

a<55。

a++>

{

display(zimu[c],zimu[c+1]>。

c=c+2。

//产生显示一列移位

}

delay_ms(25>。

delay_us(700>。

}

/****************************************************************************/

voidLED_4(>//指针式秒表

{

unsignedchari。

y++。

if(y==30>

{

y=0。

x++。

}

if(x==60>x=0,y=0。

for(i=61-x。

i>1。

i-->

{

delay_us(1000>。

}

display(0xff,0xff>。

//TIMER(>。

}

/*****************************************************************************

函数名:

主函数

******************************************************************************/

voidmain(void>

{

//Stopwatchdogtimertopreventtimeoutreset

WDTCTL=WDTPW+WDTHOLD。

OSCILLATOR_Init(>。

//时钟初始化

init(>。

//IO初始程序

Z_init(>。

//中断初始化

LDE_0(>。

//启动自检开中断

while(1>

{}

}

/**************************************************************************/

#pragmavector=PORT1_VECTOR//霍尔中断

__interruptvoidport_1(void>

{

if(P1IFG&BIT0>

{

delay_ms(1>。

if(P1IFG&BIT0>

{

t++。

if(t==5>t=1。

P1IFG&=~(BIT0>。

}

}

if(P1IFG&BIT4>

{

//delay_ms(1>。

P1IFG&=~(BIT4>。

if(t==1>LED_1(>。

if(t==2>LED_2(>。

if(t==3>LED_3(>。

if(t==4>LED_4(>。

}

}

//TimerA0interruptserviceroutine

#pragmavector=TIMER0_A0_VECTOR

__interruptvoidTimer_A0(void>

{

m++。

if(m>60>m=0。

}

/******************************************************************************

字幕数组

*******************************************************************************/

unsignedcharconstaa[]={//从外到内,一次点亮

0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,

0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00,

}。

unsignedcharconstzimu[]={//(取码:

从上到下从左到右,纵向8位下高位)

//TI杯

0x04,0x02,0x04,0x01,0x84,0x00,0xE4,0x0F,//不

0x1C,0x00,0x84,0x00,0x04,0x01,0x04,0x06,

0x04,0x00,0x00,0x00,0x00,0x00,

0x10,0x04,0x10,0x03,0xd0,0x00,0xFe,0x0F,//木

0x50,0x00,0x90,0x00,0x10,0x04,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:

I--*/

/*--宋体12。

此字体下对应的点阵为:

宽x高=8x16--*/

0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,

0x08,0x08,0x08,0x08,0x00,0x08,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--文字:

T--*/

/*--宋体12。

此字体下对应的点阵为:

宽x高=8x16--*/

0x08,0x00,0x08,0x00,0x08,0x00,0xF8,0x0F,

0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

}。

申明:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2