EDA万年历实训报告

合集下载

电子万年历组装实训报告

电子万年历组装实训报告

一、实训目的本次实训旨在通过实际操作,让学生掌握电子万年历的组装流程,熟悉电子元器件的识别与使用,了解电路原理图的阅读与理解,以及电子产品的调试与故障排除。

通过本次实训,提高学生的动手能力、实践能力和团队协作精神,为后续相关课程的学习打下坚实基础。

二、实训内容1. 实训时间:2023年X月X日至2023年X月X日2. 实训地点:XX职业学院电子实验室3. 指导老师:XXX老师4. 实训目的:(1)掌握电子万年历的组装流程。

(2)熟悉电子元器件的识别与使用。

(3)了解电路原理图的阅读与理解。

(4)学会电子产品的调试与故障排除。

(5)培养团队协作精神。

5. 实训内容:(1)电子万年历的组装1)准备所需材料:STC89C52RC单片机、DS1302时钟芯片、LCD1602液晶显示屏、电阻、电容、晶体振荡器、按键、电源模块等。

2)根据电路原理图,连接各个电子元器件,确保连接正确。

3)调试电路,检查电路是否正常工作。

(2)电子万年历的程序编写1)了解STC89C52RC单片机的编程环境,如Keil uVision。

2)学习C语言编程,编写电子万年历的程序。

3)将程序烧录到单片机中,调试程序,确保程序正常运行。

(3)电子万年历的调试与故障排除1)观察电子万年历的显示效果,确保显示日期、星期、时间等无误。

2)检查电路连接是否牢固,排除虚焊、短路等故障。

3)优化程序,提高电子万年历的稳定性和可靠性。

三、实训过程1. 组装电子万年历(1)按照电路原理图,将各个电子元器件连接到单片机上。

(2)检查电路连接是否正确,确保没有短路、虚焊等故障。

(3)通电测试电路,确认电路正常工作。

2. 编写程序(1)学习C语言编程,了解电子万年历的程序结构。

(2)编写程序,实现日期、星期、时间的显示。

(3)调试程序,确保程序正常运行。

3. 调试与故障排除(1)观察电子万年历的显示效果,确保显示日期、星期、时间等无误。

(2)检查电路连接是否牢固,排除虚焊、短路等故障。

EDA技术及应用实训报告

EDA技术及应用实训报告

桂林电子科技大学信息科技学院《EDA技术及应用》实训报告学号1252100301姓名指导教师:覃琴2014年4 月29 日实训题目:数字日历电路1 系统设计1.1 设计要求1.1.1 设计任务(1)用Verilog HDL语言设计出能够在EDA实训仪的I/O设备和PLD芯片实现的数字日历。

(2)数字日历能够显示年、月、日、时、分和秒。

(3)用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20140101),然后在另一时间段内显示时、分、秒(如010101099),两个时间段能自动倒换。

(4)数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时。

(5)体现创新部分1.1.2 性能指标要求1)数字电路能够在一定的时间内显示切换的功能,并且能手动校准年月日和时分秒2)具有复位和进位的功能3)能起到提示的作用,如闹钟或亮彩灯等。

1.2 设计思路及设计框图1.2.1设计思路如图1.2.2所示1) EDA实训箱上的功能有限,可以用到的有8支数码管和12个lED灯。

年、月、日和时、分、秒可以通过数码管显示,年月日和时分秒的切换可以通过拨动开关控制,校正可以通过按键实现。

2)输入的秒脉冲由DEA实训仪上的20MHZ晶振经过分频得到,秒脉冲经过60分频后产生1分钟脉冲信号,在经过60分频后产生1小时的脉冲信号,最后进行24分频,得到1天的脉冲送24进制的 cout输出。

在将两个60分频和一个24分频的输出送到送到数码管的译码器输入端,得到24小时的计时显示结果。

由此得到数字日历的计时器模块。

1.2.2设计框图cout cout秒脉冲图1.2.2数字钟的原理框图2 各个模块程序的设计2.1图1 1HZ秒脉冲的分频模块元件符号2.1输入的秒脉冲由EDA实训仪上的20MHZ晶振经过分频得到,设计一个输出频率为1HZ的秒脉冲。

万年历实验报告

万年历实验报告

篇一:电子万年历实验报告重庆电力高等专科学校计算机科学系实训报告课程名称实验名称班级信息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、查询某一年的日历。

要求从键盘输入年份,输出该年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得到的余数即为答案。

EDA实训万年历

EDA实训万年历

《EDA技术与应用》实训报告学号姓名指导教师:实训题目:数字日历1.系统设计1.1 设计要求1.1.1 设计任务:设计一个数字日历电路1.1.2 技术要求:⑴用Verilog HDL语言设计一个数字日历。

⑵数字日历能正确显示年、月、日、时、分和秒。

⑶通过开关分别控制对年、月、日或时、分、秒校对及自动切换、,并且运用按钮对年、月、日或时、分、秒校对。

⑷通过按钮对数码管全部清零。

⑸拓展功能:添加时钟闹钟功能,并通过LED管显示。

1.2 方案比较:由于这次实验用到的仪器是EDA实训仪,数码管个数只有八个,因此不能同时显示年、月、日、时、分、秒。

但是实训仪的LED管只有12个,因此在拓展功能时12小时做一个周期的整点记时显示。

在多次的测试和修改后,得到此最好方案。

1.3 方案论证1.3.1 总体思路:通过EDA课程的学习,可知运用Verilog HDL语言设计一个数字日历括计时器模块(jsq60、jsq24)、年月日模块(nyr2009)、控制模块(conr)、校时选择模块(mux_4)、显示选择模块(mux_16)和闹钟定时模块(LED1)、闹钟灯模块(nzd);然后将各个模块连接起来画成原理图再下载到实训仪上,调节开关及按钮来实现数字日历的功能。

1.3.2 设计方案:总原理图如下:2.各个模块程序的设计(1)设计一个分频器进行20MHz分频得到实训所需的1Hz的频率分析:这是个20MHZ时钟的分频器,将原来EDA实训仪提供的频率为20MHZ 的时钟转换成频率1HZ的时钟,然后输出到有需要的端口,触发模块起作用。

(2)分别设计一个能显示年月日和时分秒的程序校准年月日和秒分时的原理图如下:分析:①当k=0时,开关j1,j2,j3校秒时分然后将信号分别送到jsq24模块的jm(校秒)、jf(校分)、js(校时)。

②当k=1时,开关j1,j2,j3校年月日然后将信号分别送到nyr2009模块的jr(校日)、jy(校月)、jn(校年)。

2019-万年历实验报告-范文word版 (10页)

2019-万年历实验报告-范文word版 (10页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==万年历实验报告篇一:电子万年历实验报告重庆电力高等专科学校计算机科学系实训报告课程名称实验名称班级信息0911 姓名廖林单片机应用技术电子万年历学号 201X03020243 教师任照富日期 201X-12-28 地点一教七机房一、实训任务:1、看实训要求,计划出自己实训所要用元件,在网上查找资料。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

万年历生产工艺实习报告

万年历生产工艺实习报告

实习报告实习单位:XX科技有限公司实习时间:2021年6月1日至2021年6月30日实习内容:万年历生产工艺一、实习背景及目的随着科技的发展,电子产品日益普及,万年历作为一种实用便捷的电子设备,受到了广大用户的喜爱。

为了更好地了解万年历的生产工艺,提高自己的实践能力,我选择了XX科技有限公司进行为期一个月的实习。

本次实习的主要目的是:1. 学习并掌握万年历的生产工艺流程;2. 了解电子产品的质量控制及检验标准;3. 提高自己的动手能力及团队协作能力。

二、实习过程1. 生产工艺流程学习在实习初期,导师带领我参观了万年历的生产车间,并对生产工艺流程进行了详细介绍。

万年历的生产工艺主要包括以下几个环节:(1)电路板设计:根据产品需求,设计并制作电路板,确保电路板的稳定性和可靠性。

(2)电路板焊接:使用焊接设备将电子元件焊接至电路板,要求焊接质量高,无虚焊、假焊现象。

(3)电路板测试:对焊接好的电路板进行功能测试,确保电路板各项功能正常。

(4)组装:将电路板、显示屏、按键等部件组装成完整的万年历设备。

(5)质量检验:对组装好的万年历进行质量检验,确保产品符合国家标准。

2. 生产实践在了解完生产工艺流程后,我开始参与实际生产。

在导师的指导下,我先从简单的电路板焊接开始,逐步掌握了焊接技巧。

随后,我参与了电路板测试和组装工作,通过实践,我对电子产品生产过程有了更深入的了解。

3. 质量控制与检验在生产过程中,我了解到产品质量控制的重要性。

公司设有专门的质量检验部门,对每个生产环节进行严格把控。

我参与了产品质量检验工作,学习了如何使用检测设备及判断产品是否符合标准。

三、实习收获通过本次实习,我取得了以下收获:1. 掌握了万年历的生产工艺流程;2. 提高了自己的动手能力和团队协作能力;3. 了解了产品质量控制及检验标准;4. 认识到电子产品生产过程中细节的重要性。

四、实习总结本次实习让我对万年历的生产工艺有了更深入的了解,使我认识到理论知识与实践相结合的重要性。

EDA课程设计

EDA课程设计

课程设计报告课程设计名称:EDA技术课程设计题目:万年历系统的设计姓名:专业:电子信息科学与技术班级:电信一班学号:目录一、设计目标: (3)二、设计方案 (3)1、系统功能 (3)2、系统设计方案说明 (3)三.模块设计 (4)3.1分频模块 (4)3.2、主控制模块 (5)3.3 时间和日期的显示及设置模块 (6)3.4 输出显示模块 (11)3.5按键去抖模块 (12)四、设计总结 (13)附件1 原理电路图 (14)附件2、管脚分配图 (14)附件3、设计原理框图 (15)EDA课程设计实验报告一、设计目标:基本要求:1、使用原理图输入完成下述设计功能(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);(2)为了演示方便,应具有分钟、小时快进功能;(3)时、分、秒设置功能即校时功能。

(4)其他时钟使用功能,如闹钟、整点报时等功能。

2、使用硬件描述语言verilog HDL完成上述功能。

二、设计方案1、系统功能系统有数字钟的显示与设置,数字跑表的暂停及清零,闹铃的设置与实现,日期的设置与显示。

2、系统设计方案说明此实验是 FPGA系统的设计,主要有分频模块、主控制模块、时间和日期的显示及设置模块、输出显示模块、按键去抖模块以及一些输入和输出管脚、电源和地构成。

三.模块设计3.1分频模块1.功能:分频器,使1000HZ时钟信号分频成低频信号,达到适合的频率,以供此实验应用。

最后输入频率为1Hz。

2.相关程序:input clk_1Hz ; //1Hz时钟,供数字钟使用input clk_1kHz ;always@(posedge clk_1kHz)beginclk_500Hz=~clk_500Hz; //2分频//由1 kHz分频得500 Hz时钟信号,整点报时使用temp1=func_key;temp2=key1;temp3=key2;if(divide==3'b101) // 5 分频//由1 kHz分频得到100 Hz信号,用作跑表的时钟begindivide=0;clk_100Hz=~clk_100Hz;endelse divide=divide+1;end3.2、主控制模块1.功能:该模块实现对各个功能的整体控制选择,包括对时间显示与调整、日期显示与调整、闹钟显示与调整、秒表操作等的控制,同时输出所要显示的相应数据,完成万年历的整体操控选择设置等功能。

EDA万年历实训报告

EDA万年历实训报告

《EDA技术及其应用》实训报告班级姓名学号指导教师年月日郑州信息科技职业学院10级机械电子工程系目录一设计要求 (2)1.0 设计目的及意义 (2)1.1 设计要求 (2)二设计流程: (2)2.0 原理框图 (2)2.1 VHDL设计思路 (3)三 VHDL程序 (3)3.0 60进制计数器 (3)3.1 24进制计数器 (5)3.2 天计数模块 (6)3.3 月计数模块 (7)3.4 年计数模块 (9)3.5 调时控制模块 (11)3.6 显示切换模块 (12)四心得体会 (14)4.0 (14)五附录 (15)5.0 顶层文件 (15)一、设计目的及意义1.0 设计目的及意义在掌握EDA理论知识的基础上进一步了解EDA开发软件QuartusII的使用,掌握VHDL编程的技巧及方法,学会并熟练掌握PC机与实验箱的连接下载及使用,进一步提高自己的动手操作能力。

1.1 设计要求利用QuartusII编写程序在实验箱上实现万年历的年月日,时分秒,的显示,要求能够区分闰年与平年;年月日,时分秒可以自由调整并能随意切换;能够清楚地分辨出年月日,时分秒的显示状态。

二、设计流程2.0 原理框图显示秒、分、时日月年调整控制k4、k7秒、分是60进制计数器,时是24进制计数器,日有月份判断天数,月受年的影响由年判断出是润年还是平年从而反馈给月决定具体天数。

2.1 VHDL设计思路分别编写60进制计数器和24进制计数器生成元器件供秒,分和时使用,编写年月日模块,年模块要有一个反馈端口控制月;月也要有一个反馈端口控制日;最后编写调时模块和显示切换模块,可以用键4和键7控制调时,键1控制显示的切换,用对应的LED等的亮灭来表示显示状态。

三、VHDL程序3.0 60进制计数library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk:in std_logic;q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt60;architecture one of cnt60 issignal q11,q22:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq11<=q11+1;if q11=9 then q11<=(others=>'0');q22<=q22+1;end if;if q22=5 and q11=9 thenq22<="0000";q11<="0000";cout<='1';else cout<='0';end if;end if;end process;q1<=q11;q2<=q22;end;3.1 24进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 isport(clk:in std_logic;q1,q2:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt24;architecture one of cnt24 issignal q11,q22:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq11<=q11+1;if q11=9 then q11<=(others=>'0');q22<=q22+1;end if;if q22=2 and q11=3 thenq22<="0000";q11<="0000";cout<='1';else cout<='0';end if;end if;end process;q1<=q11;q2<=q22;end;3.2 天计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tian isport(clk:in std_logic;ab:in std_logic_vector(1 downto 0);CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity tian;architecture art of tian issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event AND clk='1' thenS1<=S1+1;IF S1=9 THENS1<="0000";S2<=S2+1;END IF;CASE AB ISwhen"00"=>IF S2=2 AND S1=8 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"01"=>IF S2=2 AND S1=9 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"10"=>IF S2=3 AND S1=0 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;when"11"=>IF S2=3 AND S1=1 THEN S1<="0000";S2<="0000";COUT<='1';ELSE COUT<='0';END IF;WHEN OTHERS=>NULL;END CASE;END IF;CQ1<=S1;CQ2<=S2;end process;END art;3.3 月计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yue isport(clk:in std_logic;ab:out std_logic_vector(1 downto 0);r: in std_logic;CQ1,CQ2:out std_logic_vector(3 downto 0);COUT:OUT std_logic);end entity YUE;architecture art of yue issignal s1,s2:std_logic_vector(3 downto 0);beginprocess(clk)beginIF clk'event AND clk='1' thenS1<=S1+1;IF S1=9 THENS1<="0000";S2<=S2+1;END IF;IF s2=1 and s1=2 thens1<="0001";s2<="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CASE s2&s1 iswhen"00000001"=>ab<="11";when"00000010"=>if r='0' then ab<="00"; else ab<="01";end if;when"00000011"=>ab<="11";when"00000100"=>ab<="10";when"00000101"=>ab<="11";when"00000110"=>ab<="10";when"00000111"=>ab<="11";when"00001000"=>ab<="11";when"00001001"=>ab<="10";when"00010000"=>ab<="11";when"00010001"=>ab<="10";when"00010010"=>ab<="11";WHEN OTHERS=>NULL;END CASE;CQ1<=S1;CQ2<=S2;end process;END art;3.4 年计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity year isport(clk:in std_logic;y1,y2:out std_logic_vector(3 downto 0);run,cout:out std_logic);end year;architecture one of year issignal q1,q2,q3:std_logic_vector(3 downto 0); beginprocess(clk)beginif clk'event and clk='1' thenq1<=q1+1;if q1=9 then q1<=(others=>'0');q2<=q2+1;end if;if q2=9 and q1=9 thenq2<="0000";q1<="0000";cout<='1';else cout<='0';end if;end if;end process;process(clk)beginif clk'event and clk='1' thenq3<=q3+1;if q3=3 then q3<=(others=>'0');run<='1';else run <='0';end if;end if;y1<=q1;y2<=q2;end process;end;3.5 调时控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity TIAO isPORT(NHO,NLO,YO,TOO,HO,MO,SO,K2,K8 : IN STD_LOGIC;NHI,NLI,YI,TI,HI,MI,SI,L1,L2,L4,L5,L7,L8 : OUT STD_LOGIC); END ENTITY;ARCHITECTURE BEHAV OF TIAO ISSIGNAL ABC :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(ABC,K2)BEGINif k2'event and k2='1' then ABC<=ABC+1; END IF;IF ABC="110" THEN ABC<="000" ; END IF;CASE ABC ISWHEN"000"=>NHI<=NHO;NLI<=NLO;YI<=YO;TI<=TOO;HI<=HO;MI<=MO;SI<=SO;L1<='0';L2<='0'; L4<='0';L5<='0';L8<='0';L7<='0';WHEN"001"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<='0';MI<='0';SI<=K8;L4<='1';L1<=' 0';L2<='0';L5<='0';L8<='0';L7<='0';WHEN"010"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<='0';MI<=K8;SI<='0';L7<='1';L1<=' 0';L2<='0';L4<='0';L5<='0';L8<='0';WHEN"011"=>NHI<='0';NLI<='0';YI<='0';TI<='0';HI<=K8;MI<='0';SI<='0';L2<='1';L1<=' 0';L4<='0';L5<='0';L8<='0';L7<='0';WHEN"100"=>NHI<='0';NLI<='0';YI<='0';TI<=K8;HI<='0';MI<='0';SI<='0';L5<='1';L1<=' 0';L2<='0';L4<='0';L7<='0';L8<='0';WHEN"101"=>NHI<='0';NLI<='0';YI<=K8;TI<='0';HI<='0';MI<='0';SI<='0';L8<='1';L1<=' 0';L2<='0';L4<='0';L5<='0';L7<='0';WHEN OTHERS => NULL;END CASE;END PROCESS;END;3.6 显示切换模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity control isport(sl,sh,fl,fh,hl,hh,dl,dh,ml,mh,yl,yh,yl1,yh1:instd_logic_vector(3 downto 0);k1:in std_logic;q1,q2,q3,q4,q5,q6,q7,q8:out std_logic_vector(3 downto 0);L6,L3:out std_logic);end control;architecture one of control issignal w:std_logic_vector(1 downto 0);beginprocess(k1)beginif k1'event and k1='1' then w<=w+1;if w=2 then w<="00";end if;end if;case w iswhen"00"=>q6<=yh;q5<=yl;q4<=mh;q3<=ml;q2<=dh;q1<=dl;L6<='1';L3<='0 ';when"01"=>q6<=hh;q5<=hl;q4<=fh;q3<=fl;q2<=sh;q1<=sl;L6<='0';L3<='1 ';when others=>null;end case;end process;end;四、心得体会4.0通过本次万年历实训,让我从中收获很多,感触也很多。

《EDA技术与应用》实训报告

《EDA技术与应用》实训报告

桂林电子科技大学信息科技学院《EDA技术与应用》实训报告学号姓名指导教师:2012 年6 月20 日数字日历电路的设计1.系统设计1.1 设计要求①通过编程下载至实训箱实现万年历的设计制作;②数字日历能够显示年、月、日和时、分和秒;③用EDA实训仪上的8只八段数码管显示年、月、日和时、分、秒,每过8秒分别现实两个时间段能自动倒换;④数字日历具有复位和校准年、月、日、时、分、秒的按钮,有锁定时分秒的按键,同时加了一个现实闹钟的程序,即在设置的时间,LED显示一分钟,按键可以暂停。

1.1.1 设计任务设计并制作一台数字日历,添加闹钟功能。

1.1.2 技术要求基于Verilog HDL 编写电路设计2.总体思路根据学校EDA实验设备的输入/输出接口的容限,本设计采用8只七断数码管分时完成时,分,秒,年,月,日的显示。

设计电路的计时器模块用于完成一天中24小时计时;年月日模块接受24小时计时器模块送来的“天”脉冲进行计数,得到日,月,年的显示结果;控制模块产生控制信号K,控制数码显示器显示年月日,和时分秒的显示或自动切换显示。

校时选择模块在k信号的控制下,选择将j1,j2,j3这三个校时按钮产生的信号是送到计时器模块的校秒,校时,校分的输入端,还是送到年月诶模块的校天,校月,校年输入端;显示选择模块在k信号的控制下,选择是将24小时模块信号,还是将年月日模块信号送到数码显示器显示。

闹钟模块用于在设置时间用LED代替真正的闹钟,灯光一闪一闪表示闹钟响,加一按键,用于控制闹钟的灭。

24小时计数器电路图分频模块控制模块控制模块24小时计时模块 年月日模块闹钟模块校时模块显示模块译码器系统流程图整个系统电路里模块有主要有年月日模块,24小时计数器模块,闹钟模块,显示模块,信号k控制模块,校时选择模块,还原选择模块;而24小时计数器模块中又分有分频模块,六十进制计数器模块,二十四进制计数器模块。

2.1 设计方案2.1.1各个模块程序的设计1:分频器module gen (clk,cout);input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==20000000-1) q=0; else q=q+1;if(q==20000000-1) cout=1; else cout=0;endendmodule module gen_mb(clk,cout); input clk;reg[24:0] q;output reg cout;always @(posedge clk) beginif(q==200000-1) q=0; else q=q+1;if(q==200000-1) cout=1; else cout=0;endendmodule2:六十进制计数器模块module cnt60(clk,clrn,j,q,cout);input clk,clrn,j;2千万分频20万分频output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h59) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h59) cout=1;else cout=0;endendendmodule3:二十四进制计数器模块module cnt24(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;always @(posedge clk^j or negedge clrn) beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q=='h23) cout=1;else cout=0;endendendmodule4:100进制计数器模块module cnt100(clk,clrn,j,q,cout);input clk,clrn,j;output reg[7:0] q;output reg cout;reg[7:0] flay;always @(j)beginif(j) flay=0;else flay=1;endalways @(posedge clk or negedge clrn) beginif(~clrn) q=0;else if(flay==0) beginif(q==99) q=0;else q=q+1;if(q[3:0]=='hff)beginq[3:0]=0; q[7:4]=q[7:4]+1;endif(q==99) cout=1;else cout=0;endendendmodule5:年月日模块module nyr2009(clrn,clk,jn,jy,jr,qn,qy,qr); input clrn,clk,jn,jy,jr;output [15:0] qn;output [7:0] qy,qr;reg [15:0] qn;reg [7:0] qy,qr;reg clkn,clky;reg [7:0] date;reg clkn1,clkn2,clkn3;initial begin clkn1=1;clkn2=1;clkn3=1;endinitial begin qn='h2000;qy=1;qr=1;endalways @(posedge (clk^jr) or negedge clrn)beginif (~clrn) qr=1;else beginif (qr==date) qr=1;else qr=qr+1;if (qr[3:0]=='ha) beginqr[3:0]=0; qr[7:4]=qr[7:4]+1;endif (qr==date) clky = 1;else clky = 0;endendalways @(posedge clky^jy or negedge clrn)beginif (~clrn) qy=1;else beginif (qy=='h12) qy=1;else qy=qy+1;if (qy[3:0]=='ha) beginqy[3:0]=0;qy[7:4]=qy[7:4]+1;endif (qy=='h12) clkn = 1;else clkn = 0;endendalwaysbegincase (qy)'h01: date='h31;'h02: beginif ((qn%4==0)&(qn%100 != 0)|(qn%400==0)) date='h29;else date='h28; end'h03: date='h31;'h04: date='h30;'h05: date='h31;'h06: date='h30;'h07: date='h31;'h08: date='h31;'h09: date='h30;'h10: date='h31;'h11: date='h30;'h12: date='h31;default :date='h30;endcaseendalways @(posedge (clkn^jn) or negedge clrn ) beginif (~clrn) qn[3:0]=0;else begin if(qn[3:0]==9) qn[3:0]=0;else qn[3:0]=qn[3:0]+1;if (qn[3:0]==9) clkn1=0;else clkn1=1;endendalways @(posedge clkn1 or negedge clrn ) beginif (~clrn) qn[7:4]=0;else begin if(qn[7:4]==9) qn[7:4]=0;else qn[7:4]=qn[7:4]+1;if (qn[7:4]==9) clkn2=0;else clkn2=1;endendalways @(posedge clkn2 or negedge clrn ) beginif (~clrn) qn[11:8]=0;else begin if(qn[11:8]==9) qn[11:8]=0;else qn[11:8]=qn[11:8]+1;if (qn[11:8]==9) clkn3=0;else clkn3=1;endendalways @(posedge clkn3 or negedge clrn ) beginif (~clrn) qn[15:12]=2;else if(qn[15:12]==9) qn[15:12]=0;else qn[15:12]=qn[15:12]+1;endendmodule6:信号k控制模块module contr(clk,k1,k2,k);input clk,k1,k2;output reg k;reg [3:0] qc;reg rc;always @(posedge clk)begin qc=qc+1;if (qc<8) rc=0;else rc=1;case ({k1,k2})0:k=rc;1:k=0;2:k=1;3:k=rc;endcaseendendmodule7:校时选择模块module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3,); input j1,j2,j3;input k;output reg jm,jf,js,jr,jy,jn;alwaysbeginif(k==0) {jm,jf,js}={j1,j2,j3};else {jr,jy,jn}={j1,j2,j3};endendmodule8:24小时计数器module cnt24(clrn,clk,q,j,cont);input clrn,clk,j;output reg [7:0] q;output reg cont;always @(posedge clk^j or negedge clrn)beginif(~clrn) q=0;else beginif(q=='h23) q=0;else q=q+1;if(q[3:0]=='ha) begin q[3:0]=0;q[7:4]=q[7:4]+1;end if(q=='h23) cont=1;else cont=0;endendendmodule9:.显示器选择器module mux_16(k,qm,qf,qs,qr,qy,qn,q);input k;input[7:0] qm,qf,qs,qr,qy;input[15:0] qn;output reg [31:0] q;alwaysbeginif(k==0) beginq[31:24]=0;q[23:0]={qs,qf,qm};endelse q={qn,qy,qr};endEndmodule10:闹钟模块naozhong(qs,qf,led,zt);input zt;input[7:0] qs,qf;output led;reg led;alwaysbeginif (qs=='h06&&qf=='h01)led=1;elseled=0;if(zt==1) led=0;endendmodule3.制作与调试过程在实验中参考上课中学的万年历,在原有的基础上添加了一个闹钟功能,用LED代替实际的闹钟,在设置的时间内闪烁1分钟,又添加姨暂停按键,实现闹钟关闭功能,由于能力有限,没能加上其他功能的创新,是此次实训设计的缺憾,在调试过程中也比较顺利,在经过一段时间的调试后,基本就能实现功能,而主要时间用在了对原来的程序理解上。

电子万年历实训报告

电子万年历实训报告
本文详细介绍了AT89S52单片机的基本原理,分析了AT89S52各个管脚的功能及它在设计电路中的作用。本文论述了LCD1602液晶屏和时钟芯片DS1302的工作原理及其软件设计过程。
2、引言
单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)部件都集成在一块集成电路芯片上的微型计算机。单片机是把主要计算机功能部件都集成在一块芯片上的微型计算机。它是一种集计数和多中接口于一体的微控制器,被广泛应用在智能产品和工业自动化上,而52单片机是个单片机中最为典型和最有代表性的一种。
·P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输入缓冲极可以驱动(输入或输出电流)4个TTL逻辑门电路。对端口“1”,通过内部的上拉电阻把端口拉到高电平,此时和作为输出口,作输出口时,因为存在内部上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部存储器或1位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线的内容(也既特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高地址和其他控制信号。
3.2硬件的设计总框图
本次设计的基于单片机控制的电子万年历,其具有年、月、日、星期、时、分、秒的显示功能;具体时间与阴、阳历能够自动关联;可以设置闹铃的功能。其具体实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给LCD显示信息。并且可以在键盘设置模块输入修改时间,设置闹铃等信息,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信此传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD模块上显示

EDA实验报告万年历

EDA实验报告万年历

《EDA技术及其应用》实验报告万年历设计班级姓名学号年月日***********学院一设计要求与系统功能要求:1.能实现年、月、日和时、分、秒的计时功能,按键控制模式切换。

2.能利用实验系统上的按键实现年、月、日和时、分、秒的校对功能。

功能:1. 将年、月、日和时、分、秒两种模式分别在试验箱模式0下显示,并设置键6(KEY1)为模式的切换键。

2.当KEY1=1时,显示年、月、日,键5(T1)为调年键、键4(T2)为调月键、键3(T3)键为调日键。

3.当KEY1=0时,显示时、分、秒,键5 为调时键,键4为调分键,键3为调秒键。

4.能实现进位,判断闰年等功能。

二设计流程1. 万年历原理秒、分是60进制,时是24进制,日31天由月1.3.5.7.8.10.12控制,日28/29由2月和润年控制,日30由月4.6.9.11控制。

原理如下图:显示秒、分、时日月年调整控制T1、T2、T32. 原理框图根据实验要求,截得实验原理框图如下:3. 原理框图中各子模块的VHDL程序、生成模块框图和功能仿真3.0 分频器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY divider isPORT(CLKI:IN STD_LOGIC;CLKO1,CLKO2:OUT STD_LOGIC);END divider;SIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS (clki)BEGINIF clki'EVENT and clki='1' THENcount<=count+1;END IF;END PROCESS;clko2<=count(0);------------------输出4Hz作为校时的时钟信号clko1<=count(2);------------------输出1Hz作为正常计时的秒时钟信号END a;3.1 2选1数据选择器(用以选择正常计时的时钟或校时的时钟信号)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX2 ISPORT(A,D0,D1:IN STD_LOGIC;Y: OUT STD_LOGIC);END MUX2;ARCHITECTURE ONE OF MUX2 ISBEGINY<=D0 WHEN A='0' ELSE------A为低电平输出D0D1 WHEN A='1'; -------A为高电平输出D1END ONE;3.2 调时模块(用以控制按键是调节时分秒还是年月日以及数码管相应显示) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164. ALL;ENTITY tiaoshi ISport(key1,t1,t2,t3:in std_logic;ty,tm,td,th,tf,ts:out std_logic;k:out std_logic);end tiaoshi;architecture one of tiaoshi issignal a:std_logic;beginprocess(key1)beginif key1'event and key1='1' then a<=not a;end if;if a<='0' thenty<='0';tm<='0';td<='0';th<=t1;tf<=t2;ts<=t3; ------k=0时,显示、调节时分秒elsety<=t1;tm<=t2;td<=t3; ------k=1时,显示、调节年月日th<='0';tf<='0';ts<='0';end if;end process;k<=a;end one;3.3 60进制计数器(秒与分的计数模块)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT60 ISPORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT60;ARCHITECTURE behav OF CNT60 ISBEGINPROCESS(CLK)V ARIABLE Q1,Q2: STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENQ1:=Q1+1;IF Q1>9 THEN Q1:="0000";Q2:=Q2+1;END IF;IF Q2=6 AND Q1=0 THEN Q1:="0000";Q2:="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CQ1<=Q1;CQ2<=Q2;END PROCESS;END;3.4 24进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt24 ISPORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt24;ARCHITECTURE behav OF cnt24 ISBEGINPROCESS(CLK)V ARIABLE Q1,Q2: STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENQ1:=Q1+1;IF Q1>9 THEN Q1:="0000";Q2:=Q2+1;END IF;IF Q2=2 AND Q1=4 THEN Q1:="0000";Q2:="0000";COUT<='1';ELSE COUT<='0';END IF;END IF;CQ1<=Q1;CQ2<=Q2;END PROCESS;END;3.5 天计数模块Library IEEE;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_1164.all;ENTITY day ISPORT( clk : in std_logic;a,b : in std_logic;T1,T2 : out std_logic_vector(3 downto 0);cout : out std_logic);END day;Architecture one of day issignal ab: STD_LOGIC_VECTOR(1 DOWNTO 0);signal Q1,Q2: STD_LOGIC_VECTOR(3 DOWNTO 0);BeginPROCESS(clk,a,b)beginab<=a&b;IF CLK'EVENT AND CLK='1' THENIF Q1=9 THENQ1<="0000";Q2<=Q2+1;else Q1<=Q1+1;end if;if ab="00" thenif Q2=3 AND Q1=1 THENQ2<="0000"; Q1<="0001"; cout<='1';else cout<='0';end if;elsif ab="01"thenif Q2=3 and Q1=0 THENQ2<="0000" ;Q1<="0001";cout<='1';else cout<='0';end if;elsif ab="10" thenif Q2=2 AND Q1=8 thenQ2<="0000" ;Q1<="0001";cout<='1';else cout<='0';end if;elsif ab="11" thenif Q2=2 AND Q1=9 thenQ2<="0000" ;Q1<="0001";cout<='1'; else cout<='0';end if;else null;END IF;end if;T1<=Q1;T2<=Q2;END PROCESS;END ARCHITECTURE one;3.6 月计数模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yue ISPORT(CLK,run:IN STD_LOGIC;Y1,Y2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);a,b:OUT STD_LOGIC;COUT:OUT STD_LOGIC);END yue ;ARCHITECTURE ONE OF yue ISsignal Q2,Q1:STD_LOGIC_VECTOR (3 DOWNTO 0); signal Q2Q1:STD_LOGIC_VECTOR (7 DOWNTO 0);SIGNAL a1,b1:STD_LOGIC;BEGINPROCESS(CLK,run)BEGINIF CLK'EVENT AND CLK='1' THENIF Q1=9 THENQ1<="0000";Q2<=Q2+1;ELSEQ1<=Q1+1;END IF;IF Q2=1 AND Q1=2 THENQ1<="0001";Q2<="0000";COUT<='1';ELSE COUT<='0';END IF;end if;end PROCESS;PROCESS(q2,q1)beginQ2Q1<=Q2&Q1;IF Q2Q1="00000001" ORQ2Q1="00000011" ORQ2Q1="00000101" ORQ2Q1="00001000" ORQ2Q1="00010000" ORQ2Q1="00010010"THEN a1<='0';b1<='0';ELSIF Q2Q1="00000010" THENIF run='1' thena1<='1';b1<='1';else a1<='1';b1<='0';end if;ELSE a1<='0';b1<='1';END IF;END PROCESS;Y1<=Q1;Y2<=Q2;a<=a1;b<=b1;END ARCHITECTURE ONE;3.7 年计数模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY nian ISPORT(CLK:IN STD_LOGIC;N1,N2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);run:OUT STD_LOGIC);END nian;ARCHITECTURE ABC OF nian ISsignal Q1,Q2,Q3:STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINPROCESS(CLK,Q1,Q2)BEGINIF CLK'EVENT AND CLK='1' THENIF Q1=9 THENIF Q2=9 THENQ1<="0000";Q2<="0000";ELSEQ1<="0000";Q2<=Q2+1;END IF;ELSEQ1<=Q1+1;END IF;Q3<=Q3+1;IF Q3=3 THENQ3<="0000";run<='1';ELSE run<='0';END IF;end if;end PROCESS;N1<=Q1;N2<=Q2;end;3.8秒分时和日月年分组输出控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164. ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity kong isport(n1,n2,y1,y2,t1,t2,h1,h2,f1,f2,s1,s2:in std_logic_vector(3downto 0);k:in std_logic;hn1,hn2,fy1,fy2,st1,st2:out std_logic_vector(3 downto 0));end kong;architecture one of kong isbeginprocess(k,s1,s2,f1,f2,h1,h2,t1,t2,y1,y2,n1,n2)beginif k='0' then-----------显示时分秒st1<=s1;st2<=s2;fy1<=f1;fy2<=f2;hn1<=h1;hn2<=h2;else -----------显示年月日st1<=t1;st2<=t2;fy1<=y1;fy2<=y2;hn1<=n1;hn2<=n2;end if;end process;3.9 顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TOP ISPORT(CLK,KEY1,T1,T2,T3:IN STD_LOGIC;HNH,HNL,FYH,FYL,STH,STL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END TOP;ARCHITECTURE ONE OF TOP ISCOMPONENT TIAOSHI IS-------------------------例化调试port(key1,t1,t2,t3:in std_logic;ty,tm,td,th,tf,ts:out std_logic;k:out std_logic);END COMPONENT;COMPONENT MUX2 IS----------------------------例化数选PORT(A,D0,D1:IN STD_LOGIC;Y: OUT STD_LOGIC);END COMPONENT;COMPONENT NIAN IS--------------------------例化年PORT(CLK:IN STD_LOGIC;N1,N2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);run:OUT STD_LOGIC);END COMPONENT;COMPONENT YUE IS---------------------------例化月PORT(CLK,run:IN STD_LOGIC;Y1,Y2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);a,b:OUT STD_LOGIC;COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT DAY IS---------------------------例化日Port( clk : in std_logic;a,b : in std_logic;T1,T2 : out std_logic_vector(3 downto 0);cout : out std_logic);END COMPONENT;COMPONENT CNT24 IS----------------------例化时PORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT60 IS---------------------例化分秒PORT(CLK:IN STD_LOGIC;CQ1,CQ2:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);COUT:OUT STD_LOGIC);END COMPONENT;COMPONENT KONG IS----------------------例化控制显示port(n1,n2,y1,y2,t1,t2,h1,h2,f1,f2,s1,s2:in std_logic_vector(3 downto 0);k:in std_logic;hn1,hn2,fy1,fy2,st1,st2:out std_logic_vector(3 downto 0));END COMPONENT;COMPONENT DIVIDER IS--------------------例化分频器PORT(CLKI:IN STD_LOGIC;CLKO1,CLKO2:OUT STD_LOGIC);END COMPONENT;SIGNAL Y,M,D,H,F,S,K1:STD_LOGIC;SIGNAL C1,C2:STD_LOGIC;SIGNAL Y1,Y2,Y3,Y4,Y5,Y6,CL1,CL2,CL3,CL4,CL5,CL6:STD_LOGIC;SIGNAL CO1,CO2,CO3,CO4,CO5:STD_LOGIC;SIGNAL A1,B1,R:STD_LOGIC;SIGNAL Q:STD_LOGIC_VECTOR(47 DOWNTO 0);BEGINU1:TIAOSHI PORT MAP(KEY1=>KEY1,T1=>T1,T2=>T2,T3=>T3,TY=>Y,TM=>M,TD=>D,TH=>H,TF=>F,TS=>S,K=>K1);U2:DIVIDER PORT MAP(CLKI=>CLK,CLKO1=>C1,CLKO2=>C2);U3:MUX2 PORT MAP(A=>S,D0=>C1,D1=>C2,Y=>Y1);U4:MUX2 PORT MAP(A=>F,D0=>CO1,D1=>C2,Y=>Y2);U5:MUX2 PORT MAP(A=>H,D0=>CO2,D1=>C2,Y=>Y3);U6:MUX2 PORT MAP(A=>D,D0=>CO3,D1=>C2,Y=>Y4);U7:MUX2 PORT MAP(A=>M,D0=>CO4,D1=>C2,Y=>Y5);U8:MUX2 PORT MAP(A=>Y,D0=>CO5,D1=>C2,Y=>Y6);U9:CNT60 PORT MAP(CLK=>Y1,COUT=>CO1,CQ1=>Q(3 DOWNTO 0),CQ2=>Q(7 DOWNTO 4));U10:CNT60 PORT MAP(CLK=>Y2,COUT=>CO2,CQ1=>Q(11 DOWNTO 8),CQ2=>Q(15 DOWNTO 12));U11:CNT24 PORT MAP(CLK=>Y3,COUT=>CO3,CQ1=>Q(19 DOWNTO 16),CQ2=>Q(23 DOWNTO 20));U12:DAY PORT MAP(CLK=>Y4,COUT=>CO4,T1=>Q(27 DOWNTO 24),T2=>Q(31 DOWNTO 28),A=>A1,B=>B1);U13:YUE PORT MAP(CLK=>Y5,COUT=>CO5,Y1=>Q(35 DOWNTO 32),Y2=>Q(39 DOWNTO 36),RUN=>R,A=>A1,B=>B1);U14:NIAN PORT MAP(CLK=>Y6,RUN=>R,N1=>Q(43 DOWNTO 40),N2=>Q(47 DOWNTO 44));U15:KONG PORT MAP(N1=>Q(43 DOWNTO 40),N2=>Q(47 DOWNTO 44),Y1=>Q(35 DOWNTO 32),Y2=>Q(39 DOWNTO 36),T1=>Q(27 DOWNTO 24),T2=>Q(31 DOWNTO 28),H1=>Q(19 DOWNTO 16),H2=>Q(23 DOWNTO 20),F1=>Q(11 DOWNTO 8),F2=>Q(15 DOWNTO 12),S1=>Q(3 DOWNTO 0),S2=>Q(7 DOWNTO 4),HN1=>HNL,HN2=>HNH,FY1=>FYL,FY2=>FYH,ST1=>STL,ST2=>STH,K=>K1);END ONE;三系统调试1.设置引脚选用系统上N0.0电路结构:CLK~CLOCK1(实验箱上跳针帽连接CLOCK1和8Hz),T1~键5,T2~键4,T3~键3,HNH~PIO39-36,HNL~PIO35-32,FYH~PIO31-28,FYL~PIO27-24,STH~PIO23-20,STL~PIO19-16。

数字万年历实训报告总结

数字万年历实训报告总结

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

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

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

二、实训目的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显示模块的背光亮度不足,导致显示不清晰。

EDA万年历报告

EDA万年历报告

FPGA-CPLD原理及应用课程设计报告题目:基于SOPC设计万年历学院: 信息与电子工程学院专业: 电子信息工程学号:姓名:指导老师:时间: 2013.7.15--2013.7.20一、摘要设计从系统硬件出发,由CPU、总线、RAM、外接设备等构成SOPC Builder 的硬件系统,通过Nios II DE2开发的嵌入式软件编写并嵌入SOPC Builder的硬件中实现万年历的整体开发。

通过应用SoPC Builder开发工具,设计者可以摆脱传统的、易于出错的软硬件设计细节,从而达到加快项目开发、缩短开发周期、节约开发成本的目的并具有高集成度、设计灵活和可移植性较好。

关键词:万年历SOPC SOPC Builder Nios II DE2二、设计要求用Nios II DE2 开发板的LCD显示电子钟的日期和时间。

LCD分两行显示,第1行显示年、月、日;第2行显示时、分、秒。

用输入BUTTON[0]来控制LCD 行的修改,同时让Nios II DE2开发板上的绿色发光二极管亮灭来表示这个选择。

当BUTTON[0]按一下后,LEDG3亮,可以修改年、月和日的数字;再按一下BUTTON[0]后,LEDG3灭,可以修改时、分和秒的数字。

另外用输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每次按动一次BUTTON[3],依次更换“年”、“月”和“日”的修改。

当处于时间修改方式时,每次按动一次BUTTON[3],依次更换“时”、“分”和“秒”的修改。

修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。

三、设计内容1、按键信息BUTTON[3]:“年”、“月”、“日”或“时”、“分”、“秒”切换键BUTTON[2]:+键BUTTON[1]:-键BUTTON[0]:“年”、“月”、“日”与“时”、“分”、“秒”切换键显示信息LCD_Line1:显示“年”、“月”、“日”LCD_Line1:显示“时”、“分”、“秒”2、SOPC Builder 硬件建立SOPC Builder是在Quartus II里的SOPC Builder进行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按键,LED,以及LCD_ON。

电子万年历制作实习报告

电子万年历制作实习报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

万年历实训报告

万年历实训报告

《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)在试验箱上通过按键实现年月日和时分秒的显示切换。

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

《EDA技术及其应用》实训报告班级 11241姓名苏合信,张明伟,朱迎新,王亚坤学号 22,11,28,29指导教师薛瑞2013年05月26 日北华航天工业学院11级电子工程系目录一设计要求 (2)1.0 设计目的及意义 (2)1.1 设计要求 (2)二设计流程: (2)2.0 原理框图 (2)2.1 VHDL设计思路 (3)三 VHDL程序 (3)3.0 天计数模块 (6)3.1 月计数模块 (7)3.2 年计数模块 (9)3.3 调时控制模块 (11)3.4 译码模块 (12)3.5 扫描模块 (12)四心得体会 (14)4.0 (14)五附录 (15)5.0 顶层文件 (15)一、设计目的及意义1.0 设计目的及意义在掌握EDA理论知识的基础上进一步了解EDA开发软件QuartusII的使用,掌握VHDL编程的技巧及方法,学会并熟练掌握PC机与实验箱的连接下载及使用,进一步提高自己的动手操作能力。

1.1 设计要求利用QuartusII编写程序在实验箱上实现万年历的年月日的显示,要求能够区分闰年与平年;年月日,时分秒可以自由调整并能随意切换;能够清楚地分辨出年月日,时分秒的显示状态。

二、设计流程2.0 原理框图2.1 VHDL设计思路编写年月日模块,年模块要有一个反馈端口控制月;月也要有一个反馈端口控制日;最后编写调时模块和扫描模块,以及译码模块,可以用k1,k2调节年月,用对应的LED等的亮灭来表示调节状态。

三、VHDL程序3.0 天计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tian isport(clk:in std_logic;pan:in std_logic_vector(1 downto 0);T1:out std_logic_vector(6 downto 0);cout:out std_logic);end tian;architecture one of tian issignal q1:std_logic_vector(3 downto 0);signal q2:std_logic_vector(2 downto 0);signal ab:std_logic_vector(1 downto 0);beginprocess(clk,pan)beginif clk'event and clk='1'then q1<=q1+1;if q1=9 then q1<="0000";q2<=q2+1;end if;case pan iswhen "00"=>if q2=3 and q1=1 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "01"=>if q2=3 and q1=0 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "10"=>if q2=2 and q1=8 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when "11"=>if q2=2 and q1=9 then q2<="000" ;q1<="0001";cout<='1'; else cout<='0';end if;when others=>null;end case;end if;end process;T1(3 downto 0)<=q1;T1(6 downto 4)<=q2;end one;3.1 月计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yue isport(clk,run:in std_logic;cout:out std_logic;pan:out std_logic_vector(1 downto 0);Y1:out std_logic_vector(6 downto 0));end yue;architecture behav of yue issignal q1:std_logic_vector(3 downto 0);signal q2:std_logic_vector(2 downto 0);signal q3:std_logic_vector(6 downto 0);beginprocess(clk,run,q1,q2)beginif clk'event and clk='1' thenq1<=q1+1;if q1=9 then q1<="0000";q2<=q2+1;end if;if q1=2 and q2=1 thenq1<="0001";q2<="000";cout<='1';else cout<='0';end if;q3<=q2&q1;case q3 iswhen "0000001"=>pan<="00";when "0000010"=>if run='1' then pan<="11";else pan<="10"; end if;when "0000011"=>pan<="00";when "0000100"=>pan<="01";when "0000101"=>pan<="00";when "0000110"=>pan<="01";when "0000111"=>pan<="00";when "0001000"=>pan<="00";when "0001001"=>pan<="01";when "0001010"=>pan<="00";when "0001011"=>pan<="01";when "0001100"=>pan<="00";when others=>null;end case;end if;Y1(3 downto 0)<=q1;Y1(6 downto 4)<=q2; end process;end behav;3.2 年计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity nian isport(clk :in std_logic;n1:out std_logic_vector(6 downto 0); run:out std_logic);end entity;architecture one of nian issignal q1,q3:std_logic_vector(3 downto 0); signal q2:std_logic_vector(2 downto 0);beginprocess(clk)beginif clk'event and clk='1' thenq1<=q1+1;q3<=q3+1;if q1=9 then q2<=q2+1;q1<="0000";end if;if q3=3 thenq3<="0000";run<='1';else run<='0';end if;if q1=9 and q2<=7 then q1<="0001";q2<="000"; end if;end if;end process;n1(3 downto 0)<=q1;n1(6 downto 4)<=q2;end one;3.3 调时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity tiaoshi isport(k1,k2:in std_logic;m1,m2:in std_logic;n1,n2,d1,d2:out std_logic);end entity;architecture one of tiaoshi issignal q:std_logic_vector(3 downto 0);beginprocess(k1,q,m1,m2)beginif k1'event and k1='1' then q<=q+1;if q=2 then q<="0000";end if;end if;case q iswhen"0000"=>n1<=m1;n2<=m2;d1<='0';d2<='0'; when"0001"=>n1<=k2;n2<='0'; d1<='1';d2<='0'; when"0010"=>n1<='0';n2<=k2; d1<='0';d2<='1'; when others=>NULL;end case;end process;end one;3.4 扫描模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity seltime isport(clk1:in std_logic;tian,yue:in std_logic_vector(6 downto 0); nian:in std_logic_vector(6 downto 0);daout:out std_logic_vector(3 downto 0);dp:out std_logic;sel:out std_logic_vector(2 downto 0));end seltime;architecture fun of seltime issignal count:std_logic_vector(2 downto 0); beginsel<=count;process(clk1)beginif(clk1'event and clk1='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;case count iswhen "000"=>daout<=tian(3 downto 0);dp<='0'; when"001"=>daout(3)<='0';daout(2 downto 0)<=tian(6 downto 4);dp<='0';when "010"=>daout<=yue(3 downto 0);dp<='1'; when"011"=>daout(3)<='0';daout(2 downto 0)<=yue(6 downto 4);dp<='0';when "100"=>daout<=nian(3 downto 0);dp<='1'; when others=>daout(3 downto 2)<="00"; daout(2 downto 0)<=nian(6 downto 4);dp<='0';end case;end process;end fun;3.5 译码模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led isport(ledi:in std_logic_vector(3 downto 0);ledo:out std_logic_vector(6 downto 0));end entity;architecture one of led isbeginprocess(ledi)begincase ledi iswhen "0000"=>ledo<="1111110";when "0001"=>ledo<="0110000";when "0010"=>ledo<="1101101";when "0011"=>ledo<="1111001";when "0100"=>ledo<="0110011";when "0101"=>ledo<="1011011";when "0110"=>ledo<="1011111";when "0111"=>ledo<="1110000";when "1000"=>ledo<="1111111";when "1001"=>ledo<="1111011";when others=>null;end case;end process;end one;四、心得体会通过本次万年历实训,让我从中收获很多,感触也很多。

相关文档
最新文档