DIY基于51单片机的旋转LED数字电子钟

合集下载

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计

基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。

本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。

51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。

本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。

本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。

接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。

将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。

软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。

本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。

通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。

2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。

它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。

51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。

51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。

其存储器分为程序存储器(ROM)和数据存储器(RAM)。

程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。

51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。

51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。

利用51单片机制作的电子时钟

利用51单片机制作的电子时钟

利用51单片机制作的电子时钟最近研究起来了单片机,用的是国产STC98C52 芯片。

STC89C52 是STC公司生产的一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编程Flash 存储器。

STC89C52 使用经典的MCS-51 内核,但做了很多的改进使得芯片具有传统51 单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

买了很长时间了可是一直在那里放着,今天重新拿出来写了一段电子时钟的C++程序,利用充电宝供电,当作电子时钟挺不错的。

功能:4 个七段数码管作为时钟显示的主体两个显示小时,两个显示分钟,8 个LED 灯作为秒数的闪烁,4 个独立按键分别为hour+1,hour+10,minute+1,minute+10。

查询LED 电路,接入端为P1到P1。

数码管采用了驱动芯片,接入端为P2到P2。

按键的接入端如图所示。

有了各种电路的接入端,我们利用keil 进行编程。

/* * Copyright (c) 2015,烟台大学计算机学院* All right reserved. * 作者:邵帅* 文件:temp.c* 完成时间:2015 年05 月29 日*/ #include #define uchar unsigned char sbit P2_0 = P2;sbit P2_1 = P2;sb it P2_2 = P2 ;sbit P2_3 = P2;sb it key1=P3 ;//按键sbit key2=P3;sb it key3=P3;sb it key4=P3 ;static unsigned char second,minute,hour;unsigned int tcount;unsigned char m;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay(uchar。

基于51单片机的电子时钟

基于51单片机的电子时钟

1、电子闹钟的硬件系统框架:设计出电子闹钟的基本整体框架。

2、电子闹钟的电源设计:采用交直流供电电源。

电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源。

3、电子闹钟的主机电路设计:主要有1)系统时钟电路设计:对时间要求不是很高,只要能使系统可靠起振并稳定运行就行。

2)系统复位电路设计:本系统采用的是RC复位方式3)按键与按钮电路设计:按键与按钮电路设计中关键要考虑的就是按键的去抖动问题。

本系统采用软件去抖。

考虑到对时和设定闹铃时间操作的使用频率不高,为了精简系统和降低成本,本系统只设置两个按键。

a)SET键,对应系统的不同工作状态,具有3个功能:在复位后的待机状态下,用于启动设定时间参数(对时或定闹);在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移;在设定最低位(分个位)的状态下,用于结束本次时间设定。

b)+1键,用于对当前设定位进行加1操作。

4)闹铃声光指示电路设计:本系统采用声音指示,关键元件是蜂鸣器。

4、电子闹钟的显示电路设计:设计一个由LED数码管组成的显示电路,显示采用共阳极数码管,其目的是为了简化限流电路的设计和实现亮度可调的要求。

一功能模、设计指标:1. 显示时、分、秒。

2. 可以24小时制或12小时制。

3. 具有校时功能,可以对小时和分单独校时,对分校时的时候,停止分向小时进位。

校时时钟源可以手动输入或借用电路中的时钟。

4. 具有正点报时功能,正点前10秒开始,蜂鸣器1秒响1秒停地响5次。

5. 为了保证计时准确、稳定,由晶体振荡器提供标准时间的基准信号。

二、设计要求:1. 画出总体设计框图,以说明数字钟由哪些相对独立的块组成,标出各个模块之间互相联系,时钟信号传输路径、方向和频率变化。

并以文字对原理作辅助说明。

2. 设计各个功能模块的电路图,加上原理说明。

3. 选择合适的元器件,在面包上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在充分电路正确性同时,输入信号和输出方式要便于电路的测试和故障排除。

51单片机电子闹钟程序(亲自编写,可用)

51单片机电子闹钟程序(亲自编写,可用)

学校电子钟,有闹钟功能,按键可调时间,可调打铃时间,打铃时间长短显示,每个模块有功能注释。

其中正常时间显示和闹钟时间显示可用一个开关来调整。

芯片选择STC89C52程序:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//定义显示段码uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};uchar codebbtime[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar clock[]={0,0,0,0};uchar clock1[]={12,30,0};uchar weikong[6];uchar bbduration=4;uchar lingtime=9;//学校打铃时间组uchar shangwu1[]={8,30};uchar shangwu2[]={10,0};uchar shangwu3[]={10,20};uchar shangwu4[]={11,50};uchar xiawu1[]={13,30};uchar xiawu2[]={15,00};uchar xiawu3[]={15,15};uchar xiawu4[]={16,45};//按键定义sbit mode=P1^7;sbit sec_clr=P1^0;sbit min_set_add=P1^3;sbit min_set_sub=P1^4;sbit hour_set_add=P1^1;sbit hour_set_sub=P1^2;sbit bb_set_add=P1^5;sbit bb_set_sub=P1^6;sbit speaker=P2^6;//延时函数void delay(unsigned int t){while(t--);//时钟进位函数void clockjinwei(){clock[0]++;if(clock[0]==20){clock[1]++;clock[0]=0;if(clock[1]==60){clock[2]++;clock[1]=0;if(clock[2]==60){clock[3]++;clock[2]=0;if(clock[3]==24)clock[3]=0;}}}}//定时器0中断服务函数void timer0(void) interrupt 1 using 1 {TMOD=0x01;TH0=0x3c;TL0=0xb0;clockjinwei();}//时钟分位显示函数void fenwei(){weikong[0]=clock[3]/10;weikong[1]=clock[3]%10;weikong[2]=clock[2]/10;weikong[3]=clock[2]%10;weikong[4]=clock[1]/10;weikong[5]=clock[1]%10;}//闹钟分位显示函数void naofen(){weikong[0]=clock1[0]/10;weikong[1]=clock1[0]%10;weikong[2]=clock1[1]/10;weikong[3]=clock1[1]%10;weikong[4]=clock1[2]/10;weikong[5]=clock1[2]%10; }//闹钟定时显示函数void naozhongdisplay(){uchar z,s;uchar x=0x01;naofen();for(z=0;z<6;z++){P2=0;P0=table[weikong[z]];P2=x;x=_crol_(x,1);for(s=0;s<255;s++);}}//时钟显示函数void display(){uchar i,j;uchar x=0x01;fenwei();for(i=0;i<6;i++){P2=0;P0=table[weikong[i]];P2=x;x=_crol_(x,1);for(j=0;j<255;j++);}}//总显示函数void zhongxian(){if(mode==1)delay(100);if(mode==1)display();if(mode==0)delay(100);if(mode==0)naozhongdisplay();}//按键处理程序void key_set(){zhongxian();P1=0xff;if(min_set_add==0){delay(100);if(min_set_add==0){if(mode==1){clock[2]++;if(clock[2]==60){clock[2]=0;}while(min_set_add==0)zhongxian();}}if(mode==0){clock1[1]++;if(clock1[1]==60){clock1[1]=0;}while(min_set_add==0)zhongxian();}}//if(min_set_sub==0){delay(100);if(min_set_sub==0){if(mode==1){clock[2]--;if(clock[2]==0)clock[2]=59;}while(min_set_sub==0)zhongxian();if(mode==0){clock1[1]--;if(clock1[1]==0)clock1[1]=59;}while(min_set_sub==0)zhongxian();}}//if(hour_set_add==0){delay(100);if(hour_set_add==0){if(mode==1){clock[3]++;if(clock[3]==24){clock[3]=0;}while(hour_set_add==0)zhongxian();}if(mode==0){clock1[0]++;if(clock1[0]==24){clock1[0]=0;}while(hour_set_add==0)zhongxian();}}}//if(hour_set_sub==0){delay(100);if(hour_set_sub==0){if(mode==1){clock[3]--;if(clock[3]==0)clock[3]=23;}while(hour_set_sub==0)zhongxian();if(mode==0){clock1[0]--;if(clock1[0]==0)clock1[0]=23;}while(hour_set_sub==0)zhongxian();}}//if(sec_clr==0){delay(100);if(sec_clr==0){clock[1]=0;}while(sec_clr==0)zhongxian();}}//闹钟响铃函数void bb(){if(clock[1]<=bbduration){speaker=1;delay(100);speaker=0;}else speaker=0;}//打铃函数void daling(){if(clock[1]<=lingtime){speaker=1;delay(100);speaker=0;}else speaker=0;}//时间比较函数void bijiao(){if(clock[3]==shangwu1[0]){if(clock[2]==shangwu1[1])daling();}if(clock[3]==shangwu2[0]){if(clock[2]==shangwu2[1])daling();}if(clock[3]==shangwu3[0]){if(clock[2]==shangwu3[1])daling();}if(clock[3]==shangwu4[0]){if(clock[2]==shangwu4[1])daling();}if(clock[3]==xiawu1[0]){if(clock[2]==xiawu1[1])daling();}if(clock[3]==xiawu2[0]){if(clock[2]==xiawu2[1])daling();}if(clock[3]==xiawu3[0]){if(clock[2]==xiawu3[1])daling();}if(clock[3]==xiawu4[0]){if(clock[2]==xiawu4[1])daling();}}//闹钟比较void naobijiao(){if(clock[3]==clock1[0]){if(clock[2]==clock1[1]||clock[2]==clock1[1]+1||clock[2]==clock1[1]+2) bb();}}//响铃时长显示函数void bbtimeshow(){P3=bbtime[bbduration];if(bbduration>15)bbduration=0;}//响铃按键处理函数void bbtime_set(){bbtimeshow();if(bb_set_add==0){delay(100);if(bb_set_add==0)bbduration++;while(bb_set_add==0)bbtimeshow();}if(bb_set_sub==0){delay(100);if(bb_set_sub==0)bbduration--;while(bb_set_sub==0)bbtimeshow();}}//主程序void main(){EA=1;ET0=1;TR0=1;while(1){key_set();bijiao();bbtime_set();naobijiao();}}电路图:分四部分显示:如果在学习这个程序过程中有什么问题,可以发邮件到******************询问。

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。

单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。

该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。

STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。

基于51单片机的电子时钟

基于51单片机的电子时钟
本次设计采用八位数码管显示原理和单个LED的显示原理完全相同。
闹钟提醒电路
本次设计是通过蜂鸣器来完成闹钟提醒的功能的,蜂鸣器与芯片的P2.0相连。
按键控制电路
键盘是最常用的输入设备,是实现人机对话的纽带,具体来说键盘接口应完成以下操作功能: (1)键盘扫描,以判定是否有键被按下; (2)键识别,以确定闭合键的位置; (3)排除多建、复键及去抖。 以上这些功能通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。
键盘显示方案
AT89C52的P0口和P1口外接八个LED数码管(LED7~LED0)构成显示 器 , 用 P0 口 LED 的 段 码 输 出 口 , P1 口 做 八 个 LED 数 码 管 的 位 选 输 出 口 , P3.0~P3.2外接三个按键K1、K2、K3构成键盘电路。
硬件电路
显示电路
void time() interrupt 1
//定时器中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{ tt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
write_n_sfm(n_shi,n_fen,n_miao);
else
write_sfm(shi,fen,miao);
if(n_shi==shi&&n_fen==fen)

基于51单片机的简易电子钟设计

基于51单片机的简易电子钟设计

基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。

二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。

1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。

以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。

同时,根据用户按键的操作,可以调整时间的设定。

2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。

可以显示当前时间和设置的闹钟时间。

初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。

3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。

通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。

4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。

同时可以添加外部中断用于响应用户按键操作。

三、主要功能和实现步骤1.系统初始化。

2.设置定时器,每1秒产生一次中断。

3.初始化LCD显示屏,显示初始时间00:00:00。

4.查询键盘状态,判断是否有按键按下。

5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。

-数字键:根据键入的数字进行时间的调整和闹钟设定。

6.根据定时器的中断,更新时间的显示。

7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。

8.循环执行步骤4-7,实现连续的时间显示和按键操作。

四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。

但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。

基于C51单片机的数字时钟课程设计(C语言带闹钟)

基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

基于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++){

基于51单片机的简易电子时钟

基于51单片机的简易电子时钟

基于51单片机的简易电子时钟设计摘要今天,电子时钟是生活中不可或缺的一部分。

电子时钟通过数码管显示,具有整点报时等功能,可以使得我们的生活变得更加有序。

电子时钟也通过不断地改进,变得功能越来越强大。

本次设计的电子时钟利用单片机STC89C5进行控制的,利用单片机1自身的定时器功能,采用数码管显示,可对电子时钟进行调整校准。

此设计具有相当重要的现实意义和实用价值。

基于单片机STC89C5的电子时钟,采用数码管显示“时“分“秒”1而且可用按键进行调整校准。

此次设计与传统的机械表相比,它具有走的更精准,显示更直观等特点,而且单片机的数字时钟具有灵活编程,便于功能扩充等特点。

本次所设计主要有三个模块:显示模块,按键模块,闹铃模块。

该时钟采用STC89C5单片机自身定时器进行计时,按键模块采用独立式键1盘(4个按键),闹铃部分由8550三极管和蜂鸣器构成,显示时、分、秒用两个四位共阴极数码管显示,具有可调整时间功能和设定闹钟功能,在设计过程中硬件和软件应同时进行。

关键词:电子时钟,单片机,闹钟,蜂鸣器SIMPLE ELECTRONIC CLOCK DESIGN BASED ON 51MCUABSTRACTToday, the electronic clock is an integral part of life. Through the digital display electronic clock, with the whole point timekeeping function, can make our life more orderly. The electronic clock also through continuous improvement, has become more and more powerful.The design of the electronic clock using STC89C51 MCU to control the use of single-chip, self timer function, the use of digital tube display, can adjust the calibration of the electronic clock. Has very important realistic significance and practical value of this design.The electronic clock based on MCU STC89C51, using digital tube display "when""seconds" and the button can be used to adjust the calibration. And the design of the traditional mechanical watch, it has to go more accurate, more intuitive display characteristics, and the digital clock has flexible programming, easy to function expansion and so on.This design has three main modules: the display module, keyboard module, alarm module. The clock uses STC89C51 microcontroller timer timing, key module with separate keyboard (4 buttons), the alarm is composed of 8550 transistors and a buzzer, when the display is divided by two seconds, four common cathode digital display, which can adjust the time and set the alarm function, hardware and software in the design process should be carried out at the same time.Key Words: electronic clock, microcontroller, alarm clock, a buzzer第一章绪论.......................................................... - 1 -1.1课题背景及意义................................................1.2课题内容....................................................1.2.1题目及要求..............................................1.2.2主要部分...................................................第二章方案.......................................................... - 2 -2.1 功能要求.....................................................2.3 数码管显示方案 ...............................................第三章电子时钟的硬件设计........................................ - 4 -3.1电子时钟的组成................................................3.2单片机最小系统图...........................................3.3STC89C51引脚功能.............................................3.4数码管显示模块................................................3.5闹铃部分 .....................................................3.6按键模块 .....................................................第四章电子时钟的软件设计........................................ - 8 -4.1电子时钟程序流程框图 .....................................4.2按键调整流程图................................................4.3子程序的设计 ................................................4.3.1数码管显示模块 ......................................4.3.2按键子模块..............................................4.3.3主程序 ..................................................第五章硬件的制作与测试分析 ................................... - 13 -5.1电子时钟的硬件制作........................................5.2硬件测试 .....................................................5.3软件调试 .....................................................5.4测试结果分析与结论........................................5.4.1数码管测试结果分析 .................................5.4.2按键测试结论...........................................5.4.3测试结论.............................................总结与致谢........................................................ - 16 -参考文献............................................................ - 18 -附录 ................................................................. - 20 -附录一分组表 .................................................附录二程序 ......................................................-1 --1 --1 --2 --2 --3 --4 --5 --6 --7 --7 --8 --8 --20 --21附录三电子时钟实物图........................................微机原理与单片机接口技术课程设计报告第一章绪论1.1课题背景及意义二十一世纪的今天,电子时钟已经融入到千千万万户家庭中,它已经成为了人们生活中不可或缺的一部分。

基于51单片机的数字钟设计与制作

基于51单片机的数字钟设计与制作

一.基于52单片机制作的数字钟1.设计任务⑴时间显示: 上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间.⑵时间调整:按下k1,k2,k3键可以顺序设置秒、分、时,并在相应数码管上显示设置值,直至6位设置完毕。

2.系统基本方案选择和论证本时钟的设计具体有两种方法。

一是通过单纯的数字电路来实现;二是使用单片机来控制实现。

本次设计选取了较为简单的单片机控制;而选择这一方法后还要进行各个芯片的选择。

以下是我在这次设计中所用的方案。

2.1 芯片的选择方案一:采用AT89C51芯片,其为高性能CMOS 8位单片机,该芯片内含有4k bytes的可反复擦写的只读程序存储器(PEROM)、128 bytes的随机存取数据存储器(RAM)、 32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式,但是由于AT89C51芯片可擦写的空间不够大,且中断源提供的较小,为防止运行过程中出现不必要的问题,我们不选用AT89C51。

方案二:采用AT89C52芯片,它除了具备AT89C51的所有功能与部件外,其最大的优势就是AT89C52提供了8K字节可擦写Flash闪速存储器空间、8个中断源、及256*8字节内部存储器(RAM),解决了我们对可反复擦写的Flash闪速存储器空间大小与中断源的不够问题的担心。

2.2显示模块选择方案和论证方案一:采用LCD,电路比较简单,且在软件设计上也相对简单,具有低功耗功能。

价格贵。

方案二:采用LED数码管显示,显示较为清楚。

价格便宜。

所以本方案采用LED数码管显示。

2.3 时钟信号的选择方案和论证直接采用单片机定时计数器提供的秒信号,使用程序实现年、月、日、周、时、分、秒计数。

采用此种方案可减少芯片的使用,节约成本,实现的时间误差较小。

2.4 电路设计最终方案决定综上各方案所述,对此次数字时钟的方案选定为: 采用AT89C52作为主控制系统; 并由其定时计数器提供时钟; LED作为显示电路来实现功能。

基于51单片机实现的简单闹钟设计

基于51单片机实现的简单闹钟设计

基于51单片机实现的简单闹钟设计本设计利用单片机AT89C52制作一个简单的倒计时定时闹钟,这是一个很实用的工具。

我们使用按键来设定需要定时的时间长短,然后利用中断设置20次中断定义一秒,利用程序设计时间倒数。

同时,我们使用4个8段数码管来显示分和秒,并且在定时结束后使用电铃警示。

在硬件系统方面,我们使用proteus仿真,这样就能观察到系统的实际运行情况。

具体地说,我们使用AT89C52单片机芯片作为控制芯片,使用四位相连的8段共阴数码管,并且使用74HC573锁存器控制数码管的显示。

在定时过程中,我们使用s1控制十分位,s2控制分位,s3控制十秒位,s4控制秒位,s5开始倒计时。

这样,我们就能实现一个简单而实用的倒计时定时闹钟。

关于AT89C52单片机芯片,它是___MCS-51系列单片机中基本的产品,采用___可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。

它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,基于标准的MCS-51单片机体系结构和指令系统,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。

80C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。

此外,80C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。

在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。

掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。

80C52有PDIP(40pin)和PLCC(44pin)两种封装形式。

8051片内有ROM,无须外接外存储器和373,更能体现“单片”的简练。

最后,关于74HC573芯片,它是一个锁存器,用于控制数码管的显示。

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

51单片机设置的电子闹钟(可调时间和闹钟)

51单片机设置的电子闹钟(可调时间和闹钟)

#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define LED P0 // 数码管的段选#define LIGHT P1 // 时分秒位的指示灯#define WS P2 // 数码管的位选sbit key1=P3^0; // 时间暂停/开始sbit key2=P3^1; // 时间/闹钟设置sbit key3=P3^2; // 增加sbit key4=P3^3; // 减少sbit alarm=P3^6; // 闹铃uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9uchar tab_dp[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 0.-9.(带小数点)uchar data1[]={0,0,0,0,0,0};uchar data2[]={0,0,0,0,0,0};uint t,k,kk,k1,flag;uint bbh,bbm,bbs,bbh1,bbm1,bbs1;uint sec,min,hour,sec1,min1,hour1; // 定义秒,分,时void init();void display();void display_bb();void delay( uint );void keyscan();void main(){init();while(1){keyscan();if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if((bbh==hour)&&(bbm==min)&&data1[4]==0&&data1[5]==5) // 5s报时{alarm=~alarm;delay(1);}if((bbs==sec)&&(bbm==min)&&(bbh==hour)) // 可调报时{alarm=~alarm;delay(1);}}}void init(){WS=LIGHT=flag=0;sec=min=hour=0; // 将0赋给时分秒TMOD=0x01; // 方式1 P129(见课本)TH0=0x3c; // 65536-50000=15536=0x3cb0(50ms) P128(见课本)TL0=0xb0;EA=1; // 开总中断P161(见课本)TR0=1; // 定时/计数器0开启ET0=1; // 定时器/计数器0溢出中断启动P161(见课本)}void delay( unsigned int t) // 延时函数{unsigned int i;while(t--)for(i=0;i<125;i++);}void display() // 显示时间函数{if(TF0==1) // 定时器/计数器溢出P130(见课本){TF0=0; // 清中断标志位t++;if(t==20) // (50ms*20=1s){t=0;sec++; // 秒加1if(sec==60) // 秒为60,则清零,分加1{sec=0;min++;}if(min==60) // 分为60,则清零,时加1{min=0;hour++;}if(hour==24)// 时为24,则清零{hour=0;}}}data1[5]=sec%10;data1[4]=sec/10;data1[3]=min%10;data1[2]=min/10;data1[1]=hour%10;data1[0]=hour/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data1[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data1[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data1[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data1[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data1[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data1[0]];delay(1);}void display_bb() // 显示闹钟函数{data2[5]=bbs%10;data2[4]=bbs/10;data2[3]=bbm%10;data2[2]=bbm/10;data2[1]=bbh%10;data2[0]=bbh/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data2[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data2[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data2[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data2[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data2[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data2[0]];delay(1);}void keyscan() // 键盘扫描{if(key1==0) // 暂停/开始{++kk;while(!key1){display();if(kk==1){TR0=0;if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if(key2==0) // 模式选择(调节时间/闹钟){k1++;while(!key2){if(k1==1) // 第1次按下{sec1=sec; // 保存秒的数值sec=88; // 显示88,表示可以调节秒的数值了display(); // 显示88sec=sec1; // 恢复前一刻秒的数值}if(k1==2){min1=min;min=88;display();delay(1);min=min1;}if(k1==3){hour1=hour;hour=88;delay(1);hour=hour1;}if(k1==4){sec1=bbs; // 保存秒的数值bbs=66; // 显示66,表示可以调节秒的数值了display_bb(); // 显示66bbs=sec1; // 恢复前一刻秒的数值}if(k1==5){min1=bbm;bbm=66;display_bb();delay(10);bbm=min1;}if(k1==6){hour1=bbh;bbh=66;display_bb();delay(10);bbh=hour1;}if(k1==7){k1=0;display();}}}if(key3==0) // 时间/闹钟增加设置{while(!key3){if(k1==1){sec++;// 秒加1if(sec==60)sec=0;display();}if(k1==2){min++;delay(60);if(min==60)min=0;display();}if(k1==3){hour++;delay(60);if(hour==24)hour=0;display();}if(k1==4){bbs++; // 秒加1delay(60);if(bbs==60)bbs=0;display_bb();}if(k1==5){bbm++;delay(60);if(bbm==60)bbm=0;display_bb();}if(k1==6){bbh++;delay(60);if(bbh==24)bbh=0;display_bb();if(k1==7){k1=0;display();}}}if(key4==0) // 时间/闹钟减少设置{while(!key4){if(k1==1){sec--; // 秒加1delay(60);if(sec==0)sec=60;display();}if(k1==2){min--;delay(60);if(min==0)min=60;display();}if(k1==3){hour--;delay(60);if(hour==0)hour=24;display();}if(k1==4){bbs--; // 秒减1delay(60);if(bbs==0)bbs=60;display_bb();if(k1==5){bbm--;delay(60);if(bbm==0)bbm=60;display_bb();}if(k1==6){bbh--;delay(60);if(bbh==0)bbh=24;display_bb();}if(k1==7){k1=0;display();}}}}}if(kk==2){kk=0;k1=0;TR0=1;}}}。

基于51单片机的电子时钟设计

基于51单片机的电子时钟设计

基于51单片机的电子时钟设计
电子时钟是一种使用电子元件和计算机技术制造的时计,它可以显示年、月、日、时、分、秒等时间信息,并且具有显示精确、功能齐全、操
作简便等特点。

本文将基于51单片机设计一个电子时钟。

一、硬件设计:
1.时钟模块:我们可以使用DS1302时钟模块作为实时时钟芯片,它
可以提供精确的时间信息,并且可以通过单片机与之进行通信。

2.显示模块:我们可以使用共阳数码管进行时间的显示,将时钟设计
成6位7段显示器。

3.按键模块:我们可以使用按键作为输入方式,通过按键调整时间信息。

二、软件设计:
1.初始化:首先,我们需要初始化时钟模块和显示模块,使它们正常
工作。

同时,设置时钟的初始时间为系统当前时间。

2.获取时间:通过与时钟模块的通信,获取当前的时间信息,包括年、月、日、时、分、秒等。

3.显示时间:将获取到的时间信息通过显示模块显示出来,分别显示
在6个数码管上。

4.时间调整:通过按键模块的输入,判断用户是否需要调整时间。


果需要,可以通过按键的不同组合来调整时、分、秒等时间信息。

5.刷新显示:通过不断更新显示模块的输入信号来实现时钟的流动性,保持秒针不断运动的效果。

6.时间保存:为了保证时钟断电后依然能够保持时间,我们需要将时
钟模块获取到的时间信息保存在特定的EEPROM中。

7.闹钟功能:可以通过按键设置闹钟,当到达闹钟时间时,会通过蜂
鸣器发出响声。

以上就是基于51单片机的电子时钟设计方案。

通过对硬件和软件的
综合设计,我们可以实现一个功能齐全的电子时钟。

基于51单片机定时器的电子时钟设计

基于51单片机定时器的电子时钟设计

基于51单片机定时器的电子时钟设计电子时钟是一种集计时、显示时间等功能于一体的电子设备。

它可以准确地显示当前的时间,并通过定时器控制乃至更新时间。

本文将介绍基于51单片机定时器的电子时钟设计。

设计步骤如下:步骤一:硬件设计首先,需要准备以下硬件元件:1.51单片机:作为主要控制单元;2.DS1302实时时钟芯片:用于计时和保存时间数据;3.16x2字符LCD显示屏:用于显示时间;4.4x4矩阵键盘:用于调整时间和设置闹钟;5.蜂鸣器:用于报时功能;6.电位器:用于调整LCD背光亮度。

将这些硬件元件按照电路图连接起来,注意正确连接引脚和电源。

步骤二:软件设计在51单片机上编写程序,实现以下功能:1.初始化:a.初始化DS1302实时时钟芯片,设置初始时间;b.初始化LCD显示屏;c.初始化矩阵键盘;2.获取时间:a.从DS1302芯片读取当前时间;3.显示时间:a.将时间数据转换为字符,并在LCD上显示出来;4.键盘输入:a.监测矩阵键盘输入,判断用户按下的是哪个键;b.根据不同的键,执行相应的操作,如设置时间、设置闹钟等;5.闹钟功能:a.设置闹钟时间,当当前时间与闹钟时间相同时,触发蜂鸣器报时;b.可以通过按键来设置闹钟时间和开启/关闭闹钟功能。

以上是基本的电子时钟功能,可以根据实际需求进行扩展和添加其他功能。

步骤三:测试与调试步骤四:优化与扩展在基本功能正常运行的基础上,可以对电子时钟进行优化和扩展。

添加一些实用的功能,如温湿度显示、日期显示、闹钟音乐选择等,以提高电子时钟的实用性和用户体验。

总结:本文介绍了基于51单片机定时器的电子时钟设计步骤,包括硬件设计和软件编程。

通过该设计,可以实现准确显示时间、调整时间、设置闹钟等功能。

为了使电子时钟更加实用,可以根据需要进行优化和扩展。

DIY-51单片机数码管电子钟闹钟

DIY-51单片机数码管电子钟闹钟

DIY-51单片机数码管闹钟淘宝链接:/item.htm?id=14720075571包括以下物品:∙写好程序的CPU(AT89C2051)∙PCB板∙PCB元件∙原理图∙51汇编源程序元件清单:(欧姆(蓝红棕)这几个跳线数码管的插座一定要装。

焊好后:后加的5.1K电阻:小时位有余晖,加后消除,不加应该也可以3号跳线和32768Hz的晶振外壳焊上,使外壳接地电源口是标准的MINI USB接口,可以用手机充电器或GPS的充电器。

C8和C9的说明:由于32768Hz晶振的负载电容不同,会使时钟有点偏差,这两个电容可以微调频率,如果晶振的负载电容是6pF,因为DS1302内部也是6pF,那这两个电容就可以不装了,如果负载电容不同,那这两个电容值也不同。

另外在程序上也有时间微调的功能。

注意:蜂鸣器是分正负极的,焊的时候请注意,焊好后撕掉上面的贴纸。

关于第一次上电:第一次上电前DS1302时钟芯片默认是不走时的,所以就是装上后备电池,时间也是不走,需要CPU 写指令到DS1302,一旦写过,如果有后备电池供电,断电后时间也一直走了。

每次通电CPU会检查DS1302的状态,如果是停状态,则初始化DS1302并写入初始时间14:59:59走时不准的处理:时钟有关的元件是:Y2、C8、C9。

走时偏快可适当加大C8、C9电容,反之减小电容或取消电容。

如果偏差过大,说明Y2误差过大,只能更换Y2。

另外:我们已经匹配过电容。

还可以在设置中调整走时误差。

数码管上出厂保护膜可以撕掉使用说明:SW--------进入设置按钮SWJ-------显示时间时:长按----显示当前秒闹铃时:按两秒闹铃停止,或1分钟后自动停止设置时:改变设置(进入设置后如果长时间没有设置,自动退回到当前时间)SW按第一次,修改当前小时(进入后按SWJ改变,下同)SW按第二次,修改当前分钟SW按第三次,修改闹铃小时SW按第四次,修改闹铃分钟SW按第五次,闹铃开关(OFF关ON开)SW按第六次,每天时间微调(“-nn”表示每天要减nn秒,“-|nn”表示每天要加nn秒)SW按第七次,设置显示屏的类型(1、2)秒点不显示时改变此项SW按第八次,保存设置并退出到时间显示。

51单片机做数字电子钟

51单片机做数字电子钟

51单•片机做数字电子钟恳贯分:10-解决时间:2009-7-5 17:42设计一个数字电子钟,要求可以进行时.分、秒显示,最大显示时间为23:59:59,并且可以通过按键进行时、分调整画岀硬件连接电路图,说明各个控制信号的作用° 〃画岀程序流程图,编写程序,駛件连接调试,直至正确。

“ 编写课程设汁报告。

“3、给定条件在Dais・52PH+单片机实验箱中,有一片8155芯片用于扩展3x3键盘,还具有6位LED 数码显示器,可分别用于按键和显示控制。

在PC机上调试可使用MCS51仿真开发系统。

数字电子钟的工作过程为:从00:00:00 (时:分:秒)开始计•时,以24小时为一循环,最大计时时间为23:59:59。

当需要校正时间时,按下调整键,小时的十位闪烁,等待键入新值,若需调整则按下加1按键,数值以秒为单位自动加1,当十位调整好后,按下确认键确认,然后小时的个位闪烁,等待键入新值,按照十位的调整步骤调整时间,并按下确认键确认,当确认后,分钟的十位开始闪烁,等待键入新值,分钟的十位和个位调整过程与小时调整一样,只是当分的个位调整好后,按下确认键即启动计时。

数字电子钟是以1S为最小立时单位的,51单片机自身具有两个16位立时/计数器,当晶振频率为6MHZ时,最大泄时时间为0.13S。

而具有时、分和秒的数字电子钟只能以1S立时, 所以要实现实现1S泄时,必须采用软件计数和泄时器定时相结合的方法。

每1S左时到,修改显示值,送6位LED显示。

本课题需用6个LED数码管显示时间值,并且需调整键、加1键、确认键等控制键。

在Dais・52PH+单片机实验箱中,6位LED数码显示器的字形口地址为0FFDCH,字位口地址为0FFDDH,字形表和字位表见附录一。

可通过8155可编程接口芯片驱动的3x3键盘实现按键控制(具体电路参考课题一数字秒表)。

8155的PC0〜PC2为3x3键盘的行扫线.PB0〜PB2为3x3键盘的列扫线,键盘工作过程为:单片机从8155的PB0〜PB2送出全零,并从PC0〜PC2读入数据,当PC0〜PC2H000时,表明有键按下,则逐行从PB0PB2送岀零,再从PC0〜PC2 口读入,最终确左按键位苣和键值,此后,转入相应的按键处理程序,修改显示缓冲区内容。

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

标签:DIY基于51单片机的旋转LED数字电子钟(红外线遥控调时)在网上看到不少老外做的各种旋转LED显示屏,非常COOL,我也动手用洞洞板试做了一个类似的显示屏,结果感觉还不错。

于是再接再励继续努力,将作品进一步改进,完善后制成如今这个样子。

由于刚学51单片机,加上制作电路板软件也是从零开始,的确花了我不少的时间和精力。

不过也就是在这艰难的独立制作中,真正学到了不少实在的东西。

本项目的关键是如何解决高速旋转的电路板如何供电,如何调时的问题。

我采用电机电刷的原理,将旋转轴钻空,通过一只插头将电源的从反面引到前面的电路板上,而这个旋转的插头又与固定在背板上的两个铜片接触的。

调时的问题有些困难,一是让电路板在旋转前与PC机相接,由电脑传送调时数据,这虽然可行但不方便。

还有就是用遥控方法,但此方案在调试方面有很大的困难。

显示方式上,我采用平衡式的两排LED,这除了在旋转时能较好的保持平衡外,主要能利用两边交替显示方式,比单排要快一倍。

本装置不仅是一个时钟,它还可以动态显示汉字及图案,这就看如何发挥了。

其具体制作过程如下:一。

旋转电机的制作从制作成本与方便考虑,选用旧电脑用的大软驱上的直流无刷电机,只是对局部进行改造。

就是这种古董软驱软驱上的直流无刷电机拆开后的电机仔细拆开直流电机,将带圆盘的铝轴从中开孔,让它刚好能插入一个插头。

将旋转轴加工成这样装配好以后按拆开时的顺序,反序将轴安装直流电机上。

电机装配完成后用两片铜片做的电刷电刷装好后的侧面图将电路板上较突出的元件改焊在反面,电机的电源接法。

从电路板标注的符号看,“+”为电源正,“G”为电源负,“C”与“M”端分别与电源正相连匀可使电机运转将一张旧唱片按电机座的位置开孔,而定位用的挡光板应根据电路板上感光组件的位置确定。

二。

电路板的制作本制作品用51单片机控制,具体电原理图如下:用Protel 99设计制作了电路板。

最后得到完成的作品。

遥控器用的是松下车载机的,只用了其中的六个键。

三。

软件编程因学的是C51(不懂汇编)这里只提供C语言源程序,并限制为无遥控功能。

也可提供带遥控功能的hex文件。

#include <reg51.h>sbit gate11=P3^0;sbit gate12=P3^1;#define unit unsigned int#define uchar unsigned charuchar data BUFFER[]={0,0,0,0,1,1,7};uchar data M[]={31,28,31,30,31,30,31,31,30,31,30, 31};uchar code NUM1[] ={0x80,0x7F,0xC0,0xFF,0x40,0x90,0x40,0x8C, // -0-0x40,0x82,0xC0,0xFF,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x81,0x80,0x81,0xC0,0xFF, // -1-0xC0,0xFF,0x00,0x80,0x00,0x80,0x00,0x00,0x80,0xE0,0xC0,0xF0,0x40,0x98,0x40,0x8C, // -2-0x40,0x86,0xC0,0xC3,0x80,0xC1,0x00,0x00,0x80,0x40,0xC0,0xC0,0x40,0x84,0x40,0x84, // -3-0x40,0x84,0xC0,0xFF,0x80,0x7B,0x00,0x00,0x00,0x0C,0x00,0x0E,0x00,0x0B,0x80,0x89, // -4-0xC0,0xFF,0xC0,0xFF,0x00,0x88,0x00,0x00,0xC0,0x47,0xC0,0xC7,0x40,0x84,0x40,0x84, // -5-0x40,0x8C,0x40,0xFC,0x40,0x78,0x00,0x00,0x00,0x7F,0x80,0xFF,0xC0,0x84,0x40,0x84, // -6-0x40,0x84,0x00,0xFC,0x00,0x78,0x00,0x00,0xC0,0x00,0xC0,0x00,0x40,0xF0,0x40,0xF8, // -7-0x40,0x0C,0xC0,0x07,0xC0,0x03,0x00,0x00,0x80,0x7B,0xC0,0xFF,0x40,0x84,0x40,0x84, // -8-0x40,0x84,0xC0,0xFF,0x80,0x7B,0x00,0x00,0x80,0x03,0xC0,0x87,0x40,0x84,0x40,0x84, // -9-0x40,0xC4,0xC0,0x7F,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63, // -:-0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,};uchar code NUM2[]={0x00,0x00,0x7f,0x80,0xff,0xc0,0x82,0x40, // -0-0x8c,0x40,0x90,0x40,0xff,0xc0,0x7f,0x8 0,0x00,0x00,0x00,0x00,0x20,0x40,0x60,0 x40, // -1-0xff,0xc0,0xff,0xc0,0x00,0x40,0x00,0x4 0,0x00,0x00,0x41,0xc0,0xc3,0xc0,0x86,0 x40, // -2-0x8c,0x40,0x98,0x40,0xf0,0xc0,0x60,0x c0,0x00,0x00,0x40,0x80,0xc0,0xc0,0x88,0 x40, // -3-0x88,0x40,0x88,0x40,0xff,0xc0,0x77,0x 80,0x00,0x00,0x0c,0x00,0x1c,0x00,0x34,0 x00, // -4-0x64,0x40,0xff,0xc0,0xff,0xc0,0x04,0x4 0,0x00,0x00,0xf8,0x80,0xf8,0xc0,0x88,0x 40, // -5-0x88,0x40,0x8c,0x40,0x8f,0xc0,0x87,0x 80,0x00,0x00,0x3f,0x80,0x7f,0xc0,0xc8,0x 40, // -6-0x88,0x40,0x88,0x40,0x0f,0xc0,0x07,0x 80,0x00,0x00,0xc0,0x00,0xc0,0x00,0x83,0 xc0, // -7-0x87,0xc0,0x8c,0x00,0xf8,0x00,0xf0,0x 00,0x00,0x00,0x77,0x80,0xff,0xc0,0x88,0x 40, // -8-0x88,0x40,0x88,0x40,0xff,0xc0,0x77,0x 80,0x00,0x00,0x70,0x00,0xf8,0x40,0x88,0 x40, // -9-0x88,0x40,0x88,0xc0,0xff,0x80,0x7f,0x0 0,0x00,0x00,0x00,0xc0,0x01,0x80,0x03,0 x00, // -/-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++){gate11=key1; gate12=key2;P2=~NUM1[kk+jj*2];P1=~NUM1[kk+1+jj* 2];Delay(20);P1=0xff;P2=0xff;gate11=key2; gate12=key1;P2=~NUM2[tt+15-jj*2];P1=~NUM2[tt+14-j j*2];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;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);disp1=BUFFER[3]-disp1*10;disp2=BUFF ER[4]/10;ii="disp1"*16;jj=disp2*16;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);ii="160";jj=160;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);disp1=BUFFER[2]/10;disp2=BUFFER[5]-(BUFFER[5]/10)*10;ii="disp1"*16;jj=disp2*16;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);disp1=BUFFER[2]-disp1*10;disp2=BUFF ER[5]/10;ii="disp1"*16;jj=disp2*16;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);ii="160";jj=160;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);disp1=BUFFER[1]/10;disp2=BUFFER[6]-(BUFFER[6]/10)*10;ii="disp1"*16;jj=disp2*16;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);disp1=BUFFER[1]-disp1*10;disp2=BUFF ER[6]/10;ii="disp1"*16;jj=disp2*16;num_led(ii,jj);P2=0xff;P1=0xff;Delay(60);}void timer0(void) interrupt 1 using 1 {TMOD="0x11";TH0=-(5000/256);TL0=-(5000%256);TR0=1;BUFFER[0]=BUFFER[0]+1;if (BUFFER[6]%4==0) M[1]=M[1]+1;if (BUFFER[0]>201+xz){BUFFER[0]=0;BUFFER[1]=BUFFER[1]+1;if (BUFFER[1]==60){BUFFER[1]=0;BUFFER[2]=BUFFER[2]+1;if (BUFFER[2]==60){BUFFER[2]=0;BUFFER[3]=BUFFER[3]+1;if (BUFFER[3]==24){BUFFER[3]=0;BUFFER[4]=BUFFER[4]+1;if (BUFFER[4]>M[BUFFER[5]-1]){BUFFER[4]=1;BUFFER[5]=BUFFER[5]+1;if (BUFFER[5]>12){BUFFER[5]=1;BUFFER[6]=BUFFER[6]+1;if(BUFFER[6]>99) {BUFFER[6]=0;M[1]=M[1]-1;}}}}}}}}void intersvr0(void) interrupt 0{sw=1;}void main(void){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;}}}四。

相关文档
最新文档