第一篇:流水灯实训总结
流水灯实训总结
1.实训目的: I.II.III.掌握单片机的硬件结构;
理解一个完整的单片机系统是由硬件和软件组成的。学习流水灯的基本原理。
2.实训内容: I.II.III.IV.在Proteus仿真软件平台上输入单片机硬件电路。
在keil软件仿真平台上输入源程序,并进行编译、生产机器码。在Proteus仿真软件平台上加载机器码,并进行仿真。下载程序到实验板的单片机,通电运行,试验其功能。
3.器件清单:
AT89C52: 1片 ; 晶振12MHHz:1个; 电容30pF:2个; 电容104pF:1个;
电阻10k:1个;
电阻270:8个; 发光二极管:8个; 4硬件电路:
5程序流程:
6.程序代码:
7.实验步骤:
I.在Proteus仿真软件中建立硬件电路,并保持;
II.在keil开发环境中编辑源程序,并保持;
III..在keil开发环境中编译源程序,生成hex文件;
IV.在Proteus仿真软件中选择单片机芯片,并加载hex文件; V.在Proteus进行仿真;
VI.如果仿真不符合要求,重复以上步骤。如果仿真符合要求,通过下载装置将程序下载到实验板单片机芯片中并观察;
VII.如果硬件不符合要求,检查电路,并重复以上步骤。如果符合要求,即实训结束; 8.产品照片
9.实训总结:通过这次实验我对单片机系统还有汇篇语言有了一定的认识和了解!也加深了对单片机的兴趣。通过这次实训争强了我的动手能力。对单片机的掌握也熟悉了!
第二篇:流水灯实验报告(范文)
单片机流水灯试验
一、实验目的:
1、进一步熟悉Keil C51集成开发环境调试功能的使用
2、学会自己编写程序,进行编译、仿真调试
3、学会使用单片机的P0口作为I/O口去控制外围电路,实现LED灯以固定的频率进行闪烁。
二、实验设备:
1、PC机
2、SW-51PROC单片机综合实验平台
三、实验内容:
1、编写一段程序,用单片机P0口的8个输出去控制8个LED灯,实现如下功能:
先使8个LED灯轮流点亮,从左向右移动,时间间隔0.5s。以上过程循环实现。
四、实验步骤:
1、实验原理:
单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。A寄存器的位经过rr a之后转换如下所示:
A0A1A2A3A4A5A6A7 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。
2、实验电路图 +5v1234123412340a1a2a3a4a1a2a3a4a1a2a3a4GND0Vcc1P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7b1b2b3b***C51
3通过仿真实验正确性
代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP
DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1
DJNZ R1,DEL2 RET End ORG 0000H LJMP MAIN
4、实验程序 :
ORG 0050H MAIN:MOV R0,#14
MOV DPTR,#TABLE L0:
MOV A,#0 L1:
MOVC A,@DPTR+A
MOV P0,A
ACALL DELAY1
INC A41 DJNZ R0,L1 SJMP L0 DELAY1:
MOV R1,#250 LOOP1:
MOV R2,#250 LOOP2:
NOP
NOP
NOP
NOP
NOP
DJNZ R0,LOOP2
DJNZ R1,LOOP1
RET TABLE: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH END
5、实验结果:
五、实验总结
这次试验我通过Proteus仿真实现对流水灯功能的实现。受益匪浅,对80c51的功能和结构有了深层次的了解,我深刻的明白,要想完全了解c51还有一定距离,但我会一如既往的同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序的却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错。
第三篇:流水灯实验报告
单片机流水灯实验
一、任务
让8个LED灯轮流亮起来,实现流水灯的功能。
二、思路
让接在P0.0口的LED灯亮起来,那么只要把P0.0口的电平变为低电平就可以了;相反,如果要接在P0.0口的LED灯熄灭,就要把P0.0口的电平变为高电平就可以了。要实现流水灯功能,只要将8个LED灯依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
我们应该注意一点,由于单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
三、步骤
1、用proteus画电路图。如下图:
2、用keil建工程。
1)运行keil C51软件,点击Project菜单新建项目,选择为AT89C52的单片机型号。然后单击File选择New新建程序文件,保存成.c 文件,右击Source Group1添加入程序文件。2)用C语言编写程序代码如下:
#include
void main(void){ unsigned char i;while(1){ for(i=0;i<8;i++){
P0=tmpled[i];
delay(50);} } }
void delay(unsigned char tmp){ unsigned char i,j;i=tmp;while(i){ i--;j=255;{
j--;} } } 3)右击Target 1打开设置,Output菜单下勾选上create hex file。
4)调试运行程序后,在proteus中双击单片机,添加hex文件,运行看到流水的的效果。
四、实验中遇到的问题。
1、用proteus仿真时候,发现错误:
error variable not found parsing property resistance of RN1-Rnvalue expected for RN1-R(n=1~8)而且led灯亮度十分微弱。可能是接入的电阻太大了。
检查电路图发现排阻的值为RX8,修改为220(自己选择)后。错误便没有了,同时,led灯的亮度也增强了。
2、关于延时函数。
延时的时间计算不太明白。
3、P0=0xfe;是对单片机P0口的8个I/O口同时进行操作,0x后的数使用十六进制表示,fe转换为二进制是1111 1110,则P0.0为低电平,对应的led灯亮,其他7个led灯灭。
第四篇:多功能流水灯实验报告
课程设计报告
设计课题:
多功能流水灯
专业班级:
学生姓名:
指导教师:
设计时间:
题目 多功能流水灯
一、课程设计目的
1、掌握数字系统的设计方法和测试方法。
二、课程设计题目(问题)描述和要求
设计一个四模式三路彩灯(红、绿、黄三种颜色)显示系统。该系统的显示模式由外部输入Z、Y控制,要求开机自动置入初态后便按规定模式循环运行。设各路彩灯均为8个(红灯序号为r1-r8,绿灯序号为g1-g8,黄灯序号为y1-y8),各模式规定如下: XY=00时,系统的显示模式在以下六个节拍间循环:
第一节拍,依次点亮奇号红灯(r1亮→r1、r3亮→r1、r3、r5亮→r1、r3、r5、r7亮),其余灯均灭。
第二节拍,依次点亮偶号红灯,其余灯均灭。第三节拍,依次点亮奇号绿灯,其余灯均灭。第四节拍,依次点亮偶号绿灯,其余灯均灭。第五节拍,依次点亮奇号黄灯,其余灯均灭。第六节拍,依次点亮偶号黄灯,其余灯均灭。XY=01时,系统的显示在第一、二节拍间循环。XY=10时,系统的显示在第三、四节拍间循环。XY=11时,系统的显示在第五、六节拍间循环。
三、系统分析与设计
根据课程设计题目问题描述和要求,完成:
主要器件:
绘制电路原理图:确定选用的元件及其封装形式,完善电路。
原理图设计过程:进行电子电路设计时,首先要有一个设计方案,而将电路设计方案表达出来的最好方法就是画出清晰、正确的电路原理图。根据设计需要选择出元器件,并把所选用的元器件和相互之间的连接关系明确地列出,直观地表达出设计概念。
电路原理图的基本组成是电子元器件符号和连接导线,电子元器件符号包含了该元器件的功能,连接导线则包含了元器件的电气连接信息,所以电路原理图设计的质量好坏直接影响到PCB印制电路板的设计质量。
绘制原理图的两大原则:首先应该保证整个电路原理图的连线正确,信号流向清晰,便于阅读分析和修改;其次应该做到元器件的整体布局合理、美观、实用。
在Protel中绘制电路原理图的步骤: 启动原理图编辑器,新建电路原理图文件。
设置原理图的相关参数,如图纸的大小、版面及环境参数等。加载元件库,在图纸上放置需要的各种元器件。编辑元器件的属性,并对元器件进行合理的布局调整。使用导线或网络标签对所有的元器件进行电气意义上的连接。对电路原理图进行整体的编辑、调整。保存文档,打印输出。
绘制元件库:为绘制原理图做补充。有些元件在系统库文件里可能找不到,我们可以自己动手绘制一个能表示实际元件的图形,并将其添加到原理图中。建议大家从一开始就建立一个属于自己的元件库,以后每设计一次电路,当遇到没有的原件时,就往库里添加一个元件,日积月累,自己的元件库就会充实起来,以后绘制原理图时就会非常方便。
绘制PCB封装:也是为设计原理图做补充。原理图上的元件仅仅是一个元件代号,我们可以随意改变其模样,但是PCB封装绝对不能随意改动。所谓封装,就是元件在PCB上的实际焊接点,如果焊接点与元件对应不上,那么这块板子就没用了。
对原理图进行编译:执行【项目管理】→【Compile Document ADAC.SCHDOC】,编译原理图文件。根据Massage面板中的错误和警告提示,修改原理图,直至编译通过,生成网络表。
在PCB编辑器中,执行【设计】→【层堆栈管理器】命令,选择PCB板层结构;执行【设计】→【PCB板形状】→【重定义PCB板形状】定义PCB的外观尺寸,设置PCB文件的编辑环境。
设置PCB的电气边界:在PCB编辑器中,单击【Keep-Out Layer】标签,执行【放置】→【禁止布线区】→【导线】设置PCB的电气边界。
更新PCB文件:在原理图编辑器内,执行【设计】→【Update PCB Document ADAC.PCBDOC】命令,生成【工程变化订单(ECO)】,在对话框内单击“使变化生效”按钮,再单击“执行变化”按钮,将网络表和元件封装载入到PCB文件中。
设置布线规则:在PCB编辑器中,选择【设计】→【规则】命令,在弹出的【PCB规则和约束编辑器】对话框中,重点进行元件间距、导线间距、导线宽度、焊盘大小、孔径大小等规则设置。
原件布局:自动布局(执行【工具】→【放置元件】→【自动布局】命令)和手工布局相结合,摆放元件到适当位置。
布线:计算机自动布线(执行【自动布线】→【全部对象】命令,并选择布线策略)或手工布线。
DRC(Design Rule Check设计规则检查)校验和违规项修改:执行【工具】→【设计规则检查】命令,在弹出的【设计规则检查器】对话框中,分别设置【Report Options】和【Rules To Check】文件夹下的相关选项,然后单击“运行设计规则检查”按钮,运行批处理DRC。
敷铜:执行【放置】→【覆铜】命令,在弹出的对话框中设置覆铜属性,包括填充模式、导线宽度、网格尺寸、连接网络及删除死铜等。
文件保存,输出打印:保存、打印各种报表文件及PCB制作文件。
2、将打印好的电路图纸通过高温印刷到已给的覆铜板上,再将电路板通过腐蚀制作成线路板,将线路板打孔。1)把图纸印刷到覆铜板上
四.系统调试过程中出现的主要问题
现有的元件库中没有设计所需的芯片元件库。为了解决这个问题,我上网寻找解决方案,并向老师请教,发现可以自己创建一个集成元件库。首先启动 protel dxp,在菜单中点击file—new—library--schematic library。新建一个原理图库文件。点击菜单file—save,为原理图库文件取个名字,然后自己选要用的图形和引脚,画至成功之后放置到sheet1.SchDoc文件中。
五.系统运行报告与结论 Pcb图如图所示
腐蚀好的电路板如图所示
六.总结
1、打开PCB编辑软件Proteus 7.4 的ARES。
在Proteus ISIS 编辑环境下,选择“Tools”--“ Netlist to ARES ” 或是单击工具栏中的图标按钮,即可进入PCB设计软件ARES界面。当然也可直接运行Proteus 7.4 ARES 软件进入其编辑界面。
放置焊盘
在编辑界面中应根据元件的引脚间距放置焊盘及元件所占空间的大小画元件的边框。
在ARES
软
件
界
面
中
点
击
左
侧工具栏中的或图标用于放置焊盘,这时在对象选择器中列出了所有焊盘的外径和内径的尺寸,我们选择S/C-70-30(其中S表示正方形焊盘,C表示圆形焊盘,70为焊盘的外径尺寸,30为内径的尺寸即钻孔直径)如下图:
如果列表中没有该尺寸的焊盘,可单击列表上的图标新建焊盘,在弹出的对话框中输入焊盘的名称及选择焊盘的形状后点击确定,如下图:
在接着弹出的对话框中设置好焊盘参数后单击确定即可完成焊盘的新建,如下图:
现在我们开始放置焊盘,将第一个焊盘放在原点处(即X=0;Y=0),如下图:
2、分配引脚编号
右键单击某一个焊盘,在弹出的下拉列表中选择“Edit Properties / 编辑属性”项,在弹出的“Edit Single Pin/编辑引脚”对话框中按下图进行设置。按照同样的方法可完成其它焊盘的设置。
3、添加元件边框
完成了焊盘放置,接着需要根据元件的实际大小添加边框。单击左侧工具栏中的并将左下
角
当
前
层
改
为
丝
印
图标,层,在编辑区内按照实际尺寸画一个元件边框,如下图
4、放置封装原点
点击左侧工具栏中的图标,在左侧列表框中选择“ORIGIN”,单击第一个焊盘,确定为封装的原点。如下图:
5、放置元件“REF”
在左侧列表框中选择“REFERENCE”,在元件边框中单击添加“REF”。如下图:
6、保存元件封装
单击右键并拖动鼠标指针,将整个设计完成的封装选中,然后选择“Library / 库” “Makepackage / 创建封装”菜单项,弹出创建封装对话框,按下图进行设置即可。
对电子工艺的理论有了初步的系统了解。我们了解到了测试普通元件与电路元件的技巧、印制电路板图的设计制作与工艺流程作用等。这些知识不仅在课堂上有效,对以后的电子工艺课的学习有很大的指导意义,在日常生活中更是有着现实意义。二.对自己的动手能力是个很大的锻炼。实践出真知,纵观古今,所有发明创造无一不是在实践中得到检验的。没有足够的动手能力,就奢谈在未来的科研尤其是实验研究中有所成就。在实习中,我锻炼了自己动手技巧,提高了自己解决问题的能力。
七.参考书目
1、Protel 2004电路设计入门与应用
2、Protel dxp
3、Protel99教程
第五篇:VerilogHDL流水灯设计
大规模数字逻辑
题目: 流水灯控制
专 业 电子信息科学与技术 班 级 学 号 学生姓名 设计时间 教师评分
2013年 12 月 10 日
目
录
一、概述.................................................1
二、设计目的.............................................1
三、设计内容.............................................1
四、设计原理图...........................................1
五、引脚分配情况.........................................2
六、源程序代码...........................................2 VerilogHDL 程序:.....................................2 分频器部分:..........................................5
七、心得体会.............................................6
八、参考文献.............................................6
一、概述
流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。
二、设计目的
1、熟悉利用Quartus II 开发数字电路的基本流程和Quartus II 软件的相关操作。
2、掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS进行下载等基本操作。
3、了解VerilogHDL 语言设计或原理图设计方法。
4、通过本此设计,了解流水灯的工作原理,掌握其逻辑功能及设计方法。
三、设计内容
1、用VerilogHDL语言设计一个流水灯,输入0的时候led~led7,1Hz正向流水3次,然后全亮;然后2Hz逆向流水5次全亮;循环。输入1的时候led0~led7,0.5Hz奇数流水2次,全亮,1Hz偶数流水4次,全亮,然后循环。
2、用QuartusII 软件进行编译,仿真,下载到实验平台进行验证。
四、设计原理图
en为可调输入,输出为8位数据,为流水灯实验,试用8个LED指示灯来表示,具体引脚分配见下。
五、引脚分配情况
六、源程序代码
VerilogHDL 程序:
module LED(clk,led,en);
input clk;
input en;
output [7:0]led;// 输出端口定义为寄存器型
reg [7:0] led;
reg [8:0] state1;
reg [8:0] state2;
always @(posedge clk)// always语句,表示每当CLK的上升沿到来时,完成begin-end之间语句的操作
if(!en)
begin state2 = 0;
state1 = state1 + 1;
// one clk,one state
case(state1)
1,2: led <= 8'b00000001;//1-7 zhengxu,3bian
3,4: led <= 8'b00000010;
5,6: led <= 8'b00000100;
7,8: led <= 8'b00001000;
9,10: led <= 8'b00010000;
11,12: led <= 8'b00100000;
13,14: led <= 8'b01000000;
15,16: led <= 8'b10000000;
17,18: led <= 8'b00000001;
19,20: led <= 8'b00000010;
21,22: led <= 8'b00000100;
23,24: led <= 8'b00001000;
25,26: led <= 8'b00010000;
27,28: led <= 8'b00100000;
29,30: led <= 8'b01000000;
31,32: led <= 8'b10000000;
33,34: led <= 8'b00000001;
35,36: led <= 8'b00000010;
37,38: led <= 8'b00000100;
39,40: led <= 8'b00001000;
41,42: led <= 8'b00010000;
43,44: led <= 8'b00100000;
45,46: led <= 8'b01000000;
47,48: led <= 8'b10000000;
49: led <= 8'b11111111;//quanliang
50: led <= 8'b10000000;
51: led <= 8'b01000000;
52: led <= 8'b00100000;
53: led <= 8'b00010000;
54: led <= 8'b00001000;
55: led <= 8'b00000100;
56: led <= 8'b00000010;
57: led <= 8'b00000001;
58: led <= 8'b10000000;
59: led <= 8'b01000000;
60: led <= 8'b00100000;
61: led <= 8'b00010000;
62: led <= 8'b00001000;
63: led <= 8'b00000100;
64: led <= 8'b00000010;
65: led <= 8'b00000001;
66: led <= 8'b10000000;
67: led <= 8'b01000000;
68: led <= 8'b00100000;
69: led <= 8'b00010000;
70: led <= 8'b00001000;
71: led <= 8'b00000100;
72: led <= 8'b00000010;
73: led <= 8'b00000001;
74: led <= 8'b10000000;
75: led <= 8'b01000000;
76: led <= 8'b00100000;
77: led <= 8'b00010000;
78: led <= 8'b00001000;
79: led <= 8'b00000100;
80: led <= 8'b00000010;
81: led <= 8'b00000001;
82: led <= 8'b10000000;
83: led <= 8'b01000000;
84: led <= 8'b00100000;
85: led <= 8'b00010000;
86: led <= 8'b00001000;
87: led <= 8'b00000100;
88: led <= 8'b00000010;
89: led <= 8'b00000001;
90: led <= 8'b11111111;
91: begin led <= 8'b00000000;state1=0;end
default: state1 = 0;
endcase
end
else
begin state1 = 0;
state2 = state2 + 1;
// one clk,one state
case(state2)
1,2,3,4: led <= 8'b00000001;
5,6,7,8: led <= 8'b00000100;
9,10,11,12: led <= 8'b00010000;
13,14,15,16: led <= 8'b01000000;
17,18,19,20: led <= 8'b00000001;
21,22,23,24: led <= 8'b00000100;
25,26,27,28: led <= 8'b00010000;
29,30,31,32: led <= 8'b01000000;
33: led <= 8'b11111111;
34,35: led <= 8'b00000010;
36,37: led <= 8'b00001000;
38,39: led <= 8'b00100000;
40,41: led <= 8'b10000000;
42,43: led <= 8'b00000010;
44,45: led <= 8'b00001000;
46,47: led <= 8'b00100000;
48,49: led <= 8'b10000000;
50,51: led <= 8'b00000010;
52,53: led <= 8'b00001000;
54,55: led <= 8'b00100000;
56,57: led <= 8'b10000000;
58,59: led <= 8'b00000010;
60,61: led <= 8'b00001000;
62,63: led <= 8'b00100000;
64,65: led <= 8'b10000000;
66: led <= 8'b11111111;
67:begin led <= 8'b00000000;state2=0;end
default: state2 = 0;
// default,8'b11111110
endcase
end Endmodule
分频器部分:
module clk_p(clk_out,clk_in);
input clk_in;
output clk_out;
reg clk_out;
reg[25:0] counter;//50_000_000=1011_1110_1011_1100_0010_0000_00
parameter cnt=25_000_000;/// 50MHz is the sys clk,50_000_000=2FAF080
always @(posedge clk_in)
begin
counter<=counter+1;
if(counter==cnt/2-1)
begin
clk_out<=!clk_out;
counter<=0;
end
end endmodule 5
七、心得体会
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。尤其是观察、分析和解决问题的实际工作能力。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。课程设计之后,我们普遍感到不仅实际动手说,这应该是个警示,在剩下的大学生活里,我应该好好珍惜,好好学习各方面的知识。
八、参考文献
[1] 全国大学生电子设计竞赛组委会.全国大学生电子设计获奖作品汇编[J].北京理工大学出版社,2005。
[2] 康华光.电子技术基础-数字部分[M].高等教育出版社,1998。[3] 谭会生等.EDA技术及应用[M].西安电子科技大学出版社,2001 [4] 潘松,等.EDA技术实用教程[M].科学出版社,2006 [5] 雷伏容 HDL电路设计[M].清华大学出版社,2006 [6] Charles H.Roth,等.数字系统设计与HDL[M].电子工业出版社,2008