电子万年历实验1
数字万年历实训报告电气

一、实训目的随着科技的不断发展,电子产品的应用越来越广泛。
数字万年历作为一种常见的电子设备,具有显示日期、星期、农历、节假日等多种功能,给人们的生活带来了极大的便利。
为了更好地掌握电子产品的设计原理和制作方法,提高自身的实践能力,本次实训旨在通过设计和制作数字万年历,使学生对电子技术、电路设计、编程等方面有一个全面的认识和掌握。
二、实训内容1. 数字万年历的设计(1)功能需求分析根据用户需求,数字万年历应具备以下功能:1)显示日期、星期、农历、节假日等信息;2)具有闹钟功能,可设定闹钟时间、闹钟音量等;3)具有定时关机功能,可根据用户需求设定关机时间;4)具备背光功能,便于夜间使用;5)具有定时更新功能,可自动更新农历、节假日等信息。
(2)硬件设计1)主控芯片:选用STM32F103系列单片机,具有丰富的片上资源,易于编程和控制。
2)显示模块:采用TFT LCD显示屏,显示效果清晰,支持触摸操作。
3)按键模块:采用独立按键,实现功能选择、闹钟设置、关机等操作。
4)时钟模块:采用DS3231实时时钟模块,提供高精度的时间测量和闹钟功能。
5)背光模块:采用LED背光,可调节亮度,满足不同环境需求。
6)电源模块:采用DC-DC转换器,将5V输入电压转换为3.3V输出电压,为电路提供稳定电源。
(3)软件设计1)系统初始化:初始化各个模块,包括显示模块、按键模块、时钟模块等。
2)主循环:根据用户操作,实现功能切换、闹钟设置、关机等功能。
3)闹钟功能:实现闹钟时间设置、闹钟音量调节、闹钟提醒等功能。
4)定时关机功能:根据用户设置,实现定时关机功能。
5)背光功能:实现背光亮度调节,满足不同环境需求。
6)定时更新功能:自动更新农历、节假日等信息。
2. 数字万年历的制作(1)焊接电路板:按照电路图,焊接各个模块,确保电路连接正确。
(2)编程:使用Keil uVision5开发环境,编写STM32F103单片机程序,实现数字万年历的功能。
多功能电子万年历实训报告

一、引言随着科技的发展,电子产品在我们的日常生活中扮演着越来越重要的角色。
作为电子信息专业的一名学生,我深知理论与实践相结合的重要性。
为了提高自己的动手能力和解决实际问题的能力,我参加了本次多功能电子万年历的实训项目。
通过本次实训,我不仅掌握了单片机的基本原理和编程方法,还学会了如何将理论知识应用于实际项目中。
二、实训目的1. 熟悉单片机的硬件结构和编程方法。
2. 掌握电子万年历的设计原理和实现方法。
3. 提高动手能力和解决实际问题的能力。
4. 培养团队协作和沟通能力。
三、实训内容本次实训主要围绕多功能电子万年历的设计与实现展开,主要包括以下几个方面:1. 硬件设计:选择合适的单片机作为核心控制单元,设计电路图,并焊接电路板。
2. 软件设计:编写程序,实现万年历的基本功能,如显示日期、时间、星期、闰年判断、闹钟等。
3. 温度采集:使用DS18B20温度传感器采集环境温度,并在LCD1602显示屏上显示。
4. 按键控制:设计按键电路,实现时间校准、闹钟设置、温度显示等功能。
四、实训过程1. 硬件设计:- 选择AT89C52单片机作为核心控制单元,因为它具有低功耗、高性能的特点。
- 设计电路图,包括晶振电路、复位电路、时钟电路、按键电路、LCD1602显示电路、温度传感器电路等。
- 焊接电路板,确保电路连接正确。
2. 软件设计:- 使用Keil软件编写程序,实现万年历的基本功能。
- 编写时间显示、闹钟、温度显示等模块的程序。
- 编写按键扫描程序,实现时间校准、闹钟设置、温度显示等功能。
3. 温度采集:- 使用DS18B20温度传感器采集环境温度。
- 将温度数据转换为数字信号,并在LCD1602显示屏上显示。
4. 按键控制:- 设计按键电路,实现时间校准、闹钟设置、温度显示等功能。
- 编写按键扫描程序,检测按键状态,并执行相应的操作。
五、实训结果经过努力,我成功完成了多功能电子万年历的设计与实现。
该万年历具有以下功能:1. 显示年、月、日、星期、时、分、秒。
万年历实验报告

篇一:电子万年历实验报告重庆电力高等专科学校计算机科学系实训报告课程名称实验名称班级信息0911 姓名廖林单片机应用技术电子万年历学号 200903020243 教师任照富日期 2010-12-28 地点一教七机房一、实训任务:1、看实训要求,计划出自己实训所要用元件,在网上查找资料。
2、思考仿真原理图,然后画出来(具体i/o口暂时不确定)。
3、在网上找一些程序,然后自己改一些,进行编译。
4、编译无误之后,跟原理图相联系,完成最终的仿真图。
5、进行最后的改写,把程序和仿真原理图确定下来。
6、根据仿真图形,制作出实物图。
7、在实物制作过程中,进行电路检查和最后的调试。
二、实训要求:要求:能显示阳历的年、月、日、星期、时、分、秒;能显示阴历的年、月、日;能进行日期、时间的调整。
扩展:能显示当前温度;有闹钟功能(至少2个)选择ds1302时钟芯片,温度传感器采用ds18b20数字温度传感器。
三、实训环境(软件、硬件):软件:keil protues7.5硬件:计算机2单片机的应用四、实训意义:在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。
因此我们需要一个定时系统来提醒这些忙碌的人,而数字化的钟表给人们带来了极大的方便。
由于单片机具有灵活性强、成本低、功耗低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来实现。
电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。
因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。
而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。
所以,电子万年历无论作为竞赛题目还是毕业设计题目都是很有价值。
对于这个实验项目,我们还要有一些其他的基本知识掌握和意义:(1)在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,为了培养动手能力和解决实际问题的经验,了解专用时钟芯片ds1302,并会用ds1302芯片开发时钟模块,应用到其他系统中去。
电子万年历实验报告

实验报告电子万年历:一、需求分析:电子万年历系统主要实现以下单个查询功能:1、查询某一年的日历。
要求从键盘输入年份,输出该年12个月份的日历2、查询某一天某一个月的日历。
要求从键盘输入年份和月份,输出该月的日历。
3、查询某一天是星期几。
要求从键盘输入年、月、日,输出这一天是星期几。
二、总体设计:1、功能模块图计算模块:用于计算天数,判断闰年输出模块:用于菜单输出和日历输出查询模块:实现查询某一年的日历。
查询某一天某一个月的日历。
查询某一天是星期几。
三、详细设计:1、计算模块:计算模块主要包含3个函数:LeapYear()、CountYearDays()、CountMonthDays函数CountYearDays()功能是计算从公元元年1月1日到某年12月31日一共有多少天。
CountYearDays()功能是几双当年1月1日到输入日期的前一个月的天数2、输出模块包含2个函数:Menu()和ListMonth()函数。
Menu()函数用来输出系统提供的功能选项。
ListMonth()函数用来按规定格式输出一个月的日历。
3、查询模块针对系统要实现三个查询功能定义了3个函数:Search1()、 Search2()和 Search3()函数。
函数Search1()用来显示一年12个月的日历,输入年份后,计算该年1月1日是星期几,然后从1月份开始一次输出每个月的日历,其中调用了函数LeapYear()、CountYearDays()和CountMonthDays()。
函数Search2()用来显示某年某月的日历,输入年份和月份后,计算出该年该月1日是星期几,然后输出这个月的日历,其中调用了函数LeapYear()和CountYearDays()、CountMonthDays()和ListMonth()。
函数Search3()用来显示某天是星期几,通过调用函数LeapYear()、CountYearDays()和CountMonthDays()计算出从公元元年1月1日到这一天总共过去了多少天,用这个总天数除以7得到的余数即为答案。
电子万年历实训报告

Key words Monolithic single-chip, lunar calendar demand, perpetual calendars
1、绪论
本设计主要分为硬件电路设计和软件实现两大部分。硬件电路设计采用模块设计:言编程实现,设计采用按功能模块划分,包括:主程序、显示程序、温度测量程序、时钟程序等。
关键词:单片机,农历查询,万年历
Abstract
Based on a micro controller based on the will to achieve calendar of a multi-functional electronic clock design.thereby achieve studying and understanding the relevant directives SCM in all aspects of the application. By main control AT89C51、clock circuit DS1302、display circuit、key stroke circuit and in store circuit componented ,to achieve clock calendar display function can be carried out, hours seconds of the show and real-time temperature display.
基于PIC单片机电子万年历实验报告

实验报告姓名:文可鑫学号:20072121010 专业:电子信息工程1编写一个秒表程序,使用查询方式。
list p=16f877ainclude"p16f877a.inc"include<leddis.inc>count equ 20hcount_s equ 21horg 000hstart nopcall InitSPIbanksel OPTION_REGmovlw 04hmovwf OPTION_REGbanksel INTCONmovlw 00hmovwf INTCONmovlw 06hmovwf TMR0movlw d'131'movwf countmovlw 00hmovwf count_smain btfss INTCON,T0IFgoto $-1movlw 06hmovwf TMR0bcf INTCON,T0IFincf count,fbtfss STATUS,Zgoto mainmovlw d'131'movwf countincf count_s,fmovf count_s,wsublw d'60'btfsc STATUS,Zclrf count_smovf count_s,wcall Bin2BCDmovf DIS_TEMP2,wcall CHAR_CODE1movwf DIS_TEMP2movf DIS_TEMP1,wcall CHAR_CODE1movwf DIS_TEMP1call LEDlightnopgoto mainCHAR_CODE1;共阴极字符表ADDWF PCL,FRETLW 3fh ;0RETLW 06h ;1RETLW 5bh ;2RETLW 4fh ;3RETLW 66h ;4RETLW 6dh ;5RETLW 7dh ;6RETLW 07h ;7RETLW 7fh ;8RETLW 6fh ;9Bin2BCDCLRF DIS_TEMP1MOVWF DIS_TEMP2TtenthMOVLW .10SUBWF DIS_TEMP2,WBTFSS STATUS,CGOTO OUTMOVWF DIS_TEMP2INCF DIS_TEMP1,FGOTO TtenthOUTRETURNend2编写一个秒表程序,使用中断方式。
万年历实验报告

万年历的制作实验目的:电子时间显示器现在在任何地方都有涉及到,例如电子表和商场的时间显示等等,所以它是一种既方便又实用的技术,而我们所做的万年历则是在它的基础上做出来的,通过万年历的制作,我们可以进一步了解计数器的使用,了解各个进制之间的转换,以及他的任意进制计数器的构成方法等,并且进一步了解74LS160的性质,以及门电路的使用等。
实验器材:ISIS仿真软件(74LS160,74LS00,显示器等等)实验原理:74LS160是一个十进制的计数器,两片74LS160可以组成不同进制的计数器,所以可根据它的这个特点来组成实验所需的进制数。
实验步骤:✧制作万年历时,因为有进位的关系,所以应首先制作万年历的秒,秒是60进制的,所以需要制作一个60进制的计数器,由于74LS160是一个十进制的计数器,所以要制作一个60进制的计数器就需要两片74LS160来完成,秒的个位就可直接用十进制来向秒的十位来进位,由于是60进制的,所以秒到60的时候就要清零,下图是秒的制作图秒制作完后就应该制作万年历的分了,分和秒一样都是60进制的,所以它的连线和秒是一样的,如下是它的仿真连线图分钟之后就是小时,一天有24个小时,所以时是24进制的,在此,我采用的是整体置数的方法,首先将两片74LS160接成百进制计数器,然后将电路译码产生0=MR 信号,同时加到两片74LS160上,在下一个计数脉冲到达时将0000同时置入两片74LS160中,从而得到24四进制的计数器,如下是其仿真连线图小时的进位信号给星期和日,下面先来做星期星期的制作所以此时的电路连接图为:◆ 在做万年历的过程中,因为年份有闰年和平年之分,所以导致了二月的天数有所改变,在此我们首先就要先判断闰年和平年◆ 闰年的判断方法如下:闰年是一个能被4整除的数(一) 当年的十位为偶数时:它的个位则是0、4、8当年的十位为奇数时:它的个位则是2、6由卡诺图可知,当年份的十位为奇数时:1001个个十Q Q Q Y = 当年份的十位为偶数时:1002个个十Q Q Q Y =321032100个个个个十十十十全Q Q Q Q Q Q Q Q Y =021)(全Y Y Y Y a +=百位千位为任意数由卡诺图可知,当年份的千位为奇数时:1003百个百千Q Q Q Y = 当年份的千位为偶数时:1004百百千Q Q Q Y =043)(全Y Y Y Y b +=YA 和YB 是通过上面的公式得出的电路连接图1001个个十Q Q Q Y =1002个个十Q Q Q Y =Yq0f 为0全YYR 则是判断的闰年YR=YA+YB由于二月在平年和闰年的天数有所不同,所以要对二月进行判断YA=1Y YB=2Y2100个个个十二月Q Q Q Q Y此时的Y2U=二月Y一年当中有小月和大月之分,所以首先要对小月进行判断,一年当中2、4、6、9、11月是小月所以Y=02个个Q Q +03个个Q Q +02个个Q QYX1=02个个Q Q YX2=03个个Q QYX3=02个个Q QYXU=02个个Q Q +03个个Q Q +02个个Q Q上述步骤完成之后:将大月,小月还有二月的天数用译码器译码出来,其译码连接图见下图图中的Y28,Y29,Y30,Y31为译码出来的二月,小月和大月,而Y281,Y291,Y301,Y311则是平年的二月,闰年的二月,小月和大月的天数如图所示,此时的LD= Y281+Y291+Y301+Y311 而LD 是置0信号,所以LD=LD又因为日的开始值是一,所以要给日置1,D0就要接VCC 上述的链接完成之后,就可得到完整的万年历的显示,但是通常显示出来的时间都不是我们所理想的显示时间,因此我们需要一个调整器来调整时间,从而来达到我们需要的时间在此我们就需要一个开关和脉冲来进行调整,如图所示当开关打到正常的脉冲时,显示的时间不再变化,当开关打到脉冲时,我们就可以进行调整整个完整的电路图如下图。
制作电子万年历实训报告

一、引言随着科技的飞速发展,电子产品的普及和应用越来越广泛。
电子万年历作为一种常见的电子设备,不仅可以显示年、月、日、星期、时、分等信息,还可以实现闹钟、定时显示等功能。
为了提高我们的实践能力和创新能力,本次实训我们选择制作一款基于单片机的电子万年历。
二、实训目的1. 掌握电子万年历的基本原理和设计方法。
2. 熟悉单片机的编程和应用。
3. 培养团队协作能力和动手实践能力。
三、实训内容1. 硬件设计本实训所使用的硬件主要包括以下部分:- 单片机:AT89C52- 时钟模块:DS1302- 显示模块:LCD1602- 遥控模块:1838V- 按键模块:S1(设置键)、S2(上调键)、S3(下调键)、S4(复位键)硬件电路图如下:2. 软件设计本实训所使用的软件主要包括以下部分:- 单片机编程:C语言- 显示程序:LCD1602驱动程序- 遥控程序:1838V遥控接收程序软件流程图如下:3. 功能实现本实训所实现的电子万年历具有以下功能:- 显示年、月、日、星期、时、分等信息。
- 遥控操作:设置时间、星期、日期等。
- 定时显示:定时显示当前时间。
- 停电自动计时:采用DS1302时钟模块,停电后可继续计时。
四、实训过程1. 硬件搭建首先,我们根据电路图搭建了电子万年历的硬件电路。
在搭建过程中,我们注意了以下几点:- 确保电路连接正确,避免短路或开路。
- 选择合适的元器件,确保电路性能稳定。
- 对电路进行测试,确保电路正常工作。
2. 软件编程接下来,我们使用C语言对单片机进行编程。
在编程过程中,我们遵循以下步骤:- 分析功能需求,确定程序结构。
- 编写程序代码,实现各项功能。
- 调试程序,确保程序运行正常。
3. 测试与优化在完成软件编程后,我们对电子万年历进行测试。
在测试过程中,我们发现以下问题:- 遥控操作不稳定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
此寄存器为DS1302充电模式控制位,结构如下所示
涓流充电选择位TCS位(BIT4至7)控制涓流充电器的选择。为防止偶然的因素使其工作,只有1010模式才能使涓流充电器工作。所有其它的模式将禁止涓流充电。在DS1302上电后。涓流充电将被禁止。该二极管选择DS位(BIT2和3)选择是一个二极管还是两个二极管之间在Vcc2和Vcc1连接。如果DS为01,则选择一个二极管。如果DS为10,则两个二极管被选中。如果DS为00或11,充电器被禁止,与TCS无关。RS位(BIT0和1)选择是在Vcc2和Vcc1之间的连接电阻。电阻的选择如下所示:
DS1302WriteByte(cmd);//传输命令字,要读取的时间/日历地址
dat=DS1302ReadByte();//读取要得到的时间/日期
SCLK=1;//时钟线拉高
RST=0;//读取结束,CE置为0,结束数据的传输
return dat;//返回得到的时间/日期
}
/************************************************
void main()
{
Delayms(50);
EX1 = 1;//外部中断开
EA = 1;//全局中断开
CH452_Write(CH452_SYSON2);//初始化CH452
Init_1602();//初始化LCD
Init8259a();//初始化8259a
Dispaly_Menu();//显示年月日等文字
{
SDA=dat&0x01;//取最低位,注意DS1302的数据和地址都是从最低位开始传输的
delayus(2);
SCLK=1;//时钟线拉高,制造上升沿,SDA的数据被传输
delayus(2);
SCLK=0;//时钟线拉低,为下一个上升沿做准备
dat>>=1;//数据右移一位,准备传输下一位数据
}
可通过简单的串行接口与单片机进行通信
可提供:
--秒分时日日期月年的信息
--每月的天数和闰年的天数可自动调整
--可通过AM/PM 指示决定采用24 或12 小时格式
--保持数据和时钟信息时功率小于1mW
DS1302引脚
X1 X2 32.768KHz 晶振管脚
GND 地
CE 复位脚
I/O 数据输入/输出引脚
}
/************************************************
*名称: DS1302ReadByte
*说明:无
*功能:读取8bit的数据
*调用: delayus()
*输入:无
*输出: dat:读取的数据
*************************************************/
void DS1302Write(uchar cmd, uchar dat)
{
RST=0;//初始CE线置为0
SCLK=0;//初始时钟线置为0
RST=1;//初始CE置为1,传输开始
DS1302WriteByte(cmd);/传输命令字,要写入的时间/日历地址
DS1302WriteByte(dat);//写入要修改的时间/日期
秒寄存器的BIT7定义为时间暂停位,当BIT1为1时,时钟振荡器停止工作,DS1302进入低功耗模式,电源消耗小于100微安,当BIT1为0时,时钟振荡器启动,DS1302正常工作。
小时寄存器的BIT7定义为12或24小时工作模式选择位,当BIT7为高时,为12小时工作模式,此时BIT5为AM/PM位,低电平标示AM,高电平标示PM,在24小时模式下,BIT5为第二个10小时位标示(20~23时)。
主函数部分
主函数部分只需要按照流程图的需要调用各个模块即可/************************************************
*名称: void main()
*说明:无
*功能:读取8bit的数据
*调用: delayms()
*输入:无
*输出: dat:读取的数据
*************************************************/
Delayms(50);
//Init_DS1302();//初始化DS1302,只需要执行一次,设定好后,不需要再次执行
while(1)//while中的值只循环显示小时,分钟,秒这几个常变量,有其他需要,可以继续添加
控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1(A4~A0):指示操作单元的地址;
位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。
控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
实际电路:
DS1302内部结构:
DS1302内部包括:
Power control:电源控制模块
Input shift registers:输入移位寄存器
Command and control logic:通讯与逻辑控制器
Oscillator and divider:晶体振荡器及分频器
DS1302控制字:
DS1302时序:
如图,所示
CE输入驱动高启动所有的数据传输。
CE输入有两个功能。首先,CE打开控制逻辑,允许访问的移位寄存器的地址/命令序列。其次,CE提供了一个终止单字节或多字节数据传输方法。
一个时钟周期是由一个下降沿之后的上升沿序列。对于数据传输而言,数据必须在有效的时钟的上升沿输入,在时钟的下降沿输出。如果CE为低,所有的I / O引脚变为高阻抗状态,数据传输终止。
*输出:无
*************************************************/
void DS1302WriteByte(uchar dat)
{
uchar i;
SCLK=0;//初始时钟线置为0
delayus(2);
for(i=0;i<8;i++)//开始传输8个字节的数据
uchar DS1302ReadByte()
{
uchar i,dat;
delayus(2);
for(i=0;i<8;i++)
{
dat>>=1;//要返回的数据左移一位
if(SDA==1)//当数据线为高时,证明该位数据为1
dat|=0x80;//要传输数据的当前值置为1,若不是,则为0
SCLK=1;//拉高时钟线
CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,
CE提供结束单字节或多字节数据传输的方法。
参考电路:
如上图所示:
DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。
关于突发模式(burst mode或称多字节传输模式),突发模式可以指定任何的时钟/日历或者RAM寄存器为突发模式,和以前一样,第6位指定时钟或RAM而0位指定读或写。
在时钟/日历寄存器中的9至31和在RAM寄存器的地址31不能存储数据。突发模式的读取或写入从地址的位0开始。
DS1302
如图所示,时钟日历包含在7个读/写寄存器内,读/写寄存器中的数据是二——十进制的BCD码。
delayus(2);
SCLK=0;//制造下降沿
delayus(2);
}
return dat;//返回读取出的数据
}
程序流程设计
几个数组,用来定义要显示的汉字信息
unsigned char Chinese_1[17] = {0xc4,0xea, 0xd4,0xc2, 0xc8,0xd5, 0xca,0xb1, 0xb7,0xd6, 0xc3,0xeb, 0xd0,0xc7, 0xc6,0xda, ' '};//年月日时分秒星期
*输出: dat:读取的数据
*************************************************/
uchar DS1302Read(uchar cmd)
{
uchar dat;
RST=0;//初始CE线置为0
SCLK=0;//初始时钟线置为0
RST=1;//初始CE置为1,传输开始
*名称: DS1302Write
*说明:先写地址,后写数据
*功能:向cmd相应地址中写一个字节的数据
*调用: DS1302WriteByte()
*输入: cmd:要写入的控制字,dat:要写入的数据
*输出:无
*************************************************/
SCLK=1;//时钟线拉高
RST=0;//读取结束,CE置为0,结束数*********************************
*名称: DS1302WriteByte
*说明:无
*功能:写入8bit数据
*调用: delayus()