流水灯实训报告

10 分钟搞定哦

转载于 http://www.scetop.com/jpkc/pld/ArticleShow.asp?ArticleID=565&BigClassName=%CA%B5%D1%B5%BD%CC%D1%A7
希望对你有帮助

实训项目(一) 流水灯 1. 实验目的通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及Ver-ilog HDL的编程方法;学习简单时序电路的设计和硬件测试.2. 实验内容本实验的内容是建立可用与控制LED流水灯的简单硬件电路,要求在SmartSOPC实验箱上实现LED1-LED8发光二极管流水灯显示.3. 实验原理(1) 在引脚上周期性地输出流水数据,如原来输出的数据是11111100则表示点亮LED1、LED2.流水一次后,输出数据应该为11111000,而此时则应点亮LED1~LED3三个LED发光二极管,这样就可以实现LED流水灯.为了观察方便,流水速率最好在2Hz左右.在QuickSOPC核心板上有一个48MHz的标准钟源,该时钟脉冲CLOCK与芯片的28脚相连.为了产生2Hz的时钟脉冲,在此调用了一个分频模块,通过修改分频系数来变改输出频率.当分频系数为24×10时,输出即为2Hz的频率信号.(2) int_div分频模块说明: int_div模块是一个占空比为50%的任意整数分频器.输入时钟为clock,输出时钟为clk_out.其中F_DIV为分频系数,分频系数范围为1~2N(n=F_DIV_WIDTH).若要改变分频系数,则改变参数F_DIV和F_DIV_WIDTH到相应范围即可.在本例中输入时钟频率为48MHz,要得到2Hz的信号,分频系数应为48×10/2=24×10.对于分频系数为24×10的数需要一个25位宽的计数器.在以后的实验中还会多次用到这个模块,用户可以分析它的基本原理.4. 实验步骤(1) 启动QUARTUSⅡ建立一个空白工程,然后命名为.(2) 新建VerilogHDL源程序文件ledwater.v,输入程序代码并保存,然后进行综合编译.若在编译过程中发现错误,则找出并更正错误,直到编译成功为止.(3) 从设计文件创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件.(4) 将光盘中EDA_component目录下的int_div.bsf和int_div.v拷贝到工程目录.(5) 新建图形设计文件命名为led_wter.bdf在空白处双击鼠标左键,在sym-bol对话框左上脚的的Iibraries中,分别将projet下的ledwater和int_div模块放在图形文件ed_wter.bdf中,加入输入、输出引脚,双击各引脚符号,进行引脚命名.将与ledwater模块led[7..0]连接的引脚命名为led[7..0],与int_div模块clock连接的引脚命名为clock. int_div模块的clk_out与ledwater模块的clk相连接.双击int_div的参数框,并修改参数,将F_DIV的值改为24000000, F_DIV_WIDTH的值改为25,单击“确定”按扭保存修改的文件的参数如果led_water.bdf中部能看到参数设置框,可在空白处右击鼠标,选择Show Parameter Assignments命令来显示参数设置框。(6) 选择目标器件并对相应的引脚进行锁定,正在这里所选择的器件为Altera公司Cyclone系列的EP 1C6Q240C8芯片,引脚锁定方法如表3.1所列。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。 表3.1 引脚锁定方法 信号引脚 信号引脚1C61C12EDA1C61C12EDALed[0]505050led[5]474747led[1]535353led[6]484848led[2]545454led[7]494949led[3]555555clock282828led[4]176176176 (7) 将led_water.bdf设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。(8) 最后将跳线短接帽跳接到smartSOPC实验箱上JP6的LED0~LED7,使LED1~LED8 分别与FPGAD的引脚50、53~55、176和47~49相连。将AlteraByteBlasterⅡ下载电缆的两端分别接到PC机的打印机并口和QuickSOPC核芯板上的JTAG下载口上,打开电源,执行下载命令,把程序下载到FPGA器件中,此时,即可在smartSOPC实验箱上看到流水灯。(9 更改分频模块(int_div)的分频系数,并重新编译下载,观察流水灯的变化。 5. 实验参考程序 程序清单3.2ledwater.v Module ledwater(led,clk); //模块名ledwaterOutput[7:0]led; //定义LED输出口Input clk; //定义时钟输入口Reg[8:0] led_r; //定义输出寄存器Assign led=led_r[7:0]; //寄存器输出always@(posedge clk) //在时钟上升沿触发进程beginled_r<=led_r<<1; //是,则输出左移一位if(led_r==9`d0) //循环完毕吗?led_r<=9`b11111111; //是,则重新赋初值endendmodule 6. 日积月累(1) 思考:如何实现左流水灯或其他花样流水呢?用户自己动手试试。(2) REG数据类型:由两大类数据类型,线网类型和寄存器类型。REG是最常见的寄存器类型,形式如下:REG[msb:lsb]reg1,reg2,…regN;其中,msb和lsb定义了范围,并且均匀为常数值表达式。范围定义是可以选的。如果没有定义范围,默认值为1位寄存器。 reg数据类型的默认初始值是不定值X,它可以赋正值,也可以赋负值。当一个reg类型数据是一个表达式中的操作数时,他的值被当作是无符号值,即正值(如意个4)为寄存器被赋值-1,则在表达式中进行运算时,其值被认为是+15)。 reg型只表示被定义的信号将用在always块内,理解这一点很重要。并不是说reg 型信号一定是寄存器或触发器的输出。虽然reg型信号常常是寄存器或触发器的输出,但并不一定总是这样,只有在时序逻辑中他对应的才是寄存器,而在组合逻辑中他则表达一个节点。(3)按照上述管工程进行编译,会出现“warning: found pins functioning as undefined clocks and/or memory enables Info: Assuming node ”clock” is an undefined clock”的警告,大概意思是指发现clock节点没有定义成时钟信号。消除这个警告的方法如下: ①选择assignments→timing settings命令,在弹出的对话框中的clockseteings选项区中选中settingsfor individual clock signals项。 ②对clocks进行设置,在弹出的对话框中单击按钮添加节点,按图中所示进行设置。图中requiredfmax 为系统需求的最大时钟频率,在这里填50HZ即可。 ③设置好之后连续单击OK按钮保存设置,最后再进行编译,原先的warning就会消除。以上的操作是将“clock”加入时钟域。如果“clock”不是一个时钟信号,可将设置属性改为“not a clock ”,也可以消除warning。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-24
流水灯设计实习报告 默认分类 2009-06-13 14:14:14 阅读2195 评论3 字号:大中小 订阅 实训任务: 做单一灯的左移右移,八个发光二极管L1-L8分别接在单片机的p1.0-p1.7接口上,输出“0”时,发光二极管亮,开始P1.0→P1.2→P1.3┅→P1.7→P1.6→┅→P1.0亮,重复循环3次。然后左移2次,右移2次,在左移和右移时八个灯闪烁2次(延时的时间0.2秒)。 一、 实训目的和要求: (1) 熟练掌握Keil C51集成开发环境的使用方法 (2) 熟悉Keil C51集成开发环境调试功能的使用和DP51PRO.NET单片机仿真器、编程器、实验仪三合一综合开发平台的使用。 (3) 利用单片机的P1口作IO口,学会利用P1口作为输入和输出口。 (4) 了解掌握单片机芯片的烧写方法与步骤。 (5) 学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用。 (6) 掌握利用Protel 99 SE绘制电路原理图及PCB图。 (7) 了解PCB板的制作腐蚀过程。 (8)掌握焊接工艺的各个要领.二、实训器材: PC机(一台) PCB板(一块) 200Ω电阻(八只) 10K电阻(一只) LED发光二极管(八只)晶振一块   25V 10μF电容(一只) 30PF瓷片电容(两只)单片机IC座(一块) AT89C51单片机芯片(一块) 热转印机(一台) DP51PRO.NET单片机仿真器、编程器、实验仪三合一综合开发平台(一台) 四、实训步骤: (1)根据要求写出程序。(2)根据原理图(如图一所示),用导线把单片机综合开发平台A2区的J61接口与D1区的J52接口相连。 (3)将流水灯程序编写完整并使用TKStudy ICE调试运行。 (4)使用导线把A2区J61接口的P1口7个口分别与J52接口的八个LED相连。 (5)打开电源,将编写好的程序运用TKStudy ICE进行全速运行,看能否实现任务要求。 (6)观察运行结果,若能实现功能,则将正确编译过的HEX文件通过EasyPRO51编程器写入MCU片内存储器,然后将烧写的芯片A2区的圆孔IC座进行最终实验结果的演示。 (7)制板。首先利用Protel 99 SE画好原理图,根据原理图绘制PCB图,然后将绘制好的PCB布线图打印出来,经热转印机转印,将整个布线图印至PCB板上,最后将印有布线图的PCB板投入装有三氯化铁溶液的容器内进行腐蚀,待PCB板上布线图外的铜全部后,将其取出,清洗干净。 (8)焊接。将所给元器件根据原理图一一焊至PCB板相应位置。 (9)调试。先把AT89C51芯片插入IC座,再将+5V电源加到制作好的功能板电源接口上,观察功能演示的整个过程(看能否实现任务功能)。 (流水灯控制器原理图) 五、流水灯控制器程序的主程序: PCB ORG 0000H LJMP MAIN MOV R0, #3 MOV R1 , #2 MOV R2, #2 MOV R3,#2 MAIN: CLR P1.0 ACALL DEL CLR P1.1 ACALL DEL CLR P1.2 ACALL DEL CLR P1.3 ACALL DEL CLR P1.4 ACALL DEL CLR P1.5 ACALL DEL CLR P1.6 ACALL DEL CLR P1.7 ACALL DEL SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 ACALL DEL CLR P1.7 ACALL DEL CLR P1.6 ACALL DEL CLR P1.5 ACALL DEL CLR P1.4 ACALL DEL CLR P1.3 ACALL DEL CLR P1.2 ACALL DEL CLR P1.1 ACALL DEL CLR P1.0 ACALL DEL SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 ACALL DEL DJNZ R0, MAIN SJMP LOOP LOOP: CLR P1.0 ACALL DEL SETB P1.0 CLR P1.1 ACALL DEL SETB P1.1 CLR P1.2 ACALL DEL SETB P1.2 CLR P1.3 ACALL DEL SETB P1.3 CLR P1.4 ACALL DEL SETB P1.4 CLR P1.5 ACALL DEL SETB P1.5 CLR P1.6 ACALL DEL SETB P1.6 CLR P1.7 ACALL DEL SETB P1.7 DJNZ R1,LOOP SJMP LOOP1LOOP1: CLR P1.7 ACALL DEL SETB P1.7 CLR P1.6 ACALL DEL SETB P1.6 CLR P1.5 ACALL DEL SETB P1.5 CLR P1.4 ACALL DEL SETB P1.4 CLR P1.3 ACALL DEL SETB P1.3 CLR P1.2 ACALL DEL SETB P1.2 CLR P1.1 ACALL DEL SETB P1.1 CLR P1.0 ACALL DEL SETB P1.0 DJNZ R2,LOOP1 LOOP3: CLR P1.0 CLR P1.1 CLR P1.2 CLR P1.3 CLR P1.4 CLR P1.5 CLR P1.6 CLR P1.7 ACALL DEL SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 ACALL DEL DJNZ R3, LOOP3M: CLR P1.0 ACALL DEL CLR P1.7 ACALL DEL CLR P1.1 ACALL DEL CLR P1.6 ACALL DEL CLR P1.2 ACALL DEL CLR P1.5 ACALL DEL CLR P1.3 ACALL DEL CLR P1.4 ACALL DEL SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 SETB P1.6 SETB P1.7 ACALL DEL DEL: MOV R7,#04FHDEL1: MOV R6, #04FHDEL2: MOV R5, #01BHDEL3: DJNZ R5, DEL3 DJNZ R6, DEL2 DJNZ R7, DEL1 RET LJMP MAIN PLC 三、原理图: 布线图如下 六、实训体会与自我评价: 本设计成品是以单片机AT89C51芯片为核心部件,实现了单一灯的左移右移重复循环3次。然后左移2次,右移2次,闪烁2次(延时0.2秒)的功能。此次设计在软件、编写程序方面花费时间太多我们上网找资料,上图书馆,尽可能多的了解流水灯控制的相关知识。通过这一周的综合实训(单片机课程设计),熟练掌握了Keil C51集成开发环境的使用方法,了解并掌握到单片机芯片的烧写方法与步骤,进一步加深了对单片机常用指令的理解与运用。能够较熟练的运用Protel 99 SE绘制电路原理图及PCB图,对PCB板的一般制作过程有了一定的了解。在实训过程中,使我得到了一次用专业知识、专业技能分析和解决问题、全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。 同时在老师的悉心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域对我今后进一步学习计算机方面的知识有极大的帮助。使我们认识到课程的重要性,同时也感受到理论与实践之间的差距,使我们对单片机系统的应用有了更加深刻的认.
相似回答