旋转led时钟程序

合集下载

led旋转时钟原理

led旋转时钟原理

led旋转时钟原理LED旋转时钟是一种利用LED光源和旋转装置来显示时间的装置。

它的外观设计独特,能够通过旋转的方式创造出立体感,给人一种时光流转的感觉,因此备受人们的喜爱。

本文将介绍LED旋转时钟的原理和工作方式。

一、LED光源LED(Light-Emitting Diode,发光二极管)是一种可以将电能转化为光能的半导体器件。

它具有小尺寸、低功耗、长寿命等特点,在照明、显示等领域得到广泛应用。

LED旋转时钟采用LED作为光源,通过控制LED的亮灭来显示时间。

二、旋转装置LED旋转时钟通过旋转装置将LED光源进行旋转,以实现时间的显示。

旋转装置一般采用电机加传动结构来驱动LED的旋转,使LED光源沿着特定路径进行循环运动。

旋转的速度和方向可以通过控制电机的转速和转向来实现。

三、显示时间原理LED旋转时钟能够利用LED光源的高亮度和高刷新率来显示数字。

它采用人眼视觉的暂留效应,通过快速的亮灭切换来创造出连续的数字图像。

LED光源通过旋转装置的运动,在一定角度上快速闪烁,形成一个圆形或椭圆形的轨迹。

在人眼视觉暂留的效应下,这些离散的亮点形成了一个完整的数字。

LED旋转时钟一般由多个LED模块组成,每个LED模块负责显示一个数字或其他字符。

LED模块在旋转过程中按照预设的顺序亮灭,通过不断刷新的方式呈现出数字的变化。

通过控制LED的亮灭时间和顺序,可以实现各种数字图案的显示。

四、时间精度LED旋转时钟的时间精度取决于旋转装置的稳定性和控制系统的精确度。

较高精度的LED旋转时钟可以做到秒级或毫秒级的时间显示,而较低精度的LED旋转时钟可能会有一定的时间误差。

五、附加功能除了显示时间,部分LED旋转时钟还可以提供其他附加功能,如闹钟、温湿度显示、音乐播放等。

这些功能通过内置的传感器和控制模块来实现,使LED旋转时钟成为一种功能更为强大的装置。

六、使用场景LED旋转时钟适用于家庭、办公室、学校等各种场景。

旋转led电子时钟程序

旋转led电子时钟程序
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
//*************************************************/
/*************************************************
};
/*********************************************************************************************
函数名:LED显示用延时函数
调 用:delay0();
参 数:无
返回值:无
结 果:占用CPU方式延时500微秒时间
备 注:晶振11.0592m
/*********************************************************************************************/
void delay0(void) //误差 -0.46875us
{
unsigned char a,b;
unsigned char code xq[] = {
//(取码:从上到下从左到右,纵向8位下高位)
//"日"
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,
0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,
0x82,0x20,0x82,0x20,0x82,0x20,0xFF,0x7F,
字幕数组
*********************************************************************************************/

基于单片机的LED旋转时钟设计与制作

基于单片机的LED旋转时钟设计与制作

《旋转LED时钟设计》题目:基于单片机的旋转LED时钟设计学院:机电工程学院专业: 08电子科学与技术学号: 081292074 姓名:邱文2011 年12 月20 日摘要:现在是一个知识爆炸的新时代。

新产品、新技术层出不穷,电子技术的发展更是日新月异。

可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。

近年来,随着电子产品的发展,人们对时钟的要求越来越高,而在对要求高之余,又要讲究有创意,新奇,所以在这个基础上设计一款既能满足人们的要求,又要有创意的时钟装置是很有必要的,贴片LED旋转屏时钟在可以计时的基础上,又能够满足人们对事物要有创意的需求。

我们组本次设计采用的是POV LED(POV即persistence of vision视觉暂留)技术,它指的是,借助人的视觉暂留效果,通过少量LED灯的机械扫描方式来显示各种字符或者图像。

其原理很简单,就是靠电动机带动一排LED灯绕电机轴高速旋转,与此同时单片机控制各个LED灯在旋转平面相应的位置上点亮,构成一幅点阵画,虽然它们不是同时点亮的,但由于人的视觉暂留效果,会误以为每个点都是同时点亮的。

其具体应用是电影的拍摄和放映。

原因是由视神经的反应速度造成的,其时值是二十四分之一秒。

是动画、电影等视觉媒体形成和传播的根据。

关键字:单片机、LED、时钟、视觉暂留、红外接收、扫描显示1、设计任务与要求1.1 设计任务设计一个旋转LED指针显示时钟。

1.2 技术指标能准确显示即时的时间,旋转盘面平稳,显示的数字稳定,时钟误差小。

2、方案比较与论证单片机、LED等电路必须安装在高速旋转的电动机上面,无法采用电线进行供电,使系统供电变得极为麻烦,常见的方法有3种。

方案一:用无线输电的方法,无触点,长寿命;方案二:用电动机电刷的方法,简单有效;请注意:这样寿命很短,必要时请自行在电路板上加焊一层耐磨导电层,如果电刷触点不够光洁以及接触压力大,几小时就可以将线路板上的铜皮磨穿。

用贴片LED制作的旋转屏数字钟(有图精华版)

用贴片LED制作的旋转屏数字钟(有图精华版)
单片机最明显的优点是价格便宜,从几元人民币到几十元人民币。这是因为这类芯片的生产量很大,技术也很成熟。
其次,单片机的体积也远小于其他两种方案。单片机本身一般用40引脚封装,当然功能多一些的单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只有8只引脚。
当然,单片机无论在速度还是容量方面都小于其他两种方案,但是在实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能。例如,控制电冰箱的控制器就不需要使用嵌入式系统,用一片52就可以轻松实现。所以应用的关键是看能否够用,是否有很好的性能价格比。52系列的单片机已经面世多年,依然没有被淘汰,还在不断发展中,这就说明是他有广阔的应用前景
This design USES LED by a row rotating screen patch LED lamp, make its water use of visual remain high rotation speed, high resolution, forming the effect of dot matrix display character, screen, can design of Chinese characters, even, and design looks and the suspended in the air transparency, very dazzle eye. Plus single-chip microcomputer control, but also become a unique piece of digital clock. When the human eye, light observed scenery in brain nerve, should be introduced into signals through a short time, light effect ends, the visual image is not immediately disappear, the residue after the visual says "as", visual this phenomenon is called "visual temporarily leave". The concrete application is film and screened. Reason is caused by the response speed of the optic nerve, its duration is 24 points of a second. Is animation, movies and other visual media according to the formation and transmission.

基于51单片机的旋转LED时钟详细制作介绍

基于51单片机的旋转LED时钟详细制作介绍

{
xz=8;
key1=1;key2=0;
EA=1;
IT0=1;EX0=1;
IT1=1;ET0=1;
TMOD=0x11;
TH0=-5000/256; TL0=-5000%256;
TR0=1; for(;;){
Delay(10);
if(sw==1) {display_clock();sw=0;}
}
}
Delay(20);
P1=0xff;P2=0xff;
}
} void display_clock(void)
{
key1=!key1;key2=!key2;
disp1=BUFFER[3]/10;disp2=BUFFER[4]-(BUFFER[4]/10)*10;
ii=disp1*16;jj=disp2*16;
0x00,0x00,0x70,0x00,0xf8,0x40,0x88,0x40,
// -9-
0x88,0x40,0x88,0xc0,0xff,0x80,0x7f,0x00,
0x00,0x00,0x00,0xc0,0x01,0x80,0x03,0x00,
// -/-
0x06,0x00,0x0c,0x00,0x18,0x00,0x30,0x00,
}; unit disp1,disp2,key1,key2;
unit ii,jj;
unit i,sw,xz; void Delay(unit ms){
ms=ms*3;
while(--ms);
}
void num_led(int kk, int tt)
{
int jj;
for(jj=0;jj<8;jj++){

纯手工打造摇摆LED时钟

纯手工打造摇摆LED时钟

纯手工打造摇摆LED时钟来源:网友推荐作者:周正华字号:[大中小]看到市场上正在流行的时尚商品——摇摆LED 时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY 一个的冲动。

不就是一个流水灯吗?有什么难的?!于是,一个单片机项目就这样开始了。

然而动手以后才知道问题并非想象那样简单,因没有任何现成的资料,机械的、电子的和编程的问题一大堆,一个一个需要自己来解决。

经历二十多天的苦战和无数次的修改与调试,作品终于完成,基本达到预先要求。

现将制作资料整理出来,与广大DIY 爱好者分享。

一. 整体方案本制作是根据视觉暂留原理, 让一排8 只LED作往复运动, 在空中呈现八个字符的显示屏,可显示数字或英文字符。

开机后先显示“Welcome!”欢迎字符(见图1), 再进入时钟显示状态。

显示屏同时显示“时” 、“分” 、“秒”信息,用“:”分隔(见图2)。

图1 开机画面图2 运行状态显示分“正常运行”、“调分”和“调时” 三种状态。

当处于调整状态时,调整的项会闪现,以便识别。

为此,设置三个调整按键,一个为“状态键”,一个为“加法键”,一个为“减法键”。

(见图3)图3 按键的设置图4 音圈电机组件摇棒的动力部分采用从废旧硬盘拆下的音圈电机(见图4),驱动采用直流电机驱动方式。

结构方面,将音圈电机直接安装在万用板上,将万用板的四周用四根螺柱与一透明有机板结合成一体,构成支撑摇棒底座。

(见图5, 图6)。

图5 万用板与有机板构成底座图6 底座侧面二. 实作要点1.主板的结构布局见图7。

图7 主板布局图8 摇棒上的LED2.LED 的焊接,将LED 两脚跨接在电路板两端的方式进行焊接。

使LED 紧密排列在一起。

3.摇棒上的LED 与主板上的信号用柔性排线连接,音圈电机供电占2 位,LED 信号传输占9 位,所以至少要11 位的排线。

(见图9)图9 排线与拉簧图10 拉簧4.为保持摇棒的平衡, 在摇棒接近旋转轴的两端加装两只拉簧,这两只拉簧的规格尽量保持一致,弹性强弱要适中,最好可多找几种规格的试试。

旋转LED电子钟led

旋转LED电子钟led
目前市场上的 LED 屏基本上均为平板 LED 屏,这种屏具有显示稳定,显示内容 易修改的优点。但是平板显示屏的原理决定了显示屏上的每一像素点均与单独的 LED 一一对应,这必然造成平板显示系统造价过高显示控制系统庞大的等缺点,而且由于 几何机构的限制,决定了平板显示屏的视场较小。而新型的旋转 LED 屏可以克服平板 LED 屏的上述不足—它以机械转动扫描方式代替逐行扫描,使用的 LED 数量大大减 少,这使成本大大减低,而且可是屏幕范围达到了 360°。
本科学生毕业设计
旋转 LED 电子钟的设计
系部名称: 专业班级: 学生姓名: 指导教师: 职 称:
电子工程系
黑龙江工程学院 二○ 年 月
The Graduation Design for Bachelor's Degree
The Design of Multifunctional Clock Based on MCU
黑龙江工程学院本科生毕业设计
第1章 引 言
1.1 课题研究的目的意义
LED 电子显示屏是随着计算机及相关的微电子﹑光电子技术的迅猛发展而形成的 一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组成可变面积 的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本 低等特点,逐步开始普及。广泛应用于排队系统,报站系统,商业广告等,走进人们 的生活。LED 显示屏是多种综合应用的产品,涉及光电子学、半导体器件、数字电子 电路、大规模集成电路、单片机及微机等领域,设计要求基于 LED 点阵实现电子宣传 广告屏的设计,实现对文字和图片信息的动态显示,达到信息传播、宣传的作用。
另外 LED 旋转显示器并没有被人们广泛认知,作为电子爱好者就应该把新鲜有趣 的电子作品发扬光大。论文中我详细地叙述了扫描显示的原理,介绍了各种扫描显示 的电子作品。通过对这些类似作品的比较,再加入我自己的想法和创意,确立了我所 要制作的旋转时钟的方案。接着具体说明了制作旋转时钟所需要的硬件设备的功能与 特性,主要包括单片机 STC89C52、时钟芯片 DS1302 以及红外遥控芯片 TC9012。之 后进行软件设计,画出各程序的流程图,并对重要程序代码作了解释。最好通过软件 调试得出结论,证明了我所设计的旋转时钟方案是可行的。

多功能旋转电子钟使用说明

多功能旋转电子钟使用说明

多功能旋转电子钟安装调试说明功能说明:1.本旋转LED电子钟采用STC89C52单片机作为控制芯片,DS1302时钟芯片为走时依据,确保了走时的精确度。

24小时制走时,60个发光二极管模拟石英钟的秒针走时,一秒亮一个,60秒走完一圈,走完一圈则分钟位数码管加1,时时同步。

主数码管为4位时钟数码管,显示时、分,结合功能按键,可显示闹钟时间和实时温度(需加装18B20);3个2位数码管分别显示年、月、日;1个1位数码管显示星期。

2.整点报时功能,每天7-20点整点报时,报时时蜂鸣器响,同时秒灯高速旋转。

3.有一路闹钟功能,开机闹钟默认关闭。

S3为闹钟的开关键。

默认闹钟时间为6:35。

闹钟响时为30秒钟。

4.掉电继续走时,数码管不显示。

来电时间继续走时,不用调整。

按键功能说明:1.S1键为调整按键。

开机显示时分00:08。

首次使用一定要启动时钟芯片走时,不然时钟一直为00:08,不走时。

按S1键一次,时位数码管闪烁,这时按S2数值加1,按S3数值会减1。

再按一次S1键,分位数码管闪烁,同理按S2,S3键来调整分的时间。

调整完后分数码管还在闪烁,同理再按S1(S2、S3),分别调整年、月、日、星期,调整完后再按S1一次(或等待5秒),进入走时状态。

2.S2键为时间、闹钟、温度(安装18B20)切换键。

正常显示时间模式下,按S2一次则可显示闹钟时间,按二次显示当前温度(如29.6C),按第三次则显示正常显示模式(即走时时间)。

在显示闹钟时,按S1键一次则闹钟的时位数码管会闪烁,这时可以按S2和S3键时行调整。

按S1键二次则闹钟的分位数码管会闪烁,同理可按S2和S3键进行闹钟时间调整。

3.S3为闹钟的开关键。

正常显示时间模式下,按S3键一次则打开闹钟,同时红色指示灯(D73) 点亮,按二次则关闭闹钟,同时关闭红色指示灯(D73)。

安装简单说明:先安装体积小的器件,如电阻、贴片芯片,集成芯片,再安装较大体积元件,如三极管、电容等。

纯手工自制摇摆LED时钟,附原理图、驱动程序、制作步骤

纯手工自制摇摆LED时钟,附原理图、驱动程序、制作步骤

0x6C,0x92,0x92,0x92,0x6C,0x00, // -8-08 0x62,0x92,0x92,0x94,0x78,0x00, // -9-09 0x00,0x00,0x00,0x00,0x00,0x00, // - -10 0x00,0x00,0xFA,0x00,0x00,0x00, // -!-11 0x04,0x08,0x10,0x20,0x40,0x00, // -/-12 0x00,0x6C,0x6C,0x00,0x00,0x00, // -:-13 0x3E,0x48,0x88,0x48,0x3E,0x00, // -A-14 0xFE,0x92,0x92,0x92,0x6C,0x00, // -B-15 0x7C,0x82,0x82,0x82,0x44,0x00, // -C-16 0xFE,0x82,0x82,0x82,0x7C,0x00, // -D-17 0xFE,0x92,0x92,0x92,0x82,0x00, // -E-18 0xFE,0x90,0x90,0x90,0x80,0x00, // -F-19 0x7C,0x82,0x8A,0x8A,0x4E,0x00, // -G-20 0xFE,0x10,0x10,0x10,0xFE,0x00, // -H-21 0x00,0x82,0xFE,0x82,0x00,0x00, // -I-22 0x04,0x02,0x82,0xFC,0x80,0x00, // -J-23 0xFE,0x10,0x28,0x44,0x82,0x00, // -K-24 0xFE,0x02,0x02,0x02,0x02,0x00, // -L-25 0xFE,0x40,0x30,0x40,0xFE,0x00, // -M-26 0xFE,0x20,0x10,0x08,0xFE,0x00, // -N-27 0x7C,0x82,0x82,0x82,0x7C,0x00, // -O-28 0xFE,0x90,0x90,0x90,0x60,0x00, // -P-29 0x7C,0x82,0x8A,0x84,0x7A,0x00, // -Q-30 0xFE,0x90,0x98,0x94,0x62,0x00, // -R-31 0x64,0x92,0x92,0x92,0x4C,0x00, // -S-32 0x80,0x80,0xFE,0x80,0x80,0x00, // -T-33 0xFC,0x02,0x02,0x02,0xFC,0x00, // -U-34 0xF8,0x04,0x02,0x04,0xF8,0x00, // -V-35 0xFE,0x04,0x18,0x04,0xFE,0x00, // -W-36 0xC6,0x28,0x10,0x28,0xC6,0x00, // -X-37 0xC0,0x20,0x1E,0x20,0xC0,0x00, // -Y-38 0x86,0x8A,0x92,0xA2,0xC2,0x00, // -Z-39 0x24,0x2A,0x2A,0x1C,0x02,0x00, // -a-40 0xFE,0x14,0x22,0x22,0x1C,0x00, // -b-41 0x1C,0x22,0x22,0x22,0x10,0x00, // -c-42 0x1C,0x22,0x22,0x14,0xFE,0x00, // -d-43 0x1C,0x2A,0x2A,0x2A,0x10,0x00, // -e-44 0x10,0x7E,0x90,0x90,0x40,0x00, // -f-45 0x19,0x25,0x25,0x25,0x1E,0x00, // -g-46 0xFE,0x10,0x20,0x20,0x1E,0x00, // -h-47 0x00,0x00,0x9E,0x00,0x00,0x00, // -i-48 0x00,0x01,0x11,0x9E,0x00,0x00, // -j-49 0xFE,0x08,0x14,0x22,0x02,0x00, // -k-50 0x00,0x82,0xFE,0x02,0x00,0x00, // -l-51

LED旋转时钟的设计毕业论文

LED旋转时钟的设计毕业论文

LED旋转时钟的设计毕业论文目录引言 (1)1. 毕业设计容介绍 (1)1.1 毕业设计题目 (1)1.2 本课题研究的容 (1)1.3 设计要求 (1)1.4 本课题研究目的及意义 (1)1.5 本课题设计准备 (2)2. 原理介绍 (3)2.1 单片机介绍 (3)2.2 芯片的选择 (3)2.3 单片机STC15F2K08S2介绍 (3)2.4 贴片发光二极管原理介绍 (4)2.5 红外对管原理介绍 (5)2.6 稳压管原理介绍 (5)2.7 视觉暂留介绍 (5)2.8 旋转时钟的实现 (6)3. 毕业设计总体框架 (6)3.1 毕业设计框架图 (6)3.2 总体设计思路 (7)3.3 关于计时和电机转速监测的实现 (8)4. 实验步骤 (8)4.1 详细具体步骤 (8)4.2 硬件设计 (9)4.2.1电路原理图 (9)4.2.2电路各部分功能以及焊接 (10)4.3 程序设计 (11)4.3.1程序设计 (11)4.3.2旋转时钟程序下载 (13)5. 调试过程 (13)6. 总结 (16)谢辞 (18)参考文献 (19)附录 (20)引言现如今大多数人们的家庭使用的时钟主要还是传统意义上的时钟,传统意义上的时钟就是固定的表盘还有时针、分针、秒针,其显示效果非常的单一,不美观并且功能单一。

然而对于科技发展迅速的如今,层出不穷的各种物品越来越多,单一传统的时钟根本不能满足当代人的要求,现如今很多的人就得时钟不但用来看时间还应该是一件很好的装饰品的。

LED旋转时钟,就是基于51单片机的LED 旋转时钟,它的工作原理是利用电机带动LED灯所在的电路板高速旋转,单片机控制LED灯的亮灭,再依靠人眼的视觉暂留现象而形成的一种时钟。

它外型独特,样式新奇,它不同于我们平时使用的时钟,没有传统时钟的单一,新颖的设计很有其吸引力。

1. 毕业设计容介绍1.1 毕业设计题目LED旋转时钟1.2 本课题研究的容本课题设计的主要容是基于单片机的LED旋转时钟。

(整理)LED旋转时钟原理.

(整理)LED旋转时钟原理.

1、绪论旋转时钟造型奇特,结构简单,但却能显现出炫丽的画面。

从在网上看到旋转时钟的视频的那一刻起,我就决心做一个属于自己的LED旋转时钟。

我开始在网上收集各种有关旋转时钟的资料,网上大致分几种模式,简单的只是刷屏读取字模显示汉字,难度大一点的则可以显示数字钟、表盘钟、动画,复杂则可以显示动态表锤、温度以及变色。

通过学习,我掌握了旋转时钟的原理及其程序算法,通过半个月的努力,我在别人的基础上做出了属于我自己的个性时钟,可以显示数字钟、表盘钟、动画、图片、温度、螺旋线以及颜色变换,并且能通过遥控控制电机的开停、LED显示的开启和关闭。

2、旋转时钟的原理旋转时钟是一种利用人眼的视觉暂留,让LED高速旋转形成LED屏,显示文字、数字及图形的LED屏显示的电子产品。

主要构成:显示部分:在AT89S52单片机的P0、P2口上接上16个贴片的LED;在分别用P1.0、P1.1和P1.2上接上一个三极管9012,分别用三极管驱动4个贴片LED,共30个贴片,我这里用了两列贴片,总共有60个贴片二极管来完成显示。

测速定位:用霍尔传感器CS3144来测定转速,并告知二极管即将显示的内容。

温度:用DS18B20温度传感器来测温。

取模:采用取字模软件将字符和图案自动生成扫描码。

旋转部分:旋转由一个24v直流电机提供20r/s以上的转速。

遥控部分:由一个遥控器控制两个接收模块来完成。

供电:系统采用可充锂电池供电,这里我设计了一个电池的充放回路,断开自锁开关,插上USB供电线即可给锂电池充电,巧妙的解决了单片机的供电问题。

电机的供电则由一个24V1A的适配器来提供。

色彩变换:由两个三极管来控制两列贴片的通断来完成。

变色需要程序结合电路实现,这个电路运用到旋转时钟上也是第一次。

2.1、显示板60高亮贴片LED形成两列显示部件,旋转板上有一个霍尔传感器,在电机上贴有一个磁钢,旋转板每旋转一周,霍尔传感器就会经过一次磁钢位置,并感应到信号,由于霍尔是接到外终端P3.2上,这个信号又被称为过零信号,有了这个信号,CPU就可以在旋转的过程中实时检测计算指针板所处的不同位置,并根据指针所处的不同位置,点亮相应的LED,利用人眼的视觉暂留效应,形成完整的显示画面。

单片机课程设计---基于STC89C52的旋转LED时钟

单片机课程设计---基于STC89C52的旋转LED时钟

题目名称基于STC89C52的旋转LED时钟一、课程设计的内容用STC89C52单片机制作一测温仪旋转LED时钟:1.设计并绘制硬件电路图;2.焊接好元器件;3.编写程序并将调试好的程序固化到单片机中。

二、课程设计的要求与数据单片机采用STC89C52芯片,时钟芯片采用DS1302。

用电机带动驱动板旋转系统上电后,驱动板的LED将会在电机带动下动态扫描出时钟画面,并且可以用红外遥控调时。

三、课程设计应完成的工作1. 完成软件、硬件的设计,并进行硬件的焊接制作,并将调试成功的程序固化到单片机中,最后进行硬件与软件的调试;2.撰写设计说明书。

四、课程设计进程安排五、应收集的资料及主要参考文献谭浩强.C语言程序设计(第二版)。

北京:清华大学出版社,1999年12月广东工业大学课程设计任务书 (1)摘要 (4)一、课题设计的要求及目的 (5)1.1设计要求 (5)1.2课程设计目的 (5)二、设计方案 (5)三、系统框图与工作原理 (8)3.1单片机系统工作架构 (8)3.2系统工作原理 (10)四、设计元器件说明 (10)4.1PLCC STC89C52RC简介 (10)4.2 74HC573芯片与光电传感器简介 (12)4.3 红外简介 (13)4.4 DS1302、LM7805芯片简介 (15)4.5 LED 动态显示原理 (17)五、系统硬件电路设计 (18)六、系统软件设计 (19)6.1 单片机解码红外信号程序 (19)6.2 单片机读写DS1302程序 (22)6.3自适应转速 (25)6.4 数字显示模式 (26)6.5指针显示模式 (26)七、总结与体会 (27)八、参考文献 (27)附录A 完整源程序 (28)附录B 实物图 (41)旋转LED钟,在国外一般称为“螺旋桨时钟”(propeller clock),是利用“视觉暂留”原理制作而成。

将单片机控制的LED流水灯设备稍作改进,让它动起来,就能神奇地显示各种字符或图案,其效果如浮在空中一般。

旋转LED灯程序(51单片机)

旋转LED灯程序(51单片机)

飘飞在空中的文字(详情咨询QQ:278540660)一、实物图(夜晚可以观测到飘在空中的文字,美!!!)二、部分代码/***************************************************************main. c***************************************************/#include<display.h>void main(){EX0init();TIM0init();Init_DS1302();while(1){time_set(IRcord[2]);IRcord[2]=0;if(time_love==0){if(time_onoff==0){ds1302_read_time();Dig_time();}else{Dig_time();}}else{Display_love();}while(!flag);flag=0;}}/***************************************************************redco n.h**************************************************/#define uchar unsigned char#define uint unsigned intsbit IR=P3^2;uchar irtime; //中断次数uchar IRcord[4]; //记录接收到的四个字节数据uchar irdata[33]; //接收到的32个二进制bituint flag=0;uchar nums=0;uint timelate=0;void TIM0init(void) //定时器0初始化{TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值(0.255ms一次中断)--晶振频率的十二分之一ET0=1; //开中断TR0=1;}void EX0init(void){IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1; //使能外部中断0IT1=1; //指定外部中断1下降沿触发,INT0 (P3.3)EX1=1; //使能外部中断1EA = 1; //开总中断}void Ircordpro(void) //红外码值处理函数{uchar i, j, k;uchar cord,value;k=1;for(i=0;i<4;i++) //处理4个字节{for(j=1;j<=8;j++) //处理1个字节8位{cord=irdata[k];if(cord>7) //1.125ms为0 2.25ms为1 0.255*7作为稳定判断值value|=0x80;if(j<8){value>>=1;}k++;}IRcord[i]=value;value=0;}}void EX1_ISR (void) interrupt 2 //外部中断0服务函数{static uchar i; //接收红外信号处理static bit startflag; //是否开始处理标志位if(startflag){if(irtime<60&&irtime>=35) //连续发送两个32位数据间隔不可预知性) 尤为重要{i=0;}irdata[i]=irtime; //存储每个电平的持续时间irtime=0;i++;if(i==33){i=0;startflag=0;Ircordpro();}}else{startflag=1;irtime=0;}}void tim0_isr (void) interrupt 1 using 1{irtime++;}void EX0_ISR (void) interrupt 0{flag=1;nums++;if(nums>=20){nums=0;timelate++;if(timelate>=4){timelate=0;}}}/***************************************************************DS130 2.h**************************************************/#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar time_buf[7]={0x13,0x01,0x01,0x00,0x00,0x00,0x02};sbit SCLK=P0^0;sbit SDA=P0^1;sbit RST=P0^4;void delayus(uint t){uint i;for(i=0;i<t;i++)_nop_();}void delayms(uint t){uint x,y;for(x=t;x>0;x--)for(y=95;y>0;y--);}void change_dats(){uchar i;uchar temp;for(i=0;i<6;i++){temp=time_buf[i]/16;time_buf[i]=time_buf[i]%16+temp*10;}}void DS1302WriteByte(uchar dat){uchar i;SCLK=0; //初始时钟线置为0delayus(2);for(i=0;i<8;i++)//传输的8个字节的数据{SDA=dat&0x01; //取最低位delayus(2);SCLK=1; //上升沿,SDA的数据被传输delayus(2);SCLK=0; //时钟线拉低,为下一个上升沿做准备dat>>=1; //数据右移一位,准备传输下一位数据}}uchar DS1302ReadByte(){uchar i,dat;delayus(2);for(i=0;i<8;i++){dat>>=1; //要返回的数据左移一位if(SDA==1) //当数据线为高时,证明该位数据为 1 dat|=0x80;SCLK=1; //拉高时钟线delayus(2);SCLK=0; //制造下降沿delayus(2);}return dat; //返回读取出的数据}void DS1302Write(uchar cmd, uchar dat){RST=0; //初始 CE线置为 0SCLK=0; //初始时钟线置为0RST=1; //初始 CE置为 1,传输开始DS1302WriteByte(cmd); //传输命令字,要写入的时间/日历地址DS1302WriteByte(dat); //写入要修改的时间/日期SCLK=1; //时钟线拉高RST=0; //读取结束,CE置为0,结束数据的传输}uchar DS1302Read(uchar cmd){uchar dat;RST=0; //初始 CE线置为0SCLK=0; //初始时钟线置为0RST=1; //初始 CE置为 1,传输开始DS1302WriteByte(cmd); //传输命令字,要读取的时间/日历地址dat=DS1302ReadByte(); //读取要得到的时间/日期SCLK=1; //时钟线拉高RST=0; //读取结束,CE置为 0,结束数据的传输return dat; //返回得到的时间/日期}void Init_DS1302(void){DS1302Write(0x8e,0x00); //写保护关DS1302Write(0x80,time_buf[5]); //初始秒值为0DS1302Write(0x82,time_buf[4]); //初始分钟值为 0DS1302Write(0x84,time_buf[3]); //初始为 24小时模式初始时间为0点DS1302Write(0x86,time_buf[2]); //设置日DS1302Write(0x88,time_buf[1]); //设置月DS1302Write(0x8c,time_buf[0]); //设置年DS1302Write(0x8a,time_buf[6]); //设置星期数DS1302Write(0x8e,0x80); //禁止写入change_dats();}void ds1302_read_time(){uchar i,temp;time_buf[0]=DS1302Read(0x8D); //年time_buf[1]=DS1302Read(0X89); //月time_buf[2]=DS1302Read(0X87); //日time_buf[3]=DS1302Read(0X85); //时time_buf[4]=DS1302Read(0X83); //分time_buf[5]=(DS1302Read(0X81))&0x7F;//秒time_buf[6]=DS1302Read(0X8B); //星期for(i=0;i<7;i++) //BCD 处理{temp=time_buf[i]/16;time_buf[i]=time_buf[i]%16;time_buf[i]+=temp*10;}}/***************************************************************DISPL AY.h**************************************************/#include<ds1302.h>#include<redcon.H>#define uint unsigned int#define uchar unsigned charuchar code W[]={0x81,0xfb,0xf7,0xfb,0x81};uchar code N[]={0xe1,0xdf,0xdf,0xe1};uchar code R[]={0x81,0xa7,0xab,0xdd};uchar code I[]={0xbd,0x81,0xbd};uchar code L[]={0x81,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[]={0x9f,0xef,0xf1,0xef,0x9f};uchar code U[]={0xc3,0xfd,0xfd,0xc3};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},{0x83,0x6d,0x6d,0x6d,0x73},{0xbf,0x7f,0x7d,0x41,0x3d},{0x93,0x6d,0x6d,0x6d,0x93},{0x9b,0x6d,0x6d,0x6d,0x83}};uchar code wen[]={0xdf,0xcd,0xd5,0x9b,0xd5,0xcd,0xdf};uchar code er[]={0xfd,0x83,0xff,0x83,0xfb,0xfd,0xfd};uchar code xin[]={0xcf,0xb7,0xdb,0xb7,0xcf};uchar set_num=0;uchar time_onoff=0;uchar time_love=0;void change_dath(){uchar i;uchar temp;for(i=0;i<6;i++){temp=time_buf[i]/10;time_buf[i]=time_buf[i]%10+temp*16; }}void time_set(uchar dat){switch(dat){case 0x46:{if(set_num==0) //按下设置键第一次{set_num=1;time_onoff=1;DS1302Write(0x8e,0x00); //写保护关DS1302Write(0x80,0X80); //时钟停止}else if(set_num==1){set_num=2;}else if(set_num==2){P2=0XFB;set_num=3;}else if(set_num==3){set_num=4;P2=0Xf7;}else if( set_num==4){set_num=5;}else if(set_num==5){set_num=6;}else if(set_num==6){set_num=0;time_onoff=0;change_dath();Init_DS1302();DS1302Write(0x80,0X00); //时钟运行}break;}case 0x47:{if(set_num!=0){if(set_num==1){time_buf[0]++;}else if(set_num==2){time_buf[1]++;if(time_buf[1]>12)time_buf[1]=1;}else if(set_num==3){time_buf[2]++;if(time_buf[2]>=32)time_buf[2]=1;}else if(set_num==4){time_buf[3]++;if(time_buf[3]>=24)time_buf[3]=0;}else if(set_num==5){time_buf[4]++;if(time_buf[4]>=60)time_buf[4]=0;}else if(set_num==6){time_buf[5]++;if(time_buf[5]>=60)time_buf[5]=0;}}break;}case 0x45:{if(set_num!=0){if(set_num==1){if(time_buf[0]<=0)time_buf[0]=20;else{time_buf[0]=time_buf[0]-1; }}else if(set_num==2){time_buf[1]=time_buf[1]-1; if(time_buf[1]<=0)time_buf[1]=12;}else if(set_num==3){if(time_buf[2]<=1)time_buf[2]=31;elsetime_buf[2]=time_buf[2]-1; }else if(set_num==4){if(time_buf[3]<=0)time_buf[3]=23;elsetime_buf[3]=time_buf[3]-1; }else if(set_num==5){if(time_buf[4]<=0)time_buf[4]=59;elsetime_buf[4]=time_buf[4]-1;}else if(set_num==6){if(time_buf[5]<=0)time_buf[5]=59;elsetime_buf[5]=time_buf[5]-1;}}break;}case 0x07:{time_love=1;break;}case 0x15:{time_love=0;break;}}}/******************时钟显示***************/ void Dig_time(){char m;for(m=0;m<=4;m++) //显示时十位{P2=num[time_buf[3]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示时个位{P2=num[time_buf[3]%10][m];delayms(1);}P2=0xff;delayms(1);P2=0xd7;delayms(1);P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示分十位{P2=num[time_buf[4]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示分个位{P2=num[time_buf[4]%10][m];delayms(1);}P2=0xff;delayms(1);P2=0xd7;delayms(1);P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示秒十位{P2=num[time_buf[5]/10][m];delayms(1);}P2=0xff;delayms(1);for(m=0;m<=4;m++) //显示秒个位{P2=num[time_buf[5]%10][m];delayms(1);}P2=0xff;}/***************i love you*****************/ void Display_love(){char i,j;if(timelate==0){for(i=0;i<=6;i++) //显示W{P2=wen[i];delayms(1);}P2=0xff;delayms(1);for(i=0;i<=6;i++) //显示r {P2=er[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=1){for(i=2;i>=0;i--) //显示I {P2=I[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=2){for(i=0;i<3;i++) //显示L {P2=L[i];delayms(1);}P2=0xff;delayms(1);for(i=2;i>=0;i--) //显示o {P2=o[i];delayms(1);}P2=0xff;delayms(1);for(i=4;i>=0;i--) //显示v {P2=v[i];delayms(1);}P2=0xff;delayms(1);for(i=0;i<=3;i++) //显示e {P2=E[i];delayms(1);}P2=0xff;delayms(2);}if(timelate<=3){for(i=4;i>=0;i--) //显示Y {P2=Y[i];delayms(1);}P2=0xff;delayms(1);for(i=2;i>=0;i--) //显示o {P2=o[i];delayms(1);}P2=0xff;delayms(1);for(i=3;i>=0;i--) //显示u {P2=U[i];delayms(1);}P2=0xff;delayms(2);}if(timelate>0){for(j=0;j<timelate;j++) {for(i=0;i<=4;i++){P2=xin[i];delayms(1);}P2=0xff; delayms(2); }}}。

完整版旋转LED显示器说明

完整版旋转LED显示器说明

旋转LED显示器的说明石家庄市第二外国语学校九年级9班王子璇一、功能说明:嵌在粉盒子上的东西叫做旋转LED显示器。

当接通电源,它便开始自动旋转,顶面会动态显示时钟或数字时间,侧面可滚动显示汉字古诗或图案。

红外遥控,可实现画面转换和调时功能。

二、制作原理:物体在快速运动时,当人看到的影像消失后,人眼仍能保留其影像,约0。

1s,这种现象称为视觉暂留。

旋转LED就是利用这种原理,现以旋转时钟画面为例进行说明:假设12点的刻度为0°,则每个时针之间的角度为30°,于是当一整列发光二级管每旋转30°,就点亮一瞬间,以呈现出时间刻度。

如果在小于0.1s内,这列LED能转完一圈,人眼就会误认为先后产生的12个刻度是同一时间显示出来的。

电机带动板子高速旋转,控制器(单片机)控制相应的LED点亮或者熄灭,并在0。

1s内对LED扫描完一圈,重复执行这样的扫描,人的眼睛看上去就形成了一副完整的时钟画面。

供电模块选用无线供电,因为电路板要转动动起来,采用有线供电会导致缠绕和磨损问题,所以利用电磁感应原理,电场变化可以产生磁场,磁场变化也可以产生电场用转轴外围的两个线圈感应产生电压。

三、制作过程:1。

从玩具四驱车或者旧软驱中拆下得到一个直流电机,供电路板转动;2。

设计硬件电路和软件方案;3.制作PCB电路板,特别注意:板子长度、配重(旋转平衡)、供电接口(无线供电与旋转板子的衔接)、LED间距(显示画面的质量);4。

将设计好的电路板打印出来,再转印到覆铜板上,经过腐蚀等一系列工艺得到电路板,打孔之后焊接元件。

5.将写好的程序写进控制器芯片。

6.安装,测试。

四、故障调试:1.无线供电不能正常给单片机供电,检查电路板后,调整整流二极管, 问题解决。

2.起初红外遥控接收不能工作,检查发现,红外接收二极管为光敏二极管,工作时应加反向电压. 3。

板子旋转后不能带动所有LED亮灭,经过对板子反复测量调试,确定为限流电阻太小,导致功率过大,更换电阻后,可显示画面。

单片机课程设计---基于STC89C52的旋转LED时钟

单片机课程设计---基于STC89C52的旋转LED时钟

题目名称基于STC89C52的旋转LED时钟一、课程设计的内容用STC89C52单片机制作一测温仪旋转LED时钟:1.设计并绘制硬件电路图;2.焊接好元器件;3.编写程序并将调试好的程序固化到单片机中。

二、课程设计的要求与数据单片机采用STC89C52芯片,时钟芯片采用DS1302。

用电机带动驱动板旋转系统上电后,驱动板的LED将会在电机带动下动态扫描出时钟画面,并且可以用红外遥控调时。

三、课程设计应完成的工作1. 完成软件、硬件的设计,并进行硬件的焊接制作,并将调试成功的程序固化到单片机中,最后进行硬件与软件的调试;2.撰写设计说明书。

四、课程设计进程安排五、应收集的资料及主要参考文献谭浩强.C语言程序设计(第二版)。

北京:清华大学出版社,1999年12月广东工业大学课程设计任务书 (1)摘要 (4)一、课题设计的要求及目的 (5)1.1设计要求 (5)1.2课程设计目的 (5)二、设计方案 (5)三、系统框图与工作原理 (8)3.1单片机系统工作架构 (8)3.2系统工作原理 (10)四、设计元器件说明 (10)4.1PLCC STC89C52RC简介 (10)4.2 74HC573芯片与光电传感器简介 (12)4.3 红外简介 (13)4.4 DS1302、LM7805芯片简介 (15)4.5 LED 动态显示原理 (17)五、系统硬件电路设计 (18)六、系统软件设计 (19)6.1 单片机解码红外信号程序 (19)6.2 单片机读写DS1302程序 (22)6.3自适应转速 (25)6.4 数字显示模式 (26)6.5指针显示模式 (26)七、总结与体会 (27)八、参考文献 (27)附录A 完整源程序 (28)附录B 实物图 (41)旋转LED钟,在国外一般称为“螺旋桨时钟”(propeller clock),是利用“视觉暂留”原理制作而成。

将单片机控制的LED流水灯设备稍作改进,让它动起来,就能神奇地显示各种字符或图案,其效果如浮在空中一般。

旋转led时钟程序

旋转led时钟程序

旋转led时钟程序#include "STC15F104E.H"#include "intrins.h"#include#include "1302.h"#define uchar unsigned char#define uint unsigned int#include "IR_NEC.h"sbit S1=P3^3;sbit S2=P3^4;sbit S3=P3^5;sbit S4=P3^6;sbit S5=P3^7;sbit S6=P1^2;sbit S7=P1^3;sbit S8=P1^4;sbit S9=P1^5;sbit S10=P1^6;sbit S11=P1^7;sbit S12=P0^0;sbit bell=P3^0;//sbit IR=P1^1;uchar code jiaoshidat[]={5,0x10,0x15,0x20,0x25,0x30,0x35,0x40,0x45,0x50,0x55};uchar code leddata1[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x39,0x49,0x40};//12+13-//uchar code leddata2[]= {0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF,0x00}; //有⼩数点uchar dat3[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xff};//uchar dat4[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//uchar t_led[8];//= {0};uchar LED1,LED2,LED3,LED4;uchar xg;uchar tim1;uchar tim2;bit shan,flag2,ds;uint temp[2];uchar miao;uchar fen;uchar shi;uchar nfen;uchar nshi;uchar menu;void IRkey();void leddisplay();void init();void Delayms(uint t){uchar i;while(t--)for(i=0; i<100; i++);}void init(){//TMOD=0x0;TH0 = t0>>8;TL0 = t0;ET0=TR0=1;EA=1;/* T2L = 0xb0; //初始化计时值T2H = 0x3c;AUXR |= 0x10; //定时器2开始计时IE2 |= 0x04; */ //开定时器2中断}void IRkey()//视宝333{if(IR_ok){ds=1;tim2=0;/*if(OKCode==0xbf01){shi=0x23;fen=0x59;miao=0x58;write_time();}if(OKCode==0xbf02){shi=0;fen=0;miao=0x58;write_time();}*/if(OKCode==0xbf16){uchar i;if(++xg>3)xg=0;if(xg==0)for(i=0; i<8; i++)dat4[i]=0xff;if(xg==1){dat4[0]=0xef;dat4[1]=0xbd;dat4[2]=0xf7;dat4[3]=0xde;dat4[4]=0x7b;dat4[5]=0xef;dat4[6]=0xbd;dat4[7]=0xf7;} if(xg==2){dat4[0]=0xff;dat4[1]=~0x40;dat4[2]=0xff;dat4[3]=~0x20;dat4[4]=0xff;dat4[5]=~0x10;dat4[6]=0xff;dat4[7]=0xf7;} if(xg==3)for(i=0; i<8; i++)dat4[i]=0xff;}if(OKCode==0xbf5b)menu=!menu;if(OKCode==0xbf47)if(menu)if(++menu>6)menu=1;if(OKCode==0xbf46)if(menu)if(--menu==0)menu=6;if(OKCode==0xbf19){if(menu==1){if(++shi >0x23)shi = 0;if((shi & 0x0f) > 9) shi+=6;}if(menu==2){if(++fen > 0x59)fen = 0;if((fen & 0x0f) >9)fen+=6;}if(menu==3){if(++miao > 0x59)miao = 0;if((miao & 0x0f) >9)miao+=6;}if(menu==4){if(++yue > 0x12)yue = 0x1;if((yue & 0x0f) >9)yue+=6;}if(menu==5){if(++ri > 0x31)ri = 0x1;if((ri & 0x0f) >9)ri+=6;}if(menu==6)if (++jiaoshi>21)jiaoshi=11;write_time();}if(OKCode==0xbf1d){if(menu==1){if(--shi >0x23)shi =0x23;if((shi & 0x0f) > 9) shi-=6;}if(menu==2){if(--fen > 0x59)fen =0x59;if((fen & 0x0f) >9)fen-=6;}if(menu==3){if(--miao > 0x59)miao = 0x59;if((miao & 0x0f) >9)miao-=6;}if(menu==4){if(--yue == 0)yue = 0x12;if((yue & 0x0f) >9)yue-=6;}if(menu==5){if(--ri > 0x31)ri = 0x31;if((ri & 0x0f) >9)ri-=6;}if(menu==6)if (--jiaoshi>21)jiaoshi=11; write_time();}IR_ok=0;}}void InitTimer1() interrupt 1{ static uint t;NEC();if(++t>=5000){t=0;shan=!shan;if(++tim1>22)tim1=0;if(tim1>15)flag2=1;else flag2=0;if(++tim2>60)ds=0;}}void leddisplay(){ uchar i;if(menu==0){if(flag2==1){if(yue/16)LED1=yue/16;else LED1=10;LED2=yue%16;LED3=ri/16;LED4=ri%16;}if(flag2==0){ if(shi/16)LED1=shi/16;else LED1=10; LED2=shi%16;LED3=fen/16;LED4=fen%16;}}if(menu==1){if(shan){LED1=shi/16;LED2=shi%16;}else{LED1=10;//不显⽰LED2=10;//不显⽰}LED3=fen/16;LED4=fen%16;}if(menu==2){if(shan){LED3=fen/16;LED4=fen%16;}else{LED3=10;LED4=10;}LED1=shi/16;LED2=shi%16;}if(menu==3){if(shan){LED1=shi/16;LED2=shi%16;LED3=fen/16;LED4=fen%16;}else{LED1=10;LED2=10;LED3=10;LED4=10;}}if(menu==4){if(shan){if(yue/16)LED1=yue/16;else LED1=10;LED2=yue%16;}else{LED1=10;//不显⽰LED2=10;//不显⽰}LED3=ri/16;LED4=ri%16;}if(menu==5){if(shan){LED3=ri/16;LED4=ri%16;}else{LED3=10;LED4=10;}if(yue/16)LED1=yue/16;else LED1=10;LED2=yue%16;}if(menu==6){if(jiaoshi>11){LED1=12;LED2=10;LED3=(jiaoshidat[jiaoshi-12])/16;LED4=(jiaoshidat[jiaoshi-12])%16;}if(jiaoshi<11){LED1=13;LED2=10;LED3=(jiaoshidat[10-jiaoshi])/16;LED4=(jiaoshidat[10-jiaoshi])%16;}if(jiaoshi==11){LED1=LED2=10;LED3=LED4=0;}}if(xg==0){dat3[0]=0xFE;dat3[1]=0xFC;dat3[2]=0xF8;dat3[3]=0xF0;dat3[4]=0xE0;dat3[5]=0xC0;dat3[6]=0x80;dat3[7]=0x00;dat3[8]=0xFF;if(miao>0x56){for(i=0; i<7; i++)t_led[i]=7;t_led[7]=(miao/16*10+miao%16-1)%8;}if(miao>0x48&&miao<=0x56){for(i=0; i<6; i++)t_led[i]=7;t_led[6]=(miao/16*10+miao%16-1)%8;}if(miao>0x40&&miao<=0x48){for(i=0; i<5; i++)t_led[i]=7;t_led[5]=(miao/16*10+miao%16-1)%8;}if(miao>0x32&&miao<=0x40){for(i=0; i<4; i++)t_led[i]=7;t_led[4]=(miao/16*10+miao%16-1)%8;}if(miao>0x24&&miao<=0x32){for(i=0; i<3; i++)t_led[i]=7;t_led[3]=(miao/16*10+miao%16-1)%8;}if(miao>0x16&&miao<=0x24){for(i=0; i<2; i++)t_led[i]=7;t_led[2]=(miao/16*10+miao%16-1)%8;}if(miao>0x08&&miao<=0x16){t_led[0]=7;t_led[1]=(miao/16*10+miao%16-1)%8;}if(miao>0x00&&miao<=0x08){for(i=1; i<8; i++)t_led[i]=8;t_led[0]=(miao/16*10+miao%16-1)%8;}if(miao==0x00)for(i=0; i<8; i++)t_led[i]=7;}else{dat3[0]=0xFE; dat3[1]=0xFD; dat3[2]=0xFB; dat3[3]=0xF7; dat3[4]=0xEF; dat3[5]=0xDF; dat3[6]=0xBF; dat3[7]=0x7F; dat3[8]=0xFF;for(i=0; i<8; i++) t_led[i]=8;if(miao>0x56 ){t_led[7]=(miao/16*10+miao%16-1)%8;}if(miao>0x48&&miao<=0x56){t_led[6]=(miao/16*10+miao%16-1)%8;}if(miao>0x40&&miao<=0x48){t_led[5]=(miao/16*10+miao%16-1)%8;}if(miao>0x32&&miao<=0x40){t_led[4]=(miao/16*10+miao%16-1)%8;}if(miao>0x24&&miao<=0x32){t_led[3]=(miao/16*10+miao%16-1)%8;}if(miao>0x16&&miao<=0x24){t_led[2]=(miao/16*10+miao%16-1)%8;}if(miao>0x08&&miao<=0x16){t_led[1]=(miao/16*10+miao%16-1)%8;}if(miao>0x00&&miao<=0x08){t_led[0]=(miao/16*10+miao%16-1)%8;}if(miao==0x00)t_led[7]=3;}P2=leddata1[LED1];S1=0;Delayms(2);S1=1;if(shan|flag2)P2=leddata1[LED2];else P2=leddata1[LED2]|0x80;S2=0;Delayms(2);S2=1;P2=leddata1[LED3];S3=0;Delayms(2);S3=1;P2=leddata1[LED4];S4=0;Delayms(2);S4=1;//////////////////////////////////////////////////////P2=dat3[t_led[0]]&dat4[0]; S5=1;Delayms(2);S5=0;P2=dat3[t_led[1]]&dat4[1]; S6=1;Delayms(2);S6=0;P2=dat3[t_led[2]]&dat4[2]; S7=1;Delayms(2);S7=0;P2=dat3[t_led[3]]&dat4[3]; S8=1; Delayms(2);S8=0;P2=dat3[t_led[4]]&dat4[4]; S9=1; Delayms(2);S9=0;P2=dat3[t_led[5]]&dat4[5]; S10=1; Delayms(2);S10=0;P2=dat3[t_led[6]]&dat4[6]; S11=1; Delayms(2);S11=0;P2=dat3[t_led[7]]&dat4[7]; S12=1; Delayms(2);S12=0;}void main(){init();read_nao();P3M0=0xf8;P3M1=0x00;P2M0=0xff;P2M1=0x00;P1M0=0xfd;P1M1=0x00;P0M0=0x01;P0M1=0x00;IR=1;ri_tmp=0xff;while(1){IRkey();read_time();if(ri_tmp!=ri&&shi==0&&(fen==1)) {if(jiaoshi>11){miao=jiaoshidat[jiaoshi-12]; write_time();}else if(jiaoshi<11){miao=jiaoshidat[jiaoshi];fen=0;write_time();}ri_tmp=ri;}if(~ds)menu=0;leddisplay();}}。

旋转LED时钟

旋转LED时钟

旋转LED时钟
一、任务
设计并制作一个旋转LED时钟,使用单片机控制一排旋转的LED灯的亮灭和电机的转速,动态显示出时钟的信息。

二.要求
基本要求
1、显示方式为指针式,旋转显示时钟的12个刻度和3个指针。

时间设置可手动调节。

2、利用单片机控制电机的转速以及正转反转。

3、制作一个键盘来实现上述控制。

发挥部分
1、数字式显示,旋转显示出时间的数字值,显示方式可切换。

2、显示出汉字和任意图形。

3、使用时钟芯片来控制时间。

4、自制为系统供电的电源。

三、说明
设计报告正文中应包括系统总体框图、核心电路原理图、主要流程图、主要的测试结果。

完整的电路原理图、重要的源程序用附件给出。

不能购买现成的套件。

四、评分标准
五、备注效果图如下:。

LED旋转时钟原理DOC

LED旋转时钟原理DOC

LED旋转时钟原理.(DOC) LED旋转时钟原理一、引言LED旋转时钟是一种利用LED显示技术和微控制器实现的现代化计时装置。

它不仅可以准确地显示时间,而且具有独特的视觉效果和高可靠性。

本文档将详细介绍LED旋转时钟的工作原理、设计和实现方法。

二、LED显示技术LED(Light Emitting Diode,发光二极管)是一种半导体器件,能够将电能转化为光能。

LED具有体积小、亮度高、寿命长、响应速度快等优点,因此在各种显示设备中得到广泛应用。

LED旋转时钟采用七段LED数码管作为显示器件。

七段LED数码管由七个LED 和一个公共阳极或阴极组成,可以显示0-9的十个数字。

通过控制每个LED的亮灭状态,就可以实现时间的显示。

三、微控制器微控制器是LED旋转时钟的核心部件,负责控制时间的计数和显示。

常用的微控制器有单片机、ARM等。

单片机是一种集成度高、功能强大的微型计算机,具有体积小、功耗低、价格便宜等优点。

在LED旋转时钟中,单片机通过内部计时器实现时间的计数,并通过GPIO口控制七段LED数码管的显示。

四、工作原理LED旋转时钟的工作原理可以分为以下几个步骤:1.时间计数:单片机内部计时器根据设定的时钟频率进行计数,产生秒、分、时等时间信息。

2.时间显示:单片机将计数得到的时间信息转换为七段LED数码管所需的显示码,通过GPIO口输出控制信号,控制七段LED数码管的亮灭状态,从而实现时间的显示。

3.旋转效果:为了实现旋转效果,可以采用多组七段LED数码管交替显示时间信息。

例如,使用四组七段LED数码管,每组显示一个数字,通过单片机控制它们的亮灭顺序和时间间隔,就可以实现旋转效果。

4.校时功能:LED旋转时钟通常具有校时功能,可以通过按键或其他输入方式调整时间信息。

单片机检测到校时信号后,会暂停计时器并等待用户输入新的时间信息,然后再重新开始计时并更新显示。

五、设计和实现方法设计和实现LED旋转时钟需要以下几个步骤:1.硬件设计:选择合适的单片机和七段LED数码管,设计电路板和连接线路。

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

}
if(OKCode==0xbf5b)menu=!menu;
if(OKCode==0xbf47)if(menu)if(++menu>6)menu=1;
if(OKCode==0xbf46)if(menu)if(--menu==0)menu=6;
T2H = 0x3c;
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x04; */ //开定时器2中断
}
void IRkey()//视宝333
{
if(IR_ok)
{ds=1;tim2=0;
{
if(++miao > 0x59)miao = 0;
if((miao & 0x0f) >9)miao+=6;
}
if(menu==4)
{
if(++yue > 0x12)yue = 0x1;
write_time();
}
IR_ok=0;
}
}
void InitTimer1() interrupt 1
{ static uint t;
NEC();
if(++t>=5000)
{
t=0;
{uchar i;
while(t--)
for(i=0; i<100; i++);
}
void init()
{
//TMOD=0x0;
TH0 = t0>>8;
TL0 = t0;
ET0=TR0=1;
EA=1;
/* T2L = 0xb0; //初始化计时值
sbit S1=P3^3;
sbit S2=P3^4;
sbit S3=P3^5;
sbit S4=P3^6;
sbit S5=P3^7;
sbit S6=P1^2;
sbit S7=P1^3;
sbit S8=P1^4;
sbit S9=P1^5;
sbit S10=P1^6;
sbit S11=P1^7;
/*if(OKCode==0xbf01)
{shi=0x23;fen=0x59;miao=0x58;
write_time();}
if(OKCode==0xbf02)
{shi=0;fen=0;miao=0x58;
write_time();}
*/
if(OKCode==0xbf16){uchar i;if(++xg>3)xg=0;
LED4=10;
}
LED1=shi/16;
LED2=shi%16;
}
if(menu==3)
{
if(shan)
{
{
LED1=10;//不显示
LED2=10;//不显示
}
LED3=fen/16;
LED4=fen%16;
}
if(menu==2)
{ uchar i;
if(menu==0)
{
if(flag2==1)
{if(yue/16)
LED1=yue/16;
else LED1=10;
shan=!shan;
if(++tim1>22)tim1=0;
if(tim1>15)flag2=1;
else flag2=0;
if(++tim2>60)ds=0;
}
}
void leddisplay()
uint temp[2];
uchar miao;
uchar fen;
uchar sr nshi;
uchar menu;
void IRkey();
void leddisplay();
void init();
void Delayms(uint t)
sbit S12=P0^0;
sbit bell=P3^0;
//sbit IR=P1^1;
uchar code jiaoshidat[]={5,0x10,0x15,0x20,0x25,0x30,0x35,0x40,0x45,0x50,0x55};
uchar code leddata1[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x39,0x49,0x40};//12+13-
if(OKCode==0xbf19)
{
if(menu==1)
{
if(++shi >0x23)shi = 0;
if((shi & 0x0f) > 9) shi+=6;
if((yue & 0x0f) >9)yue+=6;
}
if(menu==5)
{
if(++ri > 0x31)ri = 0x1;
if((ri & 0x0f) >9)ri+=6;
}
if(menu==6)if (++jiaoshi>21)jiaoshi=11;
write_time();
}
if(OKCode==0xbf1d)
{
if(menu==1)
{
if(shan)
{
LED1=shi/16;
LED2=shi%16;
}
else
LED2=yue%16;
LED3=ri/16;
LED4=ri%16;
}
if(flag2==0)
{ if(shi/16)
if(--fen > 0x59)fen =0x59;
if((fen & 0x0f) >9)fen-=6;
}
if(menu==3)
{
if(--miao > 0x59)miao = 0x59;
if(menu==1)
{
if(--shi >0x23)shi =0x23;
if((shi & 0x0f) > 9) shi-=6;
}
if(menu==2)
{
if(xg==0)for(i=0; i<8; i++)dat4[i]=0xff;
if(xg==1)
{dat4[0]=0xef;dat4[1]=0xbd;dat4[2]=0xf7;dat4[3]=0xde;dat4[4]=0x7b;dat4[5]=0xef;dat4[6]=0xbd;dat4[7]=0xf7;}
LED1=shi/16;else LED1=10;
LED2=shi%16;
LED3=fen/16;
LED4=fen%16;
}
}
LED1=shi/16;
if((miao & 0x0f) >9)miao-=6;
}
if(menu==4)
{
if(--yue == 0)yue = 0x12;
if((yue & 0x0f) >9)yue-=6;
}
if(menu==2)
{
if(++fen > 0x59)fen = 0;
if((fen & 0x0f) >9)fen+=6;
}
if(menu==3)
uchar dat4[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//
uchar t_led[8];//= {0};
uchar LED1,LED2,LED3,LED4;
uchar xg;
uchar tim1;
uchar tim2;
bit shan,flag2,ds;
//uchar code leddata2[]= {0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF,0x00}; //有小数点
uchar dat3[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xff};//
{
if(shan)
{
LED3=fen/16;
LED4=fen%16;
}
else
{
LED3=10;
if(xg==2)
{dat4[0]=0xff;dat4[1]=~0x40;dat4[2]=0xff;dat4[3]=~0x20;dat4[4]=0xff;dat4[5]=~0x10;dat4[6]=0xff;dat4[7]=0xf7;}
if(xg==3)
for(i=0; i<8; i++)dat4[i]=0xff;
}
if(menu==5)
{
if(--ri > 0x31)ri = 0x31;
if((ri & 0x0f) >9)ri-=6;
}
if(menu==6)if (--jiaoshi>21)jiaoshi=11;
#include "STC15F104E.H"
#include "intrins.h"
相关文档
最新文档