基于51单片机的旋转LED多变换模式时钟的设计报告(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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};//":"字表