数码管万年历实习报告..

合集下载

数字万年历实训报告电气

数字万年历实训报告电气

一、实训目的随着科技的不断发展,电子产品的应用越来越广泛。

数字万年历作为一种常见的电子设备,具有显示日期、星期、农历、节假日等多种功能,给人们的生活带来了极大的便利。

为了更好地掌握电子产品的设计原理和制作方法,提高自身的实践能力,本次实训旨在通过设计和制作数字万年历,使学生对电子技术、电路设计、编程等方面有一个全面的认识和掌握。

二、实训内容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单片机程序,实现数字万年历的功能。

万年历组装实训报告

万年历组装实训报告

—實訓報告—(单片机实训报告)学院系别:机电工程学院专业班级:电信BK31901设计学生:张欢指导老师:陈老师、阎老师设计时间:2012年10月19日万年历组装与调试及单片机实训报告2012-10-219| 电信BK31901班张欢一、实习时间:2012年10月15日至2012年10月19日二、实习地点:机电实训楼三、实习目的与要求:1熟练C语言中if语句、for语句、while语句的使用。

2.掌握万年历的基本原理,学会分析基本的电路原理图。

3.学会利用Keil软件和proteus软件进行设计。

四、实习内容:1.利用Keil软件对数码管(秒表)液晶(时钟)编程,并进行编译和链接。

2.掌握AT89C51芯片I/O口的功能及作用。

3.灵活运用C语言对中断、定时计数器及数码管进行编程设计。

4认真掌握proteus仿真软件,并用proteus画出电路图软件进行仿真。

5.掌握万年历的工作原理,学会贴片电容,贴片电阻,晶振集成块的识别与测试,进一步掌握和熟练焊接技术。

五、运用Keil软件对数码管及液晶进行编程设计并用proteus仿真1.用数码管显示0—60的源程序:#include<reg51.h>#define uint unsigned char#define uchar unsigned intsbit K1=P3^7;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<500;t++);}void Key_Byent_Handle(){ if(Key_State==0){Key_Flag_Idx=(Key_Flag_Idx+1)%3;switch(Key_Flag_Idx){case 1:EA=1;ET0=1;TR0=1;break;case 2:EA=0;ET0=0;TR0=0;break;case 0:P0=0x3f;P2=0x3f;i=0;Second_Counts=0; }}} void main(){P0=0x3f;P2=0x3f;i=0;Second_Counts=0;Key_Flag_Idx=0;Key_State=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;while(1){if(Key_State!=K1){DelayMS(10);//开关消抖Key_State=K1;Key_Byent_Handle();}}}void DSY_keyfresh() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(++i==2){i=0;Second_Counts++;P0=DSY_CODE[Second_Counts/10];P2=DSY_CODE[Second_Counts%10];if(Second_Counts==60)Second_Counts=0;}}2.用液晶显示年、月、日、字符串的源程序:#include<reg52.h>unsigned char code tab[]="welcome BK31901"; unsigned char code tab1[] ="2012-10-19"; unsigned char num;sbit RS=P1^2;sbit RW=P1^1;sbit E =P1^0;void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=0;y<150;y++);}void write_com(unsigned char cmd){RS=0;RW=0;E=1;P2=cmd;E=0;delay(2);}void write_data(unsigned char dat){RS=1;RW=0;E=0;P2=dat;E=0;delay(2);}void init(){write_com(0x38);write_com(0x08);write_com(0x01);write_com(0x0f);write_com(0x06);}int main(){init();write_com(0x80);for(num=0;num<17;num++){write_data(tab[num]);}write_com(0x80-0x42);for(num=0;num<11;num++){ write_data(tab1[num]);}while(1);return 0;}3.用proteus画出电路图软件进行仿真六、作品实物图片七、心得体会在本次单片机实训中,我们从焊接贴片电阻、贴片电容、电子元器件开始,到组装、调试、检验合格,完成了万年历的整个过程。

6、用DS1302与LCD1602可调数字万年历实验设计报告

6、用DS1302与LCD1602可调数字万年历实验设计报告

利用时钟芯片DS1302实现万年历系别电子通信工程系组别第十组专业名称电子信息工程指导教师组内成员2013年8月19日用DS1302与LCD1602设计的可调式电子日历时钟一、总体设计1.1、设计目的为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。

1.2、设计要求(1)显示:年、月、日、时、分、秒和星期;(2)设置年、月、日、时、分、秒和星期的初始状态;(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。

控制程序的编写等。

备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。

1.3、系统基本方案选择和论证1.3.1、单片机芯片的选择方案方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。

方案二:采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。

但造价较高。

1.3.2 、显示模块选择方案和论证:方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。

所以不用此种作为显示。

方案二:采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。

所以也不用此种作为显示。

方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。

数字万年历实习报告

数字万年历实习报告

实习报告一、实习背景及目的随着科技的不断发展,数字电子技术在人们的生活中扮演着越来越重要的角色。

数字万年历作为一种实用性强的电子产品,不仅能够提供准确的日期信息,还能具备一些扩展功能,如节日提醒、闹钟等。

为了提高自己的实践能力和对数字万年历的了解,我选择了数字万年历设计制作作为实习项目。

本次实习的主要目的是通过实际操作,掌握数字万年历的设计原理和制作过程,提高自己的电子技术应用能力。

二、实习内容1. 数字万年历的设计在实习过程中,我首先学习了数字万年历的设计原理,了解了其核心组成部分,包括微控制器、显示模块、按键输入模块等。

在此基础上,我根据实习指导书提供的电路图和程序代码,设计了数字万年历的硬件电路和软件程序。

2. 数字万年历的组装在设计完成后,我开始进行数字万年历的组装工作。

首先将微控制器、显示模块、按键输入模块等元器件焊接在电路板上,然后连接电源模块和时钟模块。

在组装过程中,我学习了如何使用电烙铁、焊锡等工具,提高了自己的动手能力。

3. 数字万年历的调试与优化完成组装后,我开始对数字万年历进行调试。

通过反复测试,发现并解决了一些问题,如显示模块显示异常、按键响应不良等。

在解决问题过程中,我深入分析了电路原理和程序代码,掌握了数字万年历的运行机制。

最后,我对程序代码进行了优化,提高了数字万年历的运行效率。

三、实习收获1. 提高了自己的电子技术应用能力。

通过本次实习,我掌握了数字万年历的设计原理、组装方法和调试技巧,提高了自己在电子技术方面的实际操作能力。

2. 培养了动手能力和团队协作精神。

在实习过程中,我学会了如何使用各种电子工具,培养了动手能力。

同时,与同学们一起讨论问题、分享经验,提高了团队协作精神。

3. 增强了自己的问题解决能力。

在数字万年历的调试过程中,我遇到了各种问题,通过查阅资料、请教同学和老师,逐步解决问题,增强了自己的问题解决能力。

4. 加深了对数字电子技术的理解。

通过实习,我对数字电子技术的基本原理和应用有了更深入的了解,为今后学习相关课程和从事相关工作奠定了基础。

数字万年历组装实训报告

数字万年历组装实训报告

一、实训背景随着科技的发展,电子产品在我们的日常生活中扮演着越来越重要的角色。

为了提高学生的动手能力和实际操作技能,同时也为了加深对数字电路知识的理解,我们选择了数字万年历的组装作为实训项目。

数字万年历是一种具有日历、星期、日期、农历、节假日等多种功能的电子设备,它集成了数字电路、微控制器、液晶显示屏等元件,能够直观地显示日期和时间信息。

二、实训目的1. 通过组装数字万年历,使学生掌握数字电路的基本原理和实际应用。

2. 培养学生的动手能力、团队协作能力和创新意识。

3. 加深对微控制器、液晶显示屏等电子元件的理解和认识。

4. 学会使用电子工具和仪器,提高实际操作技能。

三、实训内容1. 硬件准备:数字万年历的硬件主要包括微控制器、液晶显示屏、时钟模块、按键、电源模块等。

2. 元件识别:学习各种电子元件的外观、符号、规格等,了解它们在电路中的作用。

3. 电路设计:根据数字万年历的功能要求,设计电路图,包括电路元件的连接方式和电路参数。

4. 电路焊接:按照电路图,将各个电子元件焊接在一起,确保电路的连通性。

5. 软件编程:编写微控制器的程序,实现万年历的各项功能,如时间显示、日期设置、农历查询等。

6. 系统调试:检查万年历的各项功能是否正常,对出现的问题进行调试和修复。

四、实训过程1. 硬件准备:首先,我们准备了一套数字万年历的组装套件,包括微控制器、液晶显示屏、时钟模块、按键、电源模块等。

2. 元件识别:在指导老师的讲解下,我们学习了各种电子元件的外观、符号、规格等,了解了它们在电路中的作用。

3. 电路设计:根据数字万年历的功能要求,我们设计了电路图,包括电路元件的连接方式和电路参数。

电路图设计完成后,我们将其打印出来,作为焊接的依据。

4. 电路焊接:按照电路图,我们将各个电子元件焊接在一起。

在焊接过程中,我们注意以下几点:a. 焊接前,检查元件的规格和引脚是否正确;b. 焊接时,控制好焊接时间,避免过热损坏元件;c. 焊接完成后,检查焊接点是否牢固,是否有虚焊现象。

万年历实验报告

万年历实验报告

篇一:电子万年历实验报告重庆电力高等专科学校计算机科学系实训报告课程名称实验名称班级信息0911 姓名廖林单片机应用技术电子万年历学号 200903020243 教师任照富日期 2010-12-28 地点一教七机房一、实训任务:1、看实训要求,计划出自己实训所要用元件,在网上查找资料。

2、思考仿真原理图,然后画出来(具体i/o口暂时不确定)。

3、在网上找一些程序,然后自己改一些,进行编译。

4、编译无误之后,跟原理图相联系,完成最终的仿真图。

5、进行最后的改写,把程序和仿真原理图确定下来。

6、根据仿真图形,制作出实物图。

7、在实物制作过程中,进行电路检查和最后的调试。

二、实训要求:要求:能显示阳历的年、月、日、星期、时、分、秒;能显示阴历的年、月、日;能进行日期、时间的调整。

扩展:能显示当前温度;有闹钟功能(至少2个)选择ds1302时钟芯片,温度传感器采用ds18b20数字温度传感器。

三、实训环境(软件、硬件):软件:keil protues7.5硬件:计算机2单片机的应用四、实训意义:在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。

因此我们需要一个定时系统来提醒这些忙碌的人,而数字化的钟表给人们带来了极大的方便。

由于单片机具有灵活性强、成本低、功耗低、保密性好等特点,所以电子日历时钟一般都以单片机为核心,外加一些外围设备来实现。

电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。

因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。

而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。

所以,电子万年历无论作为竞赛题目还是毕业设计题目都是很有价值。

对于这个实验项目,我们还要有一些其他的基本知识掌握和意义:(1)在学习了《数字电子技术》和《单片机原理及接口技术》课程后,为了加深对理论知识的理解,学习理论知识在实际中的运用,为了培养动手能力和解决实际问题的经验,了解专用时钟芯片ds1302,并会用ds1302芯片开发时钟模块,应用到其他系统中去。

万年历实训报告

万年历实训报告

万年历实训报告目录第一部分:实训目的 (2)第二部分:实训意义 (2)第三部分:实训内容 (3)(一)硬件实训内容 (3)(二)软件实训内容 (3)1.秒、分的VHDL语言及CNT60模块 (3)2.时的VHDL语言及CNT24模块 (4)3.天的VHDL语言及tian模块 (6)4.月的VHDL语言及yue模块 (7)5.年的VHDL语言及nian模块 (9)6.调试的VHDL语言及tiaoshi模块 (10)7.显示的VHDL语言及xianshi模块 (11)8.万年历的原理图 (12)第四部分:实训中疑难解答 (14)第五部分:实训心得 (15)一.实训目的(一)硬件实训目的:1. 熟悉EDA实验箱的基本工作原理。

2. 熟悉并掌握EDA实验箱各个模式的功能。

3. 提高学生的动手能力。

(二)软件实训目的:1.熟悉并掌握Quartus II 6.0软件的使用。

2.熟练的使用原理图输入设计方法,VHDL语言编写程序,进一步了解和掌握各个程序语言,提高编程的熟练程度。

3.掌握年、月、日、时、分、秒程序的原理,进而理解万年历的设计原理。

4.拓宽学生知识面,增强工程意识,培养学生的分析和解决实际问题的能力。

5.提高学生的动手能历。

二.实训意义该数字时钟实现了调时、年、月、日、时、分、秒的显示功能,无需接译码器,可直接接八段共阴极数码管,总体结构如下图所示:第一部分第二部分第三部分D8(l5)D7(l2) D6 D5 (l4) D4(l1) D3 D2(l3)D18个LED数码管为了显示清楚只用了6个数码管,分为3个部分。

采用的是EDA试验箱上的模式7。

软件Quartus II 6.0方面:在显示程序中,k3控制分屏。

当k3=‘1’时,3部分数码管显示年、月、日;当k3=‘0’时,3部分数码管显示时、分、秒。

万年历正常工作时,D1~D8都不亮。

调时时,秒的变化不需控制,故需调时有年、月、日、时、分5个量。

万年历实验报告

万年历实验报告

万年历实验报告基于单片机的课程设计设计题目:电子万年历设计任务与要求:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能方案比较:方案一:系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C52单片机为控制中心,显示模块采用普通的共阴LED 数码管,键输入采用查询法实现功能调整,计时使用AT89C52单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。

方案二:系统分为主控模块、时钟电路模块、按键扫描模块,LCD 显示模块,电源电路、复位电路、晶振电路等模块。

主控模块采用AT89C52单片机,按键模块用三个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

两个方案工作原理大致相同,只有显示模块和时钟电路不同。

LED 数码管价格适中,对于数字显示效果较好,而且使用单片机的端口也较少; LCD1602液晶显示屏,显示功能强大,可以显示大量文字、图形,显示多样性,明晰可见,价格相对LED数码管来说要昂贵些,但是基于本设计显示的东西较多,假设采用LED数码管的话,所需数码管较多,而且不利于控制,因此选择LCD1602作为显示模块。

DS1302是一款高性能的实时时钟芯片,以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到广泛的应用,实时时钟有秒、分、时、星期、日、月和年,月小于31天时可以自动调整,并具有闰年补偿功能,而且在掉电时能够在外部纽扣电池的供电下继续工作。

单片机有定时器的功能,但时间误差较大,且需要编写始终程序,因此采用DS1302作为时钟电路。

基于单片机的课程设计对比以上方案,结合设计技术指标与要求我们选择了方案二进行设计。

逻辑总框图:该电子万年历的总体设计框图如图(1)所示。

设计所需的元件:元件名称型号数量/个1 1单片机 AT89C52 时钟芯片晶振晶振电容电容DS130212MHz 1 32.768kHz130pF 2 22uF 11 32 1按键开关复位开关电阻滑动变阻器220 10K发光二极管红色 1 电池 LCD1.5V 4 LCD16021基于单片机的课程设计电源Vcc 导线+5V 1假设干单元电路设计:1、主控制系统单片机中央处理系统的方案设计,选用AT89C52单片机作为中央处理器,如图(2)所示。

数字钟加万年历实训报告

数字钟加万年历实训报告

数字钟的设计1.设计目的(1)学习AT89C51内部定时/计数器的原理及应用。

(2)了解使用单片机处理复杂逻辑的方法。

(3)掌握多位数码管动态显示的方法。

2.设计任务用AT89C51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1。

开机时显示00-00-00的时间,开始计时:P1.0控制“秒“的调整,每按一次加1秒;P1.1控制“分“的调整,每按一次加1分;P1.2控制”时“的调整,没按一次加1小时。

计时满23-59-59时,返回00-00-00重新计时。

P1.3用做复位键,在计时过程中如果按下复位键,则返回00-00-00重新计时。

(1)基本要求a.用AT89C51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间。

b.当一秒产生时,秒计数加1。

c.开机时,显示00-00-00,并开始连续计时。

计时满23-59-59时,返回00-00-00重新开始计时。

(2)高级要求在以上设计基础上,在单片机的P1.0-P1.3口分别接入4个按键:a.P1.0控制“秒”的调整,每按一次加1秒。

b.P1.1控制“分”的调整,每按一次加1分。

c.P1.2控制“时”的调整,每按一次加1时。

d.P1.3用作复位键,在计时过程中如果按下复位键,则返回00-00-00重新计数。

3.设计原理图4.数字钟程序流程图开始附录(程序)时钟程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code s7_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar display[]={0,0,10,0,0,10,0,0};sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;uint hour;uint min;uint sec;uchar n,k;void delay(){uchar i,j;for(i=2;i>0;i--)for(j=110;j>0;j--);}void delay1(){ uchar q,w;for(q=250;q>0;q--)for(w=250;w>0;w--); }void key(){if(key1==0){ delay1();if(key1==0)sec++;P0=0;if(sec==60)sec=0;}if(key2==0){ delay1();if(key2==0)min++;P0=0;if(min==60)min=0;}if(key3==0){ delay1();if(key3==0)hour++;P0=0;if(hour==24)hour=0;}if(key4==0){ delay1();if(key4==0){hour=0;min=0;sec=0;}}}void main(){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;EA=1;TR0=1;while(1){uchar i;for(i=0;i<8;i++){ display[0]=hour/10;display[1]=hour%10;display[3]=min/10;display[4]=min%10;display[6]=sec/10;display[7]=sec%10;P3=~(0x01<<i);P0=s7_table[display[i]];delay();P0=0;}}}void int0_isr() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;n++;key();if(n==100){n=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}}万年历程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code s7_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;uint yearuint monthuint dayuint hour;uint min;uint sec;uchar s,k;void delay(){uchar i,j;for(i=0;i<20;i++)for(j=0;j<20;j++);}void delay1(){uchar m,n;for(m=0;m<200;m++)for(n=0;n<200;n++);}void key(){if(key1==0){delay1();if(key1==0){hour++;if(hour==24){hour=0;}}}if(key2==0){delay1();if(key2==0){min++;if(min==60){min=0;}}}if(key3==0){delay1();if(key3==0){sec=0;min=0;hour=0;}}}void keyx(){ if(key4==0){delay1();if(key4==0){for(k=0;k<248;k++){P3=0xbf;P0=s7_table[day/10];delay();P3=0x7f;P0=s7_table[day%10];delay();P3=0xef;P0=s7_table[month/10];delay();P3=0xdf;P0=s7_table[month%10];delay();P3=0xfe;P0=s7_table[year/1000];delay();P3=0xfd;P0=s7_table[(year%1000)/100];delay();P3=0xfb;P0=s7_table[(year%100)/10];delay();P3=0xf7;P0=s7_table[year%10];delay();}}}}void main(){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;year=2011;month=6;day=10;while(1){ key();keyx();P3=0xbf;P0=s7_table[sec/10];delay();P3=0x7f;P0=s7_table[sec%10];delay();P3=0xdf;P0=0x40;delay();P3=0xf7;P0=s7_table[min/10];delay();P3=0xef;P0=s7_table[min%10];delay();P3=0xfb;P0=0x40;delay();P3=0xfe;P0=s7_table[hour/10];delay();P3=0xfd;P0=s7_table[hour%10];delay();}}void time() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;s++;if(s==100){s=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;day++;if(((year%4==0&&year%100||year%400==0)&&day>29)&&(month==2))day=1;else if(month==2&&day>28)day=1;else if((month==4||month==6||month==9||month==11)&&day==31)day=1;else if(day==32)day=1;if(day==1){month++;if(month>12){month=0;year++;}}}}}}}。

焊接数字万年历实训报告

焊接数字万年历实训报告

一、实习目的本次焊接数字万年历实训的主要目的是通过实际操作,让学生了解数字万年历的制作过程,掌握焊接的基本技能,提高动手能力和创新意识。

同时,通过实训,培养学生的团队协作精神,增强理论联系实际的能力。

二、实习时间20xx年x月x日~20xx年x月x日三、实习地点XX学院焊接实训室四、实习内容1. 焊接数字万年历的结构设计在实训开始前,我们需要先进行数字万年历的结构设计。

根据要求,数字万年历主要由以下几个部分组成:(1)面板:采用透明塑料板作为面板,用于显示日期、星期等信息。

(2)驱动电路:包括微控制器、步进电机驱动器、电源模块等,用于控制万年历的显示和切换。

(3)显示模块:采用数码管或LCD显示屏,用于显示日期、星期等信息。

(4)电池盒:用于为万年历提供电源。

2. 焊接基本技能训练(1)焊接材料:选用适合的焊接材料,如铜线、焊锡等。

(2)焊接工具:使用电烙铁、焊锡丝、助焊剂、剪刀、剥线钳等工具。

(3)焊接方法:学习并掌握焊接的基本方法,如焊接、焊接、焊接等。

3. 数字万年历焊接实践(1)焊接面板:将面板与驱动电路板焊接在一起,确保连接牢固。

(2)焊接显示模块:将显示模块与驱动电路板焊接在一起,实现数据显示功能。

(3)焊接电池盒:将电池盒与驱动电路板焊接在一起,为万年历提供电源。

(4)调试与测试:检查万年历的显示、切换等功能是否正常,确保焊接质量。

五、实习心得体会1. 焊接数字万年历实训使我深刻认识到焊接技能的重要性。

在实训过程中,我学会了焊接的基本操作,掌握了焊接材料的选择、焊接工具的使用和焊接方法的应用。

2. 实训过程中,我学会了与团队成员沟通协作,共同解决问题。

这使我意识到团队协作在完成复杂任务中的重要性。

3. 通过本次实训,我提高了自己的动手能力和创新意识。

在制作数字万年历的过程中,我不断尝试新的焊接方法,努力提高焊接质量。

4. 实训让我认识到理论知识与实际操作相结合的重要性。

在今后的学习和工作中,我将更加注重理论知识的积累,努力提高自己的实际操作能力。

数字万年历制作实习报告

数字万年历制作实习报告

一、实习背景随着科技的发展,电子产品的普及,人们对生活品质的要求也越来越高。

为了培养自己的动手能力,提高综合素质,我在本次实习中选择了数字万年历的制作。

数字万年历是一种结合了电子技术、编程和艺术设计的产品,它能够显示日期、星期、农历等信息,方便人们的生活和工作。

通过本次实习,我对数字万年历的制作过程有了更加深入的了解,也锻炼了自己的实际操作能力。

二、实习目的1. 学习数字万年历的制作原理,掌握电子元器件的选用和焊接技术。

2. 熟悉编程软件的使用,掌握单片机编程的基本方法。

3. 提高自己的动手能力和团队合作精神。

4. 培养自己的创新意识和解决问题的能力。

三、实习内容1. 硬件部分(1)元器件选型:根据数字万年历的功能需求,选择了以下元器件:STC89C52单片机、LCD显示屏、DS1302时钟芯片、按键模块、电阻、电容、二极管等。

(2)电路设计:根据元器件的特性和功能,设计了数字万年历的电路图。

电路图主要包括单片机、时钟芯片、显示屏、按键模块等部分。

(3)焊接:按照电路图进行元器件的焊接,确保电路连接正确。

2. 软件部分(1)编程环境:使用Keil uVision4软件进行编程。

(2)编程方法:根据数字万年历的功能需求,编写了以下程序:a. 初始化程序:设置单片机的工作模式、时钟频率、端口初始化等。

b. 时钟程序:读取DS1302时钟芯片的时间信息,显示在LCD显示屏上。

c. 显示程序:根据日期、星期、农历等信息,在LCD显示屏上显示相应的信息。

d. 按键扫描程序:扫描按键状态,实现日期、星期、农历等信息的切换。

3. 系统调试(1)硬件调试:检查电路连接是否正确,元器件是否损坏。

(2)软件调试:在Keil uVision4软件中编译程序,下载到单片机中,观察LCD显示屏的显示效果。

四、实习成果通过本次实习,我成功制作了一款数字万年历。

该万年历能够显示日期、星期、农历等信息,具有以下特点:1. 操作简便:用户可以通过按键切换日期、星期、农历等信息。

数字万年历实训报告总结

数字万年历实训报告总结

一、实训背景随着科技的飞速发展,电子产品的普及,人们对信息获取和展示的需求日益增长。

数字万年历作为一种实用性强的电子设备,其设计制作在当今社会具有重要意义。

为了提高自身动手能力、设计能力和创新思维,我参加了本次数字万年历实训课程。

二、实训目的1. 熟悉数字万年历的设计原理和制作流程;2. 掌握电子元器件的选择和电路设计;3. 提高编程能力和嵌入式系统应用能力;4. 培养团队合作精神和创新能力。

三、实训内容1. 硬件设计:根据数字万年历的功能需求,选择合适的电子元器件,如单片机、显示屏、按键等,并设计相应的电路图。

2. 软件设计:编写单片机程序,实现万年历的功能,包括日期显示、星期显示、闰年判断、节假日提醒等。

3. 系统集成:将硬件和软件进行集成,调试并测试系统功能。

4. 优化与改进:针对实际运行中存在的问题,对系统进行优化和改进。

四、实训过程1. 硬件设计阶段:在老师的指导下,我了解了数字万年历的基本硬件结构,并学会了如何选择合适的电子元器件。

根据功能需求,我选择了AT89C52单片机作为核心控制单元,并选择了1602液晶显示屏和按键作为输入输出设备。

通过查阅相关资料,我完成了电路图的设计。

2. 软件设计阶段:我学习了C语言编程,并掌握了单片机程序设计的基本方法。

在编写程序时,我实现了以下功能:(1)初始化:设置单片机的工作状态,初始化LCD显示和按键扫描。

(2)日期显示:读取实时日期,并在LCD上显示年、月、日。

(3)星期显示:根据日期计算出星期,并在LCD上显示。

(4)闰年判断:根据年份判断是否为闰年。

(5)节假日提醒:根据预设的节假日信息,在LCD上显示提醒信息。

3. 系统集成阶段:将硬件和软件进行集成,调试并测试系统功能。

在调试过程中,我发现了以下问题:(1)按键响应不及时:经过检查,发现按键扫描程序存在bug,导致按键响应不及时。

经过修改程序,问题得到解决。

(2)LCD显示不清晰:发现LCD显示模块的背光亮度不足,导致显示不清晰。

数字万年历焊接实训报告

数字万年历焊接实训报告

一、实训目的本次实训旨在使学生了解数字万年历的基本结构和工作原理,掌握焊接的基本技能,提高动手操作能力。

通过实训,培养学生严谨的工作态度和良好的团队协作精神,为今后从事相关行业打下坚实的基础。

二、实训内容1. 数字万年历概述数字万年历是一种集时间显示、日期显示、星期显示、农历显示等功能于一体的电子设备。

它主要由以下几部分组成:显示屏、控制器、存储器、电源电路、时钟电路等。

2. 焊接实训(1)焊接工具和材料焊接实训中,我们使用了以下工具和材料:工具:电烙铁、焊锡、助焊剂、剪线钳、斜口钳、镊子等。

材料:数字万年历主板、焊点、导线、电阻、电容、二极管、三极管等。

(2)焊接操作步骤1) 清洁焊接表面:在焊接前,用无水酒精清洁焊接表面,确保焊接质量。

2) 加热焊点:将电烙铁加热至适当温度,使焊锡熔化。

3) 涂助焊剂:在焊接表面涂上适量的助焊剂,提高焊接质量。

4) 焊接:将焊锡滴在焊接点上,同时用焊锡丝接触焊点,使焊锡均匀分布。

5) 冷却:焊接完成后,待焊锡冷却凝固。

6) 检查:检查焊接点是否牢固,焊锡是否饱满。

(3)焊接注意事项1) 焊接时,电烙铁温度不宜过高,以免损坏元器件。

2) 焊接过程中,注意防止焊锡滴落,以免造成短路。

3) 焊接完成后,检查焊接点是否牢固,焊锡是否饱满。

4) 避免焊接过程中用手触摸焊接点,以免造成短路。

3. 数字万年历组装(1)组装步骤1) 将显示屏、控制器、存储器、电源电路、时钟电路等元器件按照电路图连接。

2) 将导线连接到相应的焊点。

3) 将组装好的电路板安装到万年历外壳。

4) 将电池装入万年历外壳。

(2)组装注意事项1) 组装过程中,注意不要损坏元器件。

2) 组装完成后,检查电路是否连接正确。

3) 检查万年历是否正常工作。

三、实训总结1. 通过本次实训,我们了解了数字万年历的基本结构和工作原理,掌握了焊接的基本技能。

2. 实训过程中,我们学会了如何正确使用焊接工具和材料,提高了动手操作能力。

电子万年历组装实习报告

电子万年历组装实习报告

一、实习背景随着科技的不断发展,电子产品的应用越来越广泛。

电子万年历作为一种集实用性与科技性于一体的电子产品,已成为现代生活中不可或缺的一部分。

为了提高自己的实践能力和动手操作能力,我参加了电子万年历组装实习,通过实际操作,了解电子万年历的组装过程,掌握相关电子元器件的使用方法。

二、实习目的1. 了解电子万年历的结构和工作原理;2. 熟悉电子元器件的使用方法;3. 提高动手操作能力和团队合作精神;4. 培养创新意识和实践能力。

三、实习内容1. 电子万年历的结构和工作原理电子万年历主要由以下几个部分组成:显示屏、单片机、存储器、时钟电路、温度传感器、按键电路等。

其工作原理如下:(1)时钟电路负责产生定时信号,驱动单片机工作;(2)单片机根据定时信号,从存储器中读取日期、星期等信息,并显示在显示屏上;(3)温度传感器实时检测环境温度,并将温度信息传递给单片机;(4)按键电路用于用户操作,如设置日期、星期、温度等。

2. 电子元器件的使用方法(1)显示屏:根据电路图,将显示屏的引脚与单片机的相关引脚连接,并确保连接正确;(2)单片机:将单片机的引脚与电路板上的相关元件连接,如时钟电路、存储器等;(3)存储器:将存储器的引脚与单片机的相关引脚连接,并确保连接正确;(4)时钟电路:根据电路图,将时钟电路的元件与单片机的相关引脚连接;(5)温度传感器:将温度传感器的引脚与单片机的相关引脚连接,并确保连接正确;(6)按键电路:将按键电路的元件与单片机的相关引脚连接,并确保连接正确。

3. 组装步骤(1)准备所需工具和材料,如电烙铁、焊锡、镊子、剪刀等;(2)根据电路图,将元器件插入电路板;(3)使用电烙铁焊接元器件的引脚,确保焊接牢固;(4)检查电路板上的元件是否安装正确,并连接好电源;(5)测试电路板的功能,如显示日期、星期、温度等;(6)调试电路板,确保功能正常。

四、实习心得1. 通过本次实习,我对电子万年历的结构和工作原理有了更深入的了解,掌握了电子元器件的使用方法;2. 在组装过程中,我学会了如何使用电烙铁、镊子等工具,提高了自己的动手操作能力;3. 在团队协作中,我学会了与他人沟通、交流,共同解决问题,培养了团队合作精神;4. 通过本次实习,我认识到理论知识与实践操作相结合的重要性,为今后的学习和工作打下了基础。

电子万年历制作实习报告

电子万年历制作实习报告

实习报告:电子万年历制作实习时间:2023年2月24日至2023年3月10日实习单位:XX科技有限公司实习内容:电子万年历制作一、实习目的本次实习的主要目的是通过制作电子万年历,使我能够更好地理解和掌握电子技术的基本知识和技能,提高我的实际操作能力和创新能力。

二、实习内容1. 学习电子万年历的基本原理和工作原理。

2. 学习电子万年历的主要组成部分,包括单片机、时钟芯片、液晶显示屏等。

3. 学习如何使用相关工具和设备进行电子万年历的制作。

4. 完成电子万年历的制作,并进行测试和调试。

三、实习过程1. 学习阶段:在这个阶段,我通过阅读相关资料和向工程师请教,了解了电子万年历的基本原理和工作原理,以及其主要组成部分。

2. 制作阶段:根据所学知识,我开始进行电子万年历的制作。

首先,我进行了电路的设计,然后进行了PCB板的焊接,最后进行了电路的调试。

3. 测试阶段:制作完成后,我对电子万年历进行了测试。

测试内容包括日期的显示、时间的显示、星期的一周循环、闹钟功能等。

四、实习收获通过这次实习,我不仅学到了关于电子万年历的相关知识,还提高了我的实际操作能力和创新能力。

在制作过程中,我学会了如何使用相关工具和设备,掌握了电子万年历的制作技巧。

在测试过程中,我学会了如何对电子万年历进行调试和故障排除。

此外,我还学会了如何与团队成员合作,共同完成任务。

在制作过程中,我与团队成员积极沟通,共同解决问题,取得了良好的团队合作效果。

五、实习反思虽然我完成了电子万年历的制作,但在制作过程中还存在一些问题。

首先,我的电路设计能力还有待提高,有时会出现一些不必要的错误。

其次,我的焊接技术还不够熟练,有时会出现焊接不良的情况。

最后,我在调试过程中有时会忽略一些细节,导致调试效果不理想。

为了提高我的电子技术能力,我决定加强学习和实践。

一方面,我将深入学习电子技术的相关知识,提高我的理论水平。

另一方面,我将多参加实践项目,提高我的实际操作能力。

万年历报告

万年历报告

万年历任务目的通过万年历的设计与制作,让我们进一步加强单片机与LED数码管的接口设计、定时/计数器及中断技术的综合应用能力,同时,我们也进一步学习单片机与键盘的接口技术。

更加全面掌握定时、中断、调秒、调分、调时等的运用。

一、设计要求用单片机设计一个万年历,可控制八个数码管既实现时钟功能,又可以实现万年历功能的这么多功能的设计。

另外,利用了7个独立式按键实现调秒、调分、调时、调日等功能。

具体要求:根据提供的单片机键盘接口模块电路,LED数码管的接口电路,加上必要的外部电路,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。

二、系统硬件电路设计此次的万年历系统硬件电路可分为最小系统、独立按键调时、分、秒等电路、LED数码管显示等几个单元电路。

下面分别为各部分的电路图及其工作原理:对于我们此次用的AT89C51单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路.。

其中复位电路用于将单片机内部各电路的状态恢复到初始值。

时钟电路为单片机工作提供基本时钟,因为单片机内部大量的时序电路构成,都是需要时钟脉冲才能正常工作。

此次设计的万年历运用了7个独立式按键分别接在单片机的P2口上,在设计程序上主要是起到调时、调分、调秒、调年、调月、调日的功能。

此次设计的电路中采用P1口控制八个数码管的8个段选控制端,用P0口控制八个LED数码管的位选端,是一个LED动态显示电路。

四、软件设计万年历编程主要分为3个部分:一个是动态显示编程,一个是运用定时器计时,另一个是按键较时等编程。

其中动态显示编程主要通过P1口控制八个数码管的8个段选控制端,用P0口控制八个LED数码管的位选端。

不断循环扫描显示。

定时器计时编程主要是采用定时器0中断方式进行编程,,也其中对万年历的大小月,平闰年等进行了判断。

另外按键较时等编程主要也是采用延时方法防止按键抖动的编程。

万年历实训报告

万年历实训报告

《EDA技术及其应用》实训报告班级_________________姓名XX ____________________________学号XX ________________________________ 指导教师XX __________________________________2012 年05月21 日XXXX 学院10 级机械电子工程系目录题义求点材 (4)1. 7 实验设计思想................ . (4)1. 8 各模块的设计程序和元件介绍5感想.............................................. ....、八、•前言随着电子技术的不断发展与进步,电子系统的设计方法发生了很大的变化,基于EDA技术的设计方法正成为电子系统设计的主流,EDA技术已成为许多高职高专院校电类专业学生必须掌握的一门重要技术。

此次基于EDA技术的万年历实训,加强了同学们对EDA工具Quartusll 的使用方法、VHDL语言知识、FPGA开发技术的深入理解,通过万年历的功能实现和功能测试,详细介绍Quartusll 的完整设计流程,在此基础上,进一步介绍面向复杂模块的使用方法。

其中包括年、月、日、时、分、秒以及调整、控制等各个模块的功能实现和仿真测试,进一揭示VHDL语言在语句应用和电路功能描述上的特点及其特殊用法,使我们在很短的时间内快速掌握了EDA这门重要技术。

实验的课题:万年历实验的目的及意义:(1)掌握EDA技术及FPGA技术的开发流程。

(2)掌握系统设计的方法和层次化设计的方法。

(3)掌握Quartusll 软件的使用方法。

(4)掌握VHDI语言的程序设计、编写、编译和错误修改。

(5)掌握熟悉EDA实验箱的各个模块(6)掌握EDA式验箱与pc机的连接、下载和引脚绑定的全过程和方法,实现功能仿真。

实验的内容及要求:(1)实现年、月、日、时、分、秒的显示并具有闰年判断计数的功能(2)在试验箱上通过按键实现年月日和时分秒的显示切换。

万年历产品制作实习报告

万年历产品制作实习报告

实习报告:万年历产品制作实习一、实习背景与目的作为一名热衷于计算机编程和软件开发的学生,我一直希望能够在实践中提升自己的专业技能。

在这个暑假,我终于有机会参加了一次万年历产品制作的实习项目。

这次实习旨在让我深入了解万年历产品的制作流程,掌握软件开发的基本技巧,并提高自己的团队协作能力。

二、实习内容与过程实习的第一阶段是需求分析。

在导师的指导下,我们通过调查问卷、用户访谈等方式收集了用户对于万年历产品的需求。

我们发现,用户希望能够有一个简洁易用、功能丰富的万年历,可以方便地查看日期、添加事件、提醒等功能。

实习的第二阶段是产品设计。

根据需求分析的结果,我们设计出了产品的原型界面,并明确了各个功能模块的具体实现方式。

在这个过程中,我学会了使用 Axure 等原型设计工具,提高了自己的界面设计能力。

实习的第三阶段是编码实现。

我们采用了 Python 和 Django 框架来开发万年历产品。

我负责实现了事件添加、提醒等功能,并使用 JavaScript 和 CSS 进行了前端页面的优化。

在编码过程中,我遇到了很多技术难题,但在团队成员和导师的帮助下,我不断学习解决问题,最终成功完成了自己的任务。

实习的第四阶段是测试与优化。

我们对产品进行了功能测试和性能测试,发现并修复了一些 bug。

同时,根据用户的反馈意见,我们对产品进行了界面优化和功能调整。

三、实习收获与反思通过这次实习,我不仅掌握了万年历产品的制作流程,还提高了自己的编程能力和团队协作能力。

同时,我也认识到了自己在沟通能力和时间管理方面的不足,需要在今后的工作中加以改进。

这次实习让我深刻体会到,一个优秀的软件产品需要经过严谨的需求分析、产品设计、编码实现和测试优化等环节。

在团队协作中,沟通能力和时间管理能力同样重要。

只有具备这些能力,才能更好地完成软件开发任务。

四、实习总结回顾这次万年历产品制作的实习,我收获颇丰。

在实习过程中,我不仅提升了自己的专业技能,还锻炼了自己的团队协作和沟通能力。

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

河南机电高等专科学校综合实训报告系部:专业:班级:学生姓名:学号:2013年 6月 28日实训任务书1.时间:2013年6月15日~2013年6月28日2. 实训单位:河南机电高等专科学校3. 实训目的:深入学习电子产品设计制作的全过程4. 实训任务:①加深学习电路图绘制软件的相关常识及其特点;②以51单片机为核心设计出一个LED万年历;③万年历具有年份、月、日、时、分、秒、周、温度、整点报时等功能;④自己独立完成设计电路图,生成PCB,转印、腐蚀电路板,焊接等硬件制作工作;⑤会使用keil软件编写程序,并完成烧写过程;⑥学会调试程序,敢于发现问题,解决问题;⑦参考相关的的书籍、资料,认真完成实训报告。

综合实训报告前言:万年历是我们经常见到和使用的计时工具,使用方便,功能多。

但自己做一个让人满意的万年历,就不一定有那么轻而易举了,本次实训的任务就是自己亲手做一个万年历。

利用本学期学过的单片机知识,设计出具有显示年、月、日、时、分、秒、周、温度功能,同时有整点报时的功能的万年历。

一、实训器件1.温度传感器DS18B20采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以避免A/D模数转换模块,降低硬件成本,简化系统电路。

另外,数字式温度传感器还具有测量精度高、测量范围广等优点。

因此,本设计DS18B20温度传感器作为温度采集模块。

2.时钟芯片DS1302采用DS1302时钟芯片实现时钟,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

具有主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。

采用普通32.768kHz晶振。

因此,本设计中采用DS1302提供时钟。

3.74LS15474LS154 为 4 线-16 线译码器,其主要电特性的典型值如下:当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。

若将G1和G2中的一个作为数据输入端,由ABCD对输出寻址,54/74154 还可作4线-16线数据分配器。

引出端符号: A、B、C、D 译码地址输入端(低电平有效)G1、G2 选通端(低电平有效)0-15 输出端(低电平有效)可用此种芯片作为数码管的选址芯片。

4.74HC57374HC573是八进制3态非反转透明锁存器,是高性能硅门CMOS器件。

当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

输出能直接接到CMOS,NMOS和 TTL接口上操作电压范围:2.0V~6.0V×低输入电流: 1.0uA 。

本实训采用此芯片作为数码管的驱动芯片。

5.数码管本实训使用共阴极数码管作为显示器件,采用 LED 数码管动态扫描,LED 数码管价格适中,对于显示数字也最合适。

综上各模块的选择方案与论证,确定最后的主要硬件资源如下:采用AT89S51作为主控制系统;DS1302提供时钟;DS18B20作为数字式温度传感器;74LS154作为选址芯片;74HC573作为数码管的驱动芯片;共阴极数码管显示数字;S8550驱动扬声器。

二、实训原理为了使万年历在包装美化时简单化及布线的方便,我将万年历分为两部分,一部分是主体部分含有年份、月、日、时、分、秒,另一部分是小模块包含周、温度。

电路图如下:主电路图:主电路PCB:周,温度电路图:周,温度PCB:三、程序编写使用Keil软件编写程序。

程序包括主函数、时间显示函数、温度显示函数、时间调整函数、DS18B20模块、DS1302模块和周计算函数等。

程序的编写使我熟练的掌握了Keil软件的应用。

具体程序见附录。

四、程序的烧写与调试程序烧写需要用专用的烧写软件将Keil软件声生成的.hex文件写进单片机里。

经过多次的程序的改写与调试,最终制作出比较满意的成品。

五、成品展示:心得体会:经过此次实训我学到了很多,刚开始以为做万年历很难,着手开始做这个产品没有一点头绪,经过上网查资料,产生了最初的制作框架,然后就开始找芯片,查芯片资料,设计电路图,又请同学帮忙指点,修改原理图。

接着买元器件,做封装,生成PCB,制作电路板,焊接元器件,最后完成了整个硬件部分的制作。

完成了硬件制作后,我又编了测试软件测试硬件是否有问题,发现数码管不亮,经过问题排查及资料查询,发现单片机P0口缺少了上拉电阻,接上后,解决了问题。

编程也是比较困难的,由于掌握的知识不够多,借鉴了别人的程序,并加入自己的想法,经过调试,程序编写成功。

最终完成了产品的制作。

在实习的过程中我得到了别人的帮助,同时也主动帮助别人,得到了很多经验,为以后学习提供了方便。

实习就是学习的过程,本次实习是最成功的一次,也是学到最多的一次。

参考文献:《单片机C51程序设计教程与实验》北京航空航天大学出版社《单片机原理及应用(C51语言)》清华大学出版社《数字电子技术》黄河水利出版社《Protel DXP 2004电路设计与仿真教程》北京航空航天大学出版社附录:程序万年历.c#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code digit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x00}; uchar mode,TH,TL,TN,seconds,minutes,hours,years,months,days,WEEK,n;uchar count=0;sbit SET=P3^4;sbit ADD=P3^5; //增加sbit RED=P3^6; //减小sbit CANL=P3^7;sbit le=P2^6;sbit oe=P2^7;sbit en=P1^4;sbit beep=P2^4;uchar GetWeekFromDay(uchar years,uchar months,uchar days);void WriteSet1302(uchar cmd,uchar date);uchar ReadSet1302(uchar cmd);void ReadyreadDS18B20(void);uchar ReadDS18B20(void);void IntDS1302(void);void delay1ms( uint x){uchar i,j;for(i=x;i>0;i--)for(j=124;j>0;j--);}void delaynus(uchar n) //延时若干微秒{while(n--);}void display_Year(year) //显示年{uchar i,j;i=year/10;j=year%10;P0=digit[2];P1=8;delay1ms(2);P0=digit[0];P1=9;delay1ms(2);P0=digit[i];P1=10;delay1ms(2);P0=digit[j];P1=11;delay1ms(1);}void display_Month(month) //显示月{uchar i,j;i=month/10;j=month%10;P0=digit[i];P1=6;delay1ms(2);P0=digit[j];P1=7;delay1ms(1);}void display_Day(day) //显示日{uchar i,j;i=day/10;j=day%10;P0=digit[i];P1=4;delay1ms(2);P0=digit[j];P1=5;delay1ms(1);}void display_Hour(hour) //显示时{uchar i,j;i=hour/10;j=hour%10;P0=digit[i];P1=2;delay1ms(2);P0=digit[j]+n*0x80;P1=3;delay1ms(1);}void display_Minute(minute) //显示分{uchar i,j;i=minute/10;j=minute%10;P0=digit[i];P1=0;delay1ms(2);P0=digit[j];P1=1;delay1ms(1);}void display_Week(void) //显示周{WEEK=GetWeekFromDay(years,months,days); P1=12;switch(WEEK){case 1:P0=digit[1];delay1ms(2);break;case 2:P0=digit[2] ;delay1ms(2);break;case 3:P0=digit[3];delay1ms(2);break;case 4:P0=digit[4];delay1ms(2);break;case 5:P0=digit[5];delay1ms(2);break;case 6:P0=digit[6];delay1ms(2);break;case 7:P0=digit[8];delay1ms(2);break;}}void display_Time(void) //显示实时时间{uchar value;value=ReadSet1302(0x83);minutes=(((value&0x70)>>4)*10+(value&0x0f));display_Minute(minutes);value=ReadSet1302(0x85);hours=(((value&0x70)>>4)*10+(value&0x0f));display_Hour(hours);value=ReadSet1302(0x87);days=(((value&0x70)>>4)*10+(value&0x0f));display_Day(days);value=ReadSet1302(0x89);months=(((value&0x70)>>4)*10+(value&0x0f));display_Month(months);value=ReadSet1302(0x8D);years=(((value&0xf0)>>4)*10+(value&0x0f));display_Year(years);display_Week();}/*****************时间调整部分*********************/void hourset(void) //调时{uchar timevalue,hour;delay1ms(500); //防止多次触发WriteSet1302(0x8e,0x00);//将写保护去掉,确保能正常将调整后的数值写入DS1302timevalue=ReadSet1302(0x85); //读取此时的数值hour=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));while(1){if(ADD==0){delay1ms(20);if(ADD==0){hour++;delay1ms(100);while(ADD==0);}}if(RED==0){delay1ms(20);if(RED==0){hour--;delay1ms(100);if(hour==0) hour=23;while(RED==0);}}if(hour>=24) hour=0;timevalue=(((hour)/10)<<4|(hour%10));WriteSet1302(0x84,timevalue);delay1ms(2);display_Hour(hour);delay1ms(10);if(CANL==0){mode=0;break;}if(SET==0) break;}WriteSet1302(0x8e,0x80);}void minuteset(void) //调分{uchar timevalue,minute;delay1ms(500);WriteSet1302(0x8e,0x00);timevalue=ReadSet1302(0x83);minute=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));while(1){if(ADD==0){delay1ms(20);if(ADD==0){minute++;if(minute>=60) timevalue=0;while(ADD==0);}}if(RED==0){delay1ms(10);if(RED==0){minute--;if(minute==0) minute=59;delay1ms(300);while(RED==0);}}if(minute>=60) minute=0;timevalue=((minute/10)<<4|(minute%10));WriteSet1302(0x82,timevalue);delay1ms(2);display_Minute(minute);delay1ms(10);if(CANL==0){mode=0;break;}if(SET==0) break;}WriteSet1302(0x8e,0x80);}void yearset(void) //调年{uchar datevalue,year;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x8d);year=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){if(ADD==0){delay1ms(20);if(ADD==0){year++;while(ADD==0);}}if(RED==0){delay1ms(20);if(RED==0){year--;delay1ms(100);while(RED==0);}}datevalue=((year/10)<<4|(year%10));WriteSet1302(0x8c,datevalue);delay1ms(5);display_Year(year);delay1ms(5);if(CANL==0){mode=0;break;}if(SET==0) break;}WriteSet1302(0x8e,0x80);}void monthset(void) //调月{uchar datevalue,month;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x89);month=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){if(ADD==0){delay1ms(20);if(ADD==0){month++;if(month>12) month=1;while(ADD==0);}}if(RED==0){delay1ms(20);if(RED==0){month--;delay1ms(100);if(month==0) month=12;while(RED==0);}}datevalue=((month/10)<<4|(month%10));WriteSet1302(0x88,datevalue);delay1ms(5);display_Month(month);delay1ms(5);if(CANL==0){mode=0;break;}if(SET==0) break;}WriteSet1302(0x8e,0x80);}void dayset(void) //调日{uchar datevalue,day;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x87);day=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));while(1){if(ADD==0){delay1ms(10);if(ADD==0){day++;if(day>31) day=1;while(ADD==0);}}if(RED==0){delay1ms(10);if(RED==0){if(day==0) day=31;day--;delay1ms(300);while(RED==0);}}datevalue=((day/10)<<4|(day%10));WriteSet1302(0x86,datevalue);delay1ms(5);display_Day(day);delay1ms(5);if(CANL==0){mode=0;break;}if(SET==0) break;}WriteSet1302(0x8e,0x80);}void TimeSet(void) //时间调整函数{if(SET==0){delay1ms(20);if(SET==0){ while (!SET) ;mode++;delay1ms(20);switch(mode){case 1:{yearset();delay1ms(20);} break;case 2:{monthset();delay1ms(20);} break;case 3:{dayset();delay1ms(20 );} break;case 4:{hourset(); delay1ms(20);} break;case 5:{minuteset();delay1ms(20);} break;}if(mode==5) mode=0;}}}/***************显示温度模块********************/uchar flag;/*********************显示温度整数部分*************************/ void Display_Integer(unsigned char x){uchar s,g;s=x%100/10;g=x%10;P0=digit[s];P1=13;delay1ms(3);P0=digit[g]+0x80;P1=14;delay1ms(3) ;P0=digit[10];P1=15;delay1ms(1);}void display_Temperature(void){ReadyreadDS18B20();TL=ReadDS18B20();TH=ReadDS18B20();if((TH&0XF8)!=0X00){flag=1;TL=~TL;TH=~TH;TL+=1;if(TL>255) TH+=1;TN=TH*16+TL/16;}TN=TH*16+TL/16;Display_Integer(TN);}/**************** 设置模块******************/void Set(void){if(SET==0){delay1ms(5);if(SET==0){delay1ms(50);while(1){TimeSet();if(CANL==0){break;}}}}}void InitTimer0(void){TMOD = 0x01;TH0 = 0x3C;TL0 = 0x0B0;EA = 1;ET0 = 1;TR0 = 1;}/***************主函数**********************/void main(){int i;P0=0;InitTimer0();IntDS1302(); //初始化DS1302delay1ms(5);le=1;oe=0;en=0;delay1ms(200);beep=1;while(1){for (i=1000;i>0;i--){Set( );display_Time( );Display_Integer(TN);if(hours==7||hours==8||hours==9||hours==10||hours==11||hours==12||hours==14||hours==15||hours==16||hours==17||hours==18||hours==19||hours==20||hours==21||hours==22){if(minutes==0x00){uchar value,w,k;value=ReadSet1302(0x81);seconds=(((value&0x70)>>4)*10+(value&0x0f));if(seconds>0&&seconds<2){for(k=5;k>=0;k--){for(w=100;w>0;w--){beep=0;delay1ms(3);beep=1;delay1ms(3);}delay1ms(1000);}}else beep=1;}}}display_Temperature();}}void t0() interrupt 1{TH0 = 0x3C;TL0 = 0x0B0;count++;if(count==10){n=0;}if(count==20){ count=0;n=1;}}/*******DS1302模块*************/sbit SCLK=P2^0; //DS1302时钟输入sbit DATE=P2^1; //DS1302数据输入sbit REST=P2^2; //DS1302复位端口void Write1302(uchar date)//向1302写数据{uchar i;SCLK=0;delaynus(2);for(i=0;i<8;i++){DATE=date&0x01;SCLK=1;delaynus(2);SCLK=0;delaynus(2);date>>=1;}}void WriteSet1302(uchar cmd,uchar date) //根据相应的命令输入相应的数据{REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(5);Write1302(date);SCLK=1;REST=0;}uchar Read1302(void) //读取1302数据{uchar i,date;delaynus(2);for(i=0;i<8;i++){date>>=1;if(DATE==1)date|=0x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);}return date;}uchar ReadSet1302(uchar cmd)//根据命令读取1302相应的值{uchar date;REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1;REST=0;return date;}void IntDS1302(void) //DS1302初始化{uchar flag;flag= ReadSet1302(0x81);if(flag&0x80) //判断时钟芯片是否关闭{WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,((0/10)<<4|(0%10))); //根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,((0/10)<<4|(0%10))); //根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((0/10)<<4|(0%10))); //根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,((0/10)<<4|(0%10))); //根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((10/10)<<4|(10%10))); //根据写年寄存器命令字,写入年的初始值WriteSet1302(0x90,0xa5); //打开充电功能选择2K电阻充电方式WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令}}/**********************操作DS18B20模块***************************/sbit DQ=P2^3;uchar time;void delayms(uchar x){ uchar i,j;for(i=x;i>0;i--)for(j=124;j>0;j--);}/**********************DS18B20初始化****************************/bit IntDS18B20(void){bit temp;DQ=1;for(time=0;time<2;time++);DQ=0;for(time=0;time<200;time++);DQ=1;for(time=0;time<10;time++);temp=DQ;for(time=0;time<200;time++);return temp;}/**************************读DS18B20**********************/uchar ReadDS18B20(void){uchar dat,i;for(i=0;i<8;i++){DQ=1;_nop_();DQ=0;_nop_();DQ=1;for(time=0;time<2;time++);dat>>=1;if(DQ==1)dat=dat|0x80;elsedat=dat|0x00;for(time=0;time<10;time++);}return dat;}/*********************向DS18B20写数据**************************/ void WriteDS18B20(uchar date){uchar i;for(i=0;i<8;i++){DQ=1;_nop_();DQ=0;DQ=date&0x01;for(time=0;time<10;time++);DQ=1;for(time=0;time<1;time++);date>>=1;}for(time=0;time<4;time++);}/*******************为读取温度做好准备************************/void ReadyreadDS18B20(void){IntDS18B20();WriteDS18B20(0XCC);WriteDS18B20(0X44);IntDS18B20();WriteDS18B20(0XCC);WriteDS18B20(0XBE);}// 计算2000~2099年任一天星期几// year : 00-99// month: 01-12// day : 01-31uchar GetWeekFromDay(uchar years,uchar months,uchar days){if( months == 1 || months == 2 ){months+=12;if( years> 0 )years--;elseyears ;}return (1+(( days + 2*months + 3*(months+1)/5 + years + years/4 ) %7)); // 返回星期几//(星期一用1表示,而星期天用7表示)}。

相关文档
最新文档