产品选型

单片机 万年历 程序 单片机实例分享,无线供电的LED旋转显示万年历

小编 2024-10-10 产品选型 23 0

单片机实例分享,无线供电的LED旋转显示万年历

大家一定见过各种各样的万年历吧?下面我就带领大家手工打造一台采用无线供电方式、以LED旋转显示屏作为显示器的万年历。图7.1所示就是这款LED旋转显示万年历的实际效果。所谓LED旋转显示屏,是指在电路中只有一列发光二极管,通过电动机带动发光二极管转动,当这列发光二极管转到不同位置时,用单片机控制相应的发光二极管点亮和熄灭,由于人眼的视觉暂留现象,形成了视觉上的图形或文字。

图7.1 基于LED旋转显示屏的万年历

由于显示屏是靠转动的发光二极管的残留影像显示信息的,其特点是显示信息丰富,而整个电路所需的发光二极管的数量却很少(本电路共使用16只发光二极管),所以电路原理图非常简单,几乎和流水灯电路无异,很适合手工制作。但由于整个电路板处于高速旋转状态,所以我们首先要解决两问题:一是如何给运动的系统供电;二是如何保证显示信息稳定显示。

如何给运动的系统供电

给运动的系统供电,常用的供电方式有3种:电池供电、电刷供电、无线感应供电。电池供电方式简单方便、易于携带,但它会使系统重量增加,影响转速,而且它成本高、寿命短,因此只适用于摇摇棒等短时间使用的装置,长时间运行的装置就不合适了。比如能显示时间的LED旋转显示屏,每次电池用完,重换电池就够烦心了,换了电池还得重新调整日期、时间,那简直可以用“痛苦”二字来形容。第二种方式——电刷供电,这种供电方式简单有效,能传送较大电流强度的电能,但在业余制作时,很难找到合适的高质量的电刷,高速旋转时会产生较大的噪声。第三种方式——无线感应供电,这种方式为无接触方式供电,寿命长、无新增噪声,虽然传送电流强度有限,效率稍低,但完全可以满足单片机系统的需要,所以本电路采用无线供电方式。无线供电方式技术要求稍高一些,但能增加制作的挑战性和趣味性,因此,本文首先对无线供电电路的设计与电能传输效率进行一些介绍。

无线供电技术目前还在研究试验阶段,但其应用场合非常广泛,前景非常好,比如,已经出现了一些小功率无线充电器应用成品,只要手机或者电子产品具备无线接收装置,靠近无线充电器就可以充电了,除此之外,还有无线射频IC卡、通行证、缴费卡等。

一个LED旋转显示屏需要消耗多大的电能呢?我们来做一个简单的计算:假设我们采用16个高亮度LED,工作时每个LED耗电10mA,单片机的自身耗电较少,暂且忽略不计,则电路所耗电流的最大值为160mA,电压取5V,所以最大总功耗约0.8W。下面我们就按这个要求设计电路。

无线感应供电的基本原理与变压器的原理相同。它利用电磁感应现象,通过交变磁场把电源输出的能量传送到负载,即在相距很近的两个线圈中,一个线圈作为电能的发送端,另一个线圈作为电能的接收端。通过振荡电路给发送端线圈提供交变电流,在相距很近的接收端线圈中就可以感应出交变电动势,再对这个交变电动势整流、滤波即可对负载供电。图7.2所示为通过无线感应供电方式驱动发光二极管发光的演示。

图7.2 以无线感应供电方式驱动发光二极管发光

图7.3所示是一个简易的近距离无线供电系统原理图。其中原线圈L1及其控制电路构成了发射端,副线圈L2及整流滤波电路构成了接收端,R5为负载电阻。

电路中使用74HC4060产生多谐振荡波,此多谐振荡波通过大功率场效应管IRF530给发送端线圈L1提供交变电流。本电路之所以使用74HC4060组成多谐振荡电路,主要是为了测试方便,74HC4060构成的振荡电路不但频率稳定,而且有10种输出频率可供选择,可以逐一测试每种频率所对应的输出功率和电能传输效率。当选用11.0592MHz的晶体振荡器时,QD端输出为经过16分频的频率——691.2kHz。

图7.3 简易无线供电系统原理图

次级接收电路中的谐振电容C4很重要,加上谐振电容后传输距离大大增加,输出功率和电能传输效率也明显提高。

按图3所示电路及元件参数搭好电路后接通电源,对电路进行测试。当不加任何负载时(L2远离L1),VT1的漏极电流I1为45mA;当L2与L1紧耦合时,I1增加到110mA,此时负载电阻R5上的电压U2为6.5V的电压,折合功率为0.83W,U1实测电压为13V,电能传输效率为:

电路的输出功率基本能满足LED旋转显示屏的要求,对于小功率设备,电能传输效率应该说是相当不错了。

在无线供电电路的制作中,振荡电路可以采用任何一种形式的多谐振荡器,如三极管振荡电路、集成运放电路或者门电路构成的振荡电路,也可以采用74HC4060这种带振荡器的二进制异步计数器来实现,振荡频率在500kHz左右为宜。另外,比较重要的就是线圈的制作了,发射线圈用Φ0.5左右的电磁线(漆包线)在外径为1cm的骨架上绕48匝,然后固定好;接收线圈用Φ0.2左右的电磁线绕成内径为4mm左右的12匝空心线圈即可,关键是安装时不要使这两个线圈相碰。

最后,根据我的制作体会,给对此有兴趣的爱好者几点建议:

(1)L1匝数较多是为了有足够的感抗(感抗和电感量及交流频率有关),避免流过的电流过大而发热。其实L1也可以只绕10匝左右,但一定要配上大小合适的谐振电容,使其工作在谐振状态,这样可以获得更好的传输距离、输出功率和电能传输效率,包括L2的谐振电容也是如此。谐振电容的选择可以在示波器监视下进行,谐振电容可以用涤纶电容、聚乙烯电容等,建议不要用瓷介电容。

(2)传输能量时,波形不是很重要,但是失真太大就会使功率管工作在线性区,而非工作在开关状态,这样将使电能的传输效率大幅度下降。如果在功率管的前面增加一级射极跟随器,可以提高波形的质量,从而提高电能的传输效率。

(3)无线供电电路的工作频率不可太高,频率越高对VMOS管的要求也就越高,目前高频特性满足这种要求的VMOS管还不容易找到;频率越低,就要求L1的电感量越大。所以我们通常选择电路的工作频率在200kHz~1MHz为宜。

(4)L2感应的电压经整流、滤波后一定要有稳压电路,以保证单片机工作稳定。

如何保证显示信息稳定显示

要保证LED旋转显示屏显示正常和稳定,就要求单片机控制显示屏总是从电路板转到某一位置时开始播放所要显示的内容。通常的做法就是通过传感器来检测电路板的位置,并通过中断的方式通知单片机进行显示。传感器可以使用霍尔元件或者光电传感器,其中光电传感器要求工艺简单,安装方便。

综上所述,本万年历的电路原理图如图7.4所示。

图7.4 LED旋转显示屏电路原理图

电路说明

本电路采用无线感应供电方式给旋转部分供电,所以电路包括无线供电部分电路和旋转部分电路两部分。

无线供电部分采用图7.3所示电路。

旋转部分是由电动机带动,进行高速旋转,其电路非常简单,首先由接收端线圈产生感应电动势,经二极管VD19整流、电容C4滤波、稳压二极管VD20稳压后得到5V电源给整个电路供电,单片机的16个I/O口线分别控制16个发光二极管。为了方便修改程序,我在电路中安装了ISP下载接口。电动机可以选用5V长轴直流电机。

作为万年历,应该具备显示公历、农历、星期、时间以及环境温度的功能,并且在掉电的情况下,所有信息不丢失,时钟正常走时,这里我们使用时钟芯片DS1302和数字温度传感器DS18B20。

同时在电路中还增加了一体化红外遥控接收头,它用于通过遥控调整时间和其他参数。

需要说明的是,在电路中并没有具体标明单片机的型号,你可以选用最熟悉的单片机,只要I/O口够用就可以了,当然,在I/O口够用的情况下,尽量选用体积小、重量轻的单片机为佳。

另外,在无线供电电路板和旋转电路板之间安装一对红外光电传感器,将电路板的位置状态送到单片机的外部中断请求输入端,用以对显示内容进行定位。

电路组装与调试

本系统电路不太复杂,两块电路都可以在万用电路板上插装、焊接(有条件的话也可制作PCB)而成。制作时首先按照原理图在万用电路板上规划出合理的元件布局,然后按布局图将元件依次插装并焊接,最后把需要连接的引脚用电磁线和镀锡裸铜线连接起来。注意不要短路,线路连接关系不要出错。图7.5所示是装配好的无线供电电路及底座实物图。

图7.5 装配好的无线供电电路及底座

安装时需要将直流电机和供电电路板固定在一个盒子里,使电机的转轴伸出盒外,将发射线圈套在电机转轴上,并以电机转轴为中心。图7.6所示是装配好的旋转主板正、反面的实物图,发光二极管和限流电阻均使用贴片元器件,这样会使得像素更紧凑,显示更清晰。

图7.6 装配好的旋转主板正反面

单片机使用STC12C5616AD,28脚窄体DIP封装。LED与单片机引脚的连接均用电磁线相连,这样走线整齐、美观,还能减小整个电路板的体积,其他引脚的连接使用镀锡裸铜线连接。接收线圈固定在旋转主板的底面,然后随旋转主板一起插到电机转轴上,使接收线圈套在发射线圈的内部,构成变压器的形式。全部安装好以后,需要插到电机轴上,测试一下电路板是否平衡,如果不平衡,可以通过在适当位置加焊锡进行配重。

电路装配好以后,需要对硬件电路进行调试,方法是通过ISP下载线接口对主板供电,依次测试每个发光二极管是否正常发光,或者通过下载器向单片机烧入流水灯等简单程序,观察电路整体运行情况。

Tips

DS1302是美国DALLAS公司推出的一款高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器,具有主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

DALLAS半导体公司的数字化温度传感器DS18B20采用TO-92封装,体积小巧、接线方便,是世界上第一片支持“一线总线”接口的温度传感器。测量温度范围为-55~+125℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,支持3~5.5V的电压范围,使系统设计更灵活、方便。DS18B20可以程序设定9~12位的分辨率,精度为±0.5℃。DS18B20的性能是新一代产品中最好的,性能价格比也非常出色,让我们可以构建适合自己的经济的测温系统。

程序设计

本万年历的单片机程序流程图如图7.7所示。

图7.7 程序流程图

由程序流程图可知,主程序主要是对外部中断的控制寄存器进行初始化设置。系统共用到两个外部中断源,外部中断0的中断请求信号来自红外光电传感器的红外接收二极管。每当电路板的红外接收二极管转到与之对应的红外发射二极管的位置时,就会向CPU发出中断请求信号,CPU响应中断,调用显示子函数,这样显示子函数总是在电路板转到同一个位置时被调用,保证显示的内容正常和稳定。外部中断1的中断请求信号来自一体化红外遥控接收头,当收到红外遥控信号时,就会转向中断服务程序,对红外遥控信号进行解码,并进行相应的按键操作。因为当接收到红外遥控信号时,对遥控编码中的“0”和“1”的识别完全是靠时间长短区分的,为保证红外信号解码及时和正确,外部中断1必须设置为高优先级。

显示程序在外部中断0的中断服务程序中。编写程序时需要注意的是,在对字符或汉字取模时要采用逐列式,正序和倒序都是可以的,在程序中都可以调整。显示程序其实就是依次取出字模表中的数据,按时间前后顺序均输出到同一列发光二极管上。比如要显示5个汉字,每个汉字16列,共扫描80列,可用如下程序。

unsigned int i;

for (i=0;i<80;i++)

{

P1=tab[2*i];

P2=tab[2*i+1];

delay(70);//延时时间的长短决定了字的宽度

}

P1=0xff;//扫描完所有列后要熄灭所有LED

P2=0xff;

如果想让显示的字符出现如图1所示的效果,上半部是正立的,下半部也是正立的,我们可以编写一个字节倒序的子函数,对取出的字模数据首先作倒序处理,然后,显示程序的i值是从80减小到的,参考程序如下。

unsigned int i;

for (i=80;i)0;i--)

{

P2=chg(tab[2*i]);//chg是对字模数据作倒序处理的子函数

P1=chg(tab[2*i+1]);

delay(70);//延时时间的长短决定了字的宽度

}

P1=0xff;//扫描完所有列后要熄灭所有LED

P2=0xff;

数字温度传感器DS18B20和时钟芯片DS1302的读写程序在这里不再详细列出,需要的读者可以到qq群657864614进行下载。但需要注意的是,温度传感器DS18B20的读写对时序要求非常严格,并且读写过程中一旦被打断,就会导致读写错误,所以DS18B20的读写程序也放在外部中断0的中断服务程序中,我们可以放在显示上半部分文字和显示下半部文字的程序之间,作为两段文字之间的空格。

所有硬件和软件完成之后,下面就可以坐下来慢慢欣赏自己的作品了。

■我的淘宝店铺:首页-数码达人小李-淘宝网,主打电脑周边产品,性价比高,发货快,服务好,品质过硬,总有一款适合你,感谢支持!

单片机之DS1302万年历实验程序

这篇文章是接上一篇《教你玩单片机之DS1302》的内容,有不明白的朋友可以进入我的主页,看我之前发的内容,不喜勿喷。

万年历实验

实验效果 :1602显示时钟,按K3进入时钟设置,按K1选择设置的时分秒日月,按K2选择设置加1。

主程序

#include<reg51.h>

#include"lcd.h"

#include"ds1302.h"

sbit K1=P3^1;

sbit K2=P3^0;

sbit K3=P3^2;

sbit K4=P3^3;

void Int0Configuration();

void LcdDisplay();

unsigned char SetState,SetPlace;

void Delay10ms(void); //误差 0us

void main()

{

unsigned char i;

Int0Configuration();

LcdInit();

Ds1302Init();

while(1)

{

if(SetState==0)

{

Ds1302ReadTime();

}

else

{

if(K1==0)//检测按键K1是否按下

{

Delay10ms();//消除抖动

if(K1==0)

{

SetPlace++;

if(SetPlace>=7)

SetPlace=0;

}

while((i<50)&&(K1==0)) //检测按键是否松开

{

Delay10ms();

i++;

}

i=0;

}

if(K2==0)//检测按键K2是否按下

{

Delay10ms();//消除抖动

if(K2==0)

{

TIME[SetPlace]++;

if((TIME[SetPlace]&0x0f)>9) //换成BCD码。

{

TIME[SetPlace]=TIME[SetPlace]+6;

}

if((TIME[SetPlace]>=0x60)&&(SetPlace<2))//分秒只能到59

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>=0x24)&&(SetPlace==2))//小时只能到23

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>=0x32)&&(SetPlace==3))//日只能到31

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>=0x13)&&(SetPlace==4))//月只能到12

{

TIME[SetPlace]=0;

}

if((TIME[SetPlace]>=0x7)&&(SetPlace==5))//周只能到7

{

TIME[SetPlace]=1;

}

//if(SetPlace==5)//月只能到12

//{

//TIME[SetPlace]=;

//}

}

while((i<50)&&(K2==0)) //检测按键是否松开

{

Delay10ms();

i++;

}

i=0;

}

}

LcdDisplay();

}

}

void LcdDisplay()

{

LcdWriteCom(0x80+0X40);

LcdWriteData('0'+TIME[2]/16);//时

LcdWriteData('0'+(TIME[2]&0x0f));

LcdWriteData('-');

LcdWriteData('0'+TIME[1]/16);//分

LcdWriteData('0'+(TIME[1]&0x0f));

LcdWriteData('-');

LcdWriteData('0'+TIME[0]/16);//秒

LcdWriteData('0'+(TIME[0]&0x0f));

LcdWriteCom(0x80);

LcdWriteData('2');

LcdWriteData('0');

LcdWriteData('0'+TIME[6]/16);//年

LcdWriteData('0'+(TIME[6]&0x0f));

LcdWriteData('-');

LcdWriteData('0'+TIME[4]/16);//月

LcdWriteData('0'+(TIME[4]&0x0f));

LcdWriteData('-');

LcdWriteData('0'+TIME[3]/16);//日

LcdWriteData('0'+(TIME[3]&0x0f));

LcdWriteCom(0x8D);

LcdWriteData('0'+(TIME[5]&0x07));//星期

}

void Int0Configuration()

{

//设置INT0

IT0=1;//跳变沿出发方式(下降沿)

EX0=1;//打开INT0的中断允许。

EA=1;//打开总中断

}

void Int0() interrupt 0

{

Delay10ms();

if(K3==0)

{

SetState=~SetState;

SetPlace=0;

Ds1302Init();

}

}

void Delay10ms(void) //误差 0us

{

unsigned char a,b,c;

for(c=1;c>0;c--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);

}

#include"lcd.h"

#include"lcd.h"

void Lcd1602_Delay1ms(uint c) //误差 0us

{

uchar a,b;

for (; c>0; c--)

{

for (b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

}

#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时

void LcdWriteCom(uchar com) //写入命令

{

LCD1602_E = 0; //使能

LCD1602_RS = 0; //选择发送命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com; //放入命令

Lcd1602_Delay1ms(1);//等待数据稳定

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteCom(uchar com) //写入命令

{

LCD1602_E = 0; //使能清零

LCD1602_RS = 0; //选择写入命令

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = com;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

//Lcd1602_Delay1ms(1);

LCD1602_DATAPINS = com << 4; //发送低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

#ifndef LCD1602_4PINS

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0;//使能清零

LCD1602_RS = 1;//选择输入数据

LCD1602_RW = 0;//选择写入

LCD1602_DATAPINS = dat; //写入数据

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5); //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteData(uchar dat)//写入数据

{

LCD1602_E = 0; //使能清零

LCD1602_RS = 1; //选择写入数据

LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

LCD1602_DATAPINS = dat << 4; //写入低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

#ifndefLCD1602_4PINS

void LcdInit() //LCD初始化子程序

{

LcdWriteCom(0x38); //开显示

LcdWriteCom(0x0c); //开显示不显示光标

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清屏

LcdWriteCom(0x80); //设置数据指针起点

}

#else

void LcdInit() //LCD初始化子程序

{

LcdWriteCom(0x32); //将8位总线转为4位总线

LcdWriteCom(0x28); //在四位线下的初始化

LcdWriteCom(0x0c); //开显示不显示光标

LcdWriteCom(0x06); //写一个指针加1

LcdWriteCom(0x01); //清屏

LcdWriteCom(0x80); //设置数据指针起点

}

#endif

#include"ds1302.h"

#include"ds1302.h"

//---DS1302写入和读取时分秒的地址命令---//

//---秒分时日月周年 最低位读写位;-------//

uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};

uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---//

//---存储顺序是秒分时日月周年,存储格式是用BCD码---//

uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};

void Ds1302Write(uchar addr, uchar dat)

{

uchar n;

RST = 0;

_nop_();

SCLK = 0;//先将SCLK置低电平。

_nop_();

RST = 1; //然后将RST(CE)置高电平。

_nop_();

for (n=0; n<8; n++)//开始传送八位地址命令

{

DSIO = addr & 0x01;//数据从低位开始传送

addr >>= 1;

SCLK = 1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK = 0;

_nop_();

}

for (n=0; n<8; n++)//写入8位数据

{

DSIO = dat & 0x01;

dat >>= 1;

SCLK = 1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK = 0;

_nop_();

}

RST = 0;//传送数据结束

_nop_();

}

uchar Ds1302Read(uchar addr)

{

uchar n,dat,dat1;

RST = 0;

_nop_();

SCLK = 0;//先将SCLK置低电平。

_nop_();

RST = 1;//然后将RST(CE)置高电平。

_nop_();

for(n=0; n<8; n++)//开始传送八位地址命令

{

DSIO = addr & 0x01;//数据从低位开始传送

addr >>= 1;

SCLK = 1;//数据在上升沿时,DS1302读取数据

_nop_();

SCLK = 0;//DS1302下降沿时,放置数据

_nop_();

}

_nop_();

for(n=0; n<8; n++)//读取8位数据

{

dat1 = DSIO;//从最低位开始接收

dat = (dat>>1) | (dat1<<7);

SCLK = 1;

_nop_();

SCLK = 0;//DS1302下降沿时,放置数据

_nop_();

}

RST = 0;

_nop_();//以下为DS1302复位的稳定时间,必须的。

SCLK = 1;

_nop_();

DSIO = 0;

_nop_();

DSIO = 1;

_nop_();

return dat;

}

void Ds1302Init()

{

uchar n;

Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能

for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年

{

Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);

}

Ds1302Write(0x8E,0x80); //打开写保护功能

}

void Ds1302ReadTime()

{

uchar n;

for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年

{

TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);

}

}

相关问答

【基于AT89S52 单片机 的电子 万年历 的设计与制作,的目的和意义...

基于AT89S52单片机的电子万年历的设计与制作,的目的和意义,急求!技术指标:1、用液晶显示年月、日、星期、时、分、秒,阴历、运行时间、温度.2、具有年、月...

谁能给我说一下!电子日历 单片机 制作?,制作 单片机 怎么选,都...

[回答]服务热情,公司环境设备先进,价格合理品控做的不错,据说他们生意做的也很好。还不错的,他们专业承接设计电路板,以前朋友在那做了,还批量生产了。下...

大侠们,有没有谁知道!电子日历 单片机 制作?,制作 单片机 哪个...

[回答]对于C语言的,单片机内部使用while(1)这个语句实现不断地循环,如果是用汇编来写的话,我记得有伪指令可以实现跳转功能,这跳转功能就能实现不断地循环...

电子 万年历 20年到期如何升级?

电子万年历一般是指使用电子元件(如单片机、显示屏等)制作的一种电子钟表,它通常具有一定的使用寿命,并且在使用过程中可能会出现一些问题,比如显示不准确、...

国外电子 万年历 发展情况?

电子万年历是采用独立芯片控制内部数据运行,以LED夜光数码显示日期、时间、星期、节气倒计,以及温度等日常信息,糅合了多项先进电子技术及现代经典工艺打造的...

做时钟可以直接用一片 单片机 吗?

是的,可以直接使用一片单片机来制作时钟。单片机是一种集成电路,内部包含了处理器、存储器、定时器等功能模块,可以通过编程来控制各种外部设备。通过编写程序...

51 单片机 简单电子时钟 程序 ,通过按钮设置时间,并且通过DS1302...

但都需要写程序读出时间和日期。有用(0)回复px1203只给出按键调整时、分、秒程序SECEQUP3.5;调秒按键接P3.5,另一端接地MINEQUP3.6HOUREQUP...

晶振在 单片机 中的实际作用,为什么必须要时钟信号?

起码内部有一个程序计数器,一个脉冲加1然后决定程序存储器的地址另外定时器也要有时基脉冲访问外部数据存储器也要锁存脉冲总之时钟好比很多人一起干活或...

单片机 PWM 程序 是肿么编写的啊,能给一个简单的例子吗?-ZOL问答

有PWM功能的单片机入STC12系列单片机,直接给专用寄存器赋值开启相应定时器就可以了。普通单单片机,PWM需要用自己来调配。比如:#includeunsigne...

C语言编写年历显示 程序 20分- 汇财吧专业问答test

[回答]一、设计题目万年历的设计二、设计要求1、能够显示星期;2、能够显示年月日;3、能够修改;4、当系统时间变动时,能自动跳到相应的时间。三...C语言设...

猜你喜欢