基于51单片机的旋转LED多变换模式时钟的设计报告(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于89S52单片机的旋转LED数字

时钟的设计报告

学部:电子信息与电气工程学部

小组成员信息

大连理工大学

Dalian University of Technology

基于89S52单片机的旋转LED多变换模式时钟的设计报告1.总体设计思路

关于原理:

人眼具有视觉暂留的错觉,无法区分间隔小于0.1s的图像。

因此,我们所要设计的旋转时钟大体有两部分构成:单片机控制系统部分和电机转动部分。

单片机控制部分由一系列的二极管及单片机最小系统组成。主要用来控制各二极管的亮与灭、计时等,以正确显示相应时间所对应的数字。

电机转动部分是一个转速约为5400rpm的硬盘电机,带上负载后,转速有所下降,电机带动单片机系统板和外围LED板转动。

这样,旋转时钟的基本框架就已构成:通过单片机控制二极管的亮灭,利用电机的转动,使人眼产生视觉暂留的错觉,呈现出数字时钟的走动的图像。

关于计时和电机转速监测的实现:

开启单片机内部的Timer0,晶振频率f=12MHz,t=Val(FFFF-MMLL+1)(us)TH0=MM,TL0=LL。

关于数字显示模式的实现:

先对0—9十个数字进行编码,这里应用5X7点阵相关特性,例如,若要用点阵实现4的显示,则对5X7点阵作如下编码:1110111、1000111、0000001、1110111、0000000。通过程序控制每一行显示0.02s。每列二极管在小于0.1秒内转动一圈时,人眼所看到的就是各位置二极管发光时所产生的图像的重合。因此,数字显示模式得到实现。

关于英文短语的实现:

原理与数字显示模式极为相似,先构建字模,然后再通过控制时序,使之显示英文短语,如“I Love You”。

2.

主体框架图:

3.电路原理图及PCB

3.1直流线性稳压电源:

通过9V 电池加市售的三端集成稳压芯片7805来实现给单片机供电,由于单片机要随电机高速旋转,所以选用9V 电池,电池固定在单片机上方,与转轴在同一位置,有效地减小离心力,防止电池被甩出。

适应硬盘转速

3.2单片机主控模块:

通过 P1口下载程序, P0 , P2口控制下层板上的16个贴片LED,低电平有效

3.2.1电路原理图:

3.2.2 PCB图:

3.3 LED显示模块:3.3.1电路原理图:

3.3.2 PCB图:

4.单片机程序:

4.1英文短语“I Love You”程序:

#include

#define uint unsigned int

#define uchar unsigned char

uchar code I[]={0x7d,0x01,0x7d};

uchar code L[]={0x01,0xfd,0xfd,0xfd}; uchar code o[]={0xe3,0xdd,0xe3};

uchar code v[]={0xc7,0xfb,0xfd,0xfb,0xc7};

uchar code e[]={0xe3,0xd5,0xd5,0xe5};

uchar code Y[]={0x3f,0xdf,0xe1,0xdf,0x3f};

uchar code u[]={0xc3,0xfd,0xfd,0xc3};

//组成字母各自的字表,类似点阵

void delay(uint t)

{

register uint bt;

for(;t;t--)

for(bt=0;bt<25;bt++)

;

} //定义延时函数,延时时间较短,能用延时更精确调节显示周期

void main()

{

char i;

while(1)

{

for(i=3;i>=0;i--)

{P0=u[i];delay(2);}

P0=0xff;

delay(3);

//显示u

for(i=2;i>=0;i--)

{P0=o[i];delay(2);}

P0=0xff;

delay(3);

//显示o

for(i=4;i>=0;i--)

{P0=Y[i];delay(2);}

P0=0xff;

delay(10);

//显示Y,一个单词过后增加LED灯灭延时

for(i=3;i>=0;i--)

{P0=e[i];delay(2);}

P0=0xff;

delay(3);

//显示e

for(i=4;i>=0;i--)

{P0=v[i];delay(2);}

P0=0xff;

delay(3);

//显示v

for(i=2;i>=0;i--)

{P0=o[i];delay(2);}

P0=0xff;

delay(3);

//显示o

for(i=3;i>=0;i--)

{P0=L[i];delay(2);}

P0=0xff;

delay(10);

//显示L,一个单词过后增加LED灯灭延时

for(i=2;i>=0;i--)

{P0=I[i];delay(2);}

//显示I

P0=0xff;

delay(106);

//106是估算转速周期所得,目的是为了显示与转速同步,尽量定住显示的信息}

}

4.2数字时钟程序:

#include

#define uint unsigned int

#define uchar unsigned char

uchar code num[10][5]={

{0x83,0x75,0x6d,0x5d,0x83},

{0xff,0xbd,0x01,0xfd,0xff},

{0xbd,0x79,0x75,0x6d,0x9d},

{0x7b,0x7d,0x5d,0x2d,0x73},

{0xe7,0xd7,0xb7,0x01,0xf7},

{0x1b,0x5d,0x5d,0x5d,0x63},

{0xc3,0xad,0x6d,0x6d,0x03},

{0x30,0x70,0x71,0x60,0x10},

{0x93,0x6d,0x6d,0x6d,0x93},

{0x90,0x6d,0x6d,0x6b,0x87}};

//0~9字表

uchar code maohao[]=

{0xff,0x93,0x93,0xff,0xff};//":"字表

相关文档
最新文档