1.1 课程设计目的

(1) 掌握labview的软件编程方法;

(2) 培养综合应用所学知识来指导实践的能力; 1.2 课程设计的任务

本次课程设计要完成一个十字交通灯的设计,这个交通灯系统能为东西和南北两个方向行驶的车辆指示能否通行。这个交通路口每一个方向上的红绿灯按绿—黄—红的顺序循环,每个循环的时间为60秒,其中红灯时间为30秒,黄灯时间5秒,绿灯时间25秒,当按下停止键时,循环停止。 1.3 课程设计的要求及技术指标

(1) 能够将现实生活中的交通灯出现顺序在电脑上面显示; (2) 要有时间现实; (3) 具有有好的人机界面; 1.4总体设计思路

此次设计可以用12盏灯来指示路口的红绿灯状况,他们分别是下文中的东西红

1、东西红

2、东西黄

1、东西黄

2、东西绿

1、东西绿

2、南北红

1、南北红

2、南北黄

1、南北黄

2、南北绿

1、南北绿2。

信号灯按一定规律循环点亮,每盏红灯亮30秒,每盏黄灯亮5秒,每盏绿灯亮25秒。每个循环包括四个阶段。第一阶段:南北绿(

1、2)和东西红(

1、2)亮25秒;第二阶段:南北黄(

1、2)和东西红(

1、2)亮5秒;第三阶段:南北红(

1、2)和东西绿(

1、2)亮25秒;第四阶段:东西黄(

1、2)和南北红(

1、2)亮5秒;中间放置一个时间计数器,用于观测时间的进行。

用计数器产生以秒为单位的计时信号,再将信号进行分段,每到一个时间段时时间系统进行相应的动作。

总体流程图如下:

1.5前面板的设计

前面板是VI的用户界面。创建VI时,通常应先设计前面板,然后在前面板上创建输入/输出任务。本课程设计总前面板的设计比较简单,需要用到12盏灯、一个时间显示器、一个停止键即可。其中的12盏灯,在控件选板中选择指示灯,将它放在前面板合适的位置,单击鼠标右键,更改指示灯的属性,改变指示灯的大小并设定颜色,做出一个合适的指示灯,再用框将每组灯框起来,做成一个交通灯。在每组交通灯合适的位置放置一个数值显示控件作为交通灯的计时器。在前面板合适的位置放置一个开关按钮,控制循环的启停。这样交通灯系统的前面板就做好了。

1.6 定时信号的产生

定时信号在程序框图中右键→执行过程控制→while循环中产生

由于i产生的时间频率过快,所以在程序框图中右键→执行过程控制→时间延迟,用于控制i产生时间的频率,防止过快,或者过慢,可自行控制。选中该图标,右键属性,设置配置时间延迟1秒。

1.7 为了更好的观察时间的变化,添加数值显示器

1.8 时间信号的分段

将得到的时间信号除以每个循环所用的时间60秒,取余数。得到的余数x的范围为0<=x<60,当0<=x<25时,条件满足,执行第一个条件结构里面的程序,东西红和南北绿灯亮。当25<=x<30时,条件满足,执行第二个条件结构里的程序,南北黄河东西红灯亮。当30<=x<55时,条件满足,执行第三个条件结构里的程序,东西绿和南北红灯亮。当55<=x<60时,条件满足,执行第四个条件结构里的程序,东西黄和南北红灯亮。

1.9 总控制程序

本设计采用的是编程方法控制红绿灯的亮灭,简单而又方便。在程序框图中右键→编程→公式节点,在该公式节点框中输入C语言程序,并设置输入输出节点;

2.0 类型转换

由于控制程序中设置的变量时整型,而指示灯是布尔型,所以需要在两者之间添加强制转换,以便于两者之间的连接。

通过新数据类型平化和还原,使x强制转换为某个类型。如函数无法转换数据而必须对其解释,Labview可使用临时缓冲区。 2.1 程序框图总体设计

2.2 各个工作阶段截图

第一阶段:0~25秒内,东西红和南北绿灯亮。

第二阶段:25~30秒内,东西红和南北黄灯亮。

第三阶段:30~55秒内,东西绿和南北红灯亮。

第四阶段:55~60秒内,东西黄和南北红灯亮

2.3 心得体会

此次课程设计圆满结束,对于我经过努力的结果,我感到非常满意。由于大家平时都是学习理论知识,没有过实际开发设计的经验,虽然上课的时候讲过很多LabVIEW的应用,但课后也从没真正地应用过这个软件,对它一点都不熟悉,拿到这个设计的时候都不知道怎么做。但通过对LabVIEW进行了几天的摸索学习,我终于把课程设计做好了,并发现LabVIEW很实用。通过这次课程设计我基本学会了虚拟仪器设计的步骤和基本方法,提高了动手能力,增强了理论联系实际的能力。

在这个课程实际中,我真正的感受到了虚拟仪器的优越性,“软件即仪器”,仅仅在LabVIEW上写入一些图形程序,就可以实现相应的仪器的功能,只需借助一台计算机,一个LabVIEW软件,就可以实现很多仪器的功能。

课程设计的过程中,我遇到不少的问题,但最终我还是战胜困难,取得了成功,当然其中很大一部分功劳都要归功于指导老师和同学们,如果没有指导老师和与同学们的相互交流学习,我的课程设计肯定不会如此轻松。总之,在这次课程设计中,我受益匪浅。

微机原理红绿灯课程设计报告

实验报告 2009-09-02 18:16:02 阅读1337 评论2 字号:

大中小

要:

介绍了基于8255A的交通灯系统设计方案,重点论述了软件系统的编写方法。实际结果表明该系统方案切实可行。

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结

构软硬件结合,加以完善。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用8255A芯片实现了A、B口设置红、绿灯点亮时间的功能;红绿灯循环点亮,红绿灯变换之间,黄灯闪烁5秒

关键字: 交通灯、软件系统

设计内容 本次课程设计是交通灯实时控制器,主要是用发光二极管模拟十字路口的红绿灯,如下图所示。交通灯控制器的设计与实现主要是通过编写汇编语言程序利用8255的A口和B口对灯的亮与灭进行控制。由于实验室的仪器上只有16个发光二极管,所以还得弄清楚是每个发光二极管所代表的灯的颜色及方向。16个发光二级管,且从高到低依次为:D15D14D13D12D11D10D9D8 D7D6D5D4D3D2D1D0。在设计的过程中做了如下的规定:R表示红灯,G表示绿灯,Y表示黄灯,E表示方向东,W表示方向西,S表示方向南,N表示方向北,D15D14表示ER,D13D12表示SR,D11D10表示EG,D9D8表示SG,D7D6表示WR,D5D4表示NR,D3D2表示WG,D1D0表示NG,D15D14D11D10表示EY,D7D6D3D2表示WY,D13D12D9D8表示SY,D5D4D1D0

表示NY。 交通灯控制示意图 具体时间的分配和控制如下:

东西方向绿灯亮,南北方向红灯亮,时间20秒 东西方向黄灯闪烁,南北方向红灯亮,时间5秒 东西方向红灯亮,南北方向绿灯亮,时间20秒 东西方向红灯亮,南北方向黄灯闪烁,时间5秒

设计器材设备 微机、TD-PIT++实验箱

实验电路图 设计流程图

总体设计过程

1.根据选择题目的要求,结合所参考的资料,选择8255单元芯片以及LED显示单元电路。

1)

电路元器件的选择 可编程并行通信接口芯片8255 2)

完成8255单元电路的设计及参数计算

8255的A口地址是:IOY0+00H*4

B口地址是:IOY0+01H*4 C口地址是:IOY0+02H*4 控制端口地址是:IOY0+03H*4

2.

软件流程图的设计 3.

电路接线图的设计 4.

软件的设计(程序见附录) 1)

芯片初始化,写8255的方式字 2)

延时,延时是通过设置指令的循环次数实现的 3)

东西方向绿灯亮,南北方向红灯亮,时间20秒 4)

东西方向黄灯闪烁,南北方向红灯亮,时间5秒 5)

东西方向红灯亮,南北方向绿灯亮,时间20秒 6)

东西方向红灯亮,南北方向黄灯闪烁,时间5秒

7) 判断是否有键按下 8)

返回到DOS 5.

进行软硬件调试

因采用了pc机和微机原理实验箱,硬件电路设计相对比较简单,利用微机实验箱上的8255并行口、发光二级管,便构成了交通灯控制系统。

心得体会

通过这次课程设计,加强了我的动手、思考和分析解决问题的能力。在整个设计过程中,我们按照老师给出的总体方案设计了一套电路原理和电路连接图。通过查阅各方面资料我们编写了程序代码,并通过了调试,最终证实了该系统

方案确实可行。 在设计过程中,了解了很多元器件的功能,并且对于其在电路中的使用有了更多的认识。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做,难免会遇到过各种各样的问题,同时也在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢

固。

这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能够真正掌握理论知识,从而提高自己的实际动手能力和独立思考的能力。

附录(程序代码)

IOY0 EQU 0E000H PORTA EQU IOY0+00H*4 PORTB EQU IOY0+01H*4 PORTK EQU IOY0+03H*4 STACK1 SEGMENT STACK DW 256 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE START: MOV AL, 80H MOV DX, PORTK ;8255工作在方式0,

A、B口均输出

OUT DX, AL MOV AL, 3CH MOV DX, PORTA ;A口东方向绿灯亮,

南方向红灯亮

OUT DX, AL MOV AL, 3CH MOV DX, PORTB ;B口西方向绿灯亮,

北方向红灯亮

OUT DX, AL CALL DELAY ;调用20s延时子程序

MOV CX, 5 START1: MOV AL, 0FCH MOV DX, PORTA ;A口东方向黄灯亮,

南方向红灯亮

OUT DX, AL MOV AL, 0FCH MOV DX, PORTB ;B口西方向黄灯亮,

北方向红灯亮

OUT DX, AL CALL DELAY1 ;调用0.5s延时子程序

MOV AL, 30H MOV DX, PORTA ;A口东方向黄灯灭,

南方向红灯亮

OUT DX, AL MOV AL, 30H MOV DX, PORTB ;B口西方向黄灯灭,

北方向红灯亮

OUT DX, AL CALL DELAY1 ;调用延时0.5s子程序

LOOP START1 ;CX≠0则循环

MOV AL, 0C3H MOV DX, PORTA ;A口东方向红灯亮,

南方向绿灯亮

OUT DX, AL MOV AL, 0C3H MOV DX, PORTB ;B口西方向红灯亮,

北方向绿灯亮

OUT DX, AL CALL DELAY ;调用20s延时子程序

MOV CX, 5 START2: MOV AL, 0F3H MOV DX, PORTA ;A口东方向红灯亮,

南方向黄灯亮

OUT DX, AL MOV AL, 0F3H MOV DX, PORTB ;B口西方向红灯亮,

北方向黄灯亮

OUT DX, AL CALL DELAY1 ;调用0.5s延时子程序

MOV AL, 0C0H MOV DX, PORTA ;A口东方向红灯亮,

南方向黄灯灭

OUT DX, AL MOV AL, 0C0H MOV DX, PORTB ;B口西方向红灯亮,

北方向黄灯灭

OUT DX, AL CALL DELAY1 ;调用0.5s延时子程序

LOOP START2 MOV AH, 1 INT 16H JZ START ;判断是否有键按下,无

按键则

QUIT: MOV AX, 4C00H 调回继续循环,有

则退出

INT 21H DELAY PROC NEAR ;20s延时子程序

PUSH CX PUSH DX PUSH BX

MOV BX, 3 MOV DX, 27880 LAB: MOV CX, 0FFFFH

LOOP $ DEC DX JNZ LAB DEC BX JNZ LAB POP BX

POP DX POP CX RET DELAY ENDP PROC NEAR ;0.5s延时子程序 PUSH CX PUSH DX MOV DX, 6970 LAB1: MOV CX, 0FFFFH DELAY1

LOOP $ DEC DX

JNZ LAB1 POP DX POP CX RET DELAY1 ENDP CODE ENDS END START

labVIEW课程设计--朱鹏

南通大学电气工程学院

labVIEW课程设计

课程小结

姓 名: 朱 鹏

班 级: 电 097 班

学 号: 0912002171

1 labVIEW课程设计--朱鹏

目 录

第一部分 基础题

第一题(1)................................................1 (2)...............................................2 第二题................................................... 2 第三题................................................... 3 第四题................................................... 4 第五题................................................... 5 第六题................................................... 6 第七题................................................... 7 第八题................................................... 8 第九题................................................... 9 第十题.................................................. 11 第十一题................................................ 12 第十二题................................................ 13 第十三题................................................ 15

第二部分 设计题

第一题.................................................. 16 第三题.................................................. 18

第三部分 心得体会........................................19 第一部分 基础题

2 labVIEW课程设计--朱鹏

第一题:

用LabVIEW的基本运算函数编写以下算式的程序代码:

2857x21007-683;

102-2563163253(2)178

13817.2-8.132(1)

解答:(1)

一、前面板截图:

二、程序框图截图:

三、设计过程:

在前面板添加一个数值显示控件,命名为“结果”。在程序框图中添加 加,减,乘,除函数,数值型常量,按上图连接,运行得出结果。

(2)

一、前面板截图:

3 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板添加一个数值显示控件,命名为“结果”。在程序框图中添加 加,减,乘,除函数,数值型常量,按上图连接,运行得出结果。

第二题:

利用摄氏温度与华氏温度的关系C=5(F-32)/9编写一个程序,求华氏温度F为

32、6

4、

4、98.6、

6、10

4、212时的摄氏温度.

解答:

一、前面板截图:

二、程序框图截图:

4 labVIEW课程设计--朱鹏

三、设计过程:

在前面板添加一个数值输入控件,命名为“华氏温度值”,添加一个数值显示控件,命名为“摄氏温度值”。在程序框图中添加公式节点并添加输入输出,转换公式为C=5*(F-32)/9 ,按上图连接,运行得出结果。

第三题:

用数组创建函数创建一个二维数组显示件,成员为:

编程将上述创建的数组转置为:

解答:

一、前面板截图:

5 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板添加数组,在数组中添加数值型显示控件,并拉到四行六列,命名为“输入数组”。用同样的方法在前面板添加两个数组输出,命名为“显示数组”和“转置后数组”。在程序框图中添加二维数组转置控件,按上图连接,运行得出结果。

第四题:

创建一个簇控制件,成员分别为字符型控制件姓名,数值型控制件学号,布尔型控制件注册。从这个簇控制件中提取出簇成员注册,显示在前面板上。

解答:

一、前面板截图:

6 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板中添加两个簇,分别命名为“输入簇” “输出簇”,在输入簇中添加字符串输入控件,数值型输入控件和布尔确定按钮,在输出簇中添加相应的输出控件。在程序框图中添加“按名称接触捆绑”和“捆绑”,按上图连接,运行得出结果。

第五题:

创建一个字符串显示件,程序运行后显示当前系统日期、时间和自己的班级、姓名。

解答:

一、前面板截图:

7 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板中添加四个字符串输出控件,分别命名为“当前系统日期”“时间”“班级”“姓名”,在程序框图中添加“获取日期/时间字符串”控件获取系统日期和时间,添加字符串常量“电097”“朱鹏”,按上图连接,运行得出结果。

第六题:

将范围0—10的5个随机数转换为一个字符串显示在前面板上,要求保留2位小数,每个数之间用逗号分隔。

解答:

一、前面板截图:

8 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板添加字符串输出控件,命名为“所得字符串”,在程序框图中添加for循环结构,循环五次,用随机函数发生器产生0~1的随机数,用乘法函数获得0~10的随机数,添加“数组至电子表格字符串转换”控件和“格式化写入字符串”控件,“%.2f,”设置格式,保留两位小数,

第七题:

用for循环产生4行100列二维数组,数组成员如下:

1,2,3………100

100,99,98………..1 6,7,8………….105 105,104,103………6

从这个数组中提取出2行50列的二维数组,成员如下:

50,49,48…………1 56,57,58…………105

将这两个数组用数组显示件显示在前面板上。

解答:

一、前面板截图:

9 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板添加数组,在数组中添加数值显示控件,拉到四行一百列,命名为“数组”,同理添加“子数组”。在程序框图中添加for循环,循环100次,通过“创建数组”控件输出数组,再通过“数组子集”获得子数组,按上图连接,运行得出结果。

第八题:

产生100个随机数,求其最小值和平均值。

解答:

一、前面板截图:

10 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板中添加三个数值显示控件,分别命名为“平均值”“最大值”“最小值”。在程序框图中添加for循环,循环100次,通过“数组元素相加”和除法函数获得平均值,通过“数组最大值与最小值”获得最大值和最小值。

第九题:

程序开始运行后要求用户输入一个口令,口令正确时滑钮显示件显示一个0—100的随机数,否则程序立即停止。

解答:

一、前面板截图:

11 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

12 labVIEW课程设计--朱鹏

在前面板中添加字符串输入控件,命名为“请输入口令”,数值显示控件,命名为“随机数”。在程序框图中添加条件循环,为真时通过随机函数发生器乘一百获得0~100的随机数,为假时通过“单按钮对话框”和“停止”输出ERROR。按上图连接,运行得出结果。

第十题:

编写一个程序测试自己在程序前面板上输入以下字符所用的时间,A virtual instrument is a program in the graphical programming language.

解答:

一、前面板截图:

二、程序框图截图:

13 labVIEW课程设计--朱鹏

三、设计过程:

在前面板中添加字符串显示控件,命名“输入字符串”,布尔确定按钮,命名“输入完成”,数值显示控件,命名“所需时间”。在程序框图中添加层叠式顺序结构并添加至三帧,在第一帧中添加时间计数器,并添加顺序局部变量,第二帧中,字符串输出,布尔确定按钮,第三帧中,时间计数器,减函数和除函数,数值显示。按上图连接,运行得出结果。

第十一题:

在一个chart中显示3条曲线,分别用红、绿、蓝3中颜色表示范围0—1,0—5和0—10的3个随机数。

14 labVIEW课程设计--朱鹏

解答:

一、前面板截图:

二、程序框图截图:

三、设计过程:

在前面板中添加波形图表,并建立三条曲线“0~1红”“0~5绿”“0~10蓝”。在程序框图中添加for循环结构,用随机函数发生器获得0~1的随机数,再通过乘法函数获得0~5和0~10的随机数,添加捆绑将三个随机数波形在一个波形图标中显示。按上图连接,运行得出结果。

第十二题:

用一个Graph显示下列计算的结果: y1=x*x*x-x*x+5;y2=m*x+b,X的范围是0—100

15 labVIEW课程设计--朱鹏

解答:

一、前面板截图:

二、程序框图截图:

三、设计过程:

在前面板中添加波形图表,幅值设置成0~1000000,并建立两条曲线“y1”“y2”,添加两个数值输入控件分别命名为“m”“b”。在程序框图中添加for循环结构,在for循环结构中添加公式节点,以“m”“b”作为输入,y1=x*x*x-x*x+5;y2=m*x+b;添加输出y

1、y2,通过捆绑将y

1、y2波形由波形图表输出。按上图连接,运行得出结果。

16 labVIEW课程设计--朱鹏

第十三题:

用XYgraph显示一个半径为10的圆。

解答:

一、前面板截图:

二、程序框图截图:

三、设计过程:

在前面板中添加XY图。在程序框图中添加for循环,循环次数为360,即360度一周,在for循环结构中乘法、除法函数,正弦、余弦,循环结果乘上2π/360通过正弦余弦捆绑后再乘上10后在XY图中输出图形。按上图连接,运行得出结果。

17 labVIEW课程设计--朱鹏

第二部分 设计题 设计题第一题:

设计一个VI程序模拟一个电压测量采样过程(随机数发生),从10ms开始每隔50ms采集一个点,共采集30个点,电压在采样前经过了一个信号处理电路的10倍衰减。要求程序的显示能够反映出实际的采样时间及电压值。

解答:

一、前面板截图:

二、程序框图截图:

18 labVIEW课程设计--朱鹏

19 labVIEW课程设计--朱鹏

三、设计过程:

在前面板中添加一个波形图表,幅值改为电压值,时间改为采样时间;水平进度条滑动杆,用于显示采集进度;布尔确定按钮、布尔停止按钮,用于开始和停止采集;一个数值输入控件输入电压上限值,三个数值显示控件,分别输出报警计数值、时间和电压值。在程序框图中添加一个while循环,在while循环中用确定、停止控制采集开始和停止,在while循环中添加条件结构,分支选择器接布尔确定,在条件结构中添加层叠式顺序结构,第一帧中添加for循环结构,循环次数为30,通过随机函数发生器产生模拟电压值,并输出波形,添加条件结构,分支选择器接电压上限与电压值的比较结果,若电压值超过电压上限,报警计数加1,若没超过则报警计数不变,通过等待控件产生50ms的延时。第二帧中添加单按钮对话框和停止控件,输出“30个点采样完毕”。按上图连接,运行得出结果。

设计题第三题:

设计一个VI程序,实现按帐号和密码登陆的人机界。若输入的帐号和密码相符,则显示欢迎登陆对话框,按“确定”退出程序;若输入的帐号和密码不相符,则显示出错对话框,按“确定”返回程序。

解答:

一、前面板截图:

20 labVIEW课程设计--朱鹏

二、程序框图截图:

三、设计过程:

在前面板中添加两个字符串显示控件,命名为“账号”“密码”。在程序框图中添加条件结构,分支选择器连接账号和密码分别和设定值比较是否相等后逻辑与后的结果,若为真,通过单按钮对话框输出“欢迎登陆”,若为假,通过单按钮对话框输出“账号或密码错误”。

第三部分 心得体会

通过一星期的LabVIEW课程设计,对一学期来学习的LabVIEW的基本操作和编程技巧有了进一步的掌握,LabVIEW作为一门新式的以图形化编程的语言,不仅提供了简单易学的编程方法,而且提供了海量的可调用的模块,涉及到各个方面。LABVIEW应用领域广泛,我们可以十分方便地找到各种适用于测试测量领域的LabVIEW工具包。这些工具包几乎覆盖了所需的所有功能,在这些工具包的基础上设计程序相对于其他编程方法显得容易多了,这也让我对这门课程产生了更加浓厚的兴趣。LabVIEW包含多种多样的数学运算函数,特别适合进行模拟、仿真、原型设计等工作。在设计机电设备之前,可以现在计算机上用LabVIEW搭建仿真原型,验证设计的合理性,找到潜在的问题。使用LabVIEW进行软件模拟,可以达到同样的效果,使我们获得实践的机会,

21 labVIEW课程设计--朱鹏

同是也大大缩短程序开发时间。

通过一个学期的学习,我深刻地体会到LabVIEW的高效,对这种编程语言有很大的兴趣。在课程设计的这样一星期里,我把教材又看了一遍,还在网上查了不少资料,从中学到了大量的技巧。不过在设计过程中也越来越感到, LabVIEW入门很容易,深入做下去,完成一个像样的工程,还得懂得各方面的知识,进一步的学习和掌握。这是一门实践性很强的课程,很多知识是从书上看来的,而且看完之后,自己还觉的不错,觉得自己已经掌握的很好了,但真到实际做东西的时候,就会觉得困难重重,这时再去查书,便有了对知识的更深层次的理解。

22

数字电路课程设计

(一)

——红绿灯设计方案总结报告

指导教师:

设计人员:

班级:电信081

日期:2010.4.13

一、 设计任务书

1、题目:

红绿灯控制器

2、设计要求:设计一个红绿灯控制器设计应具有以下功能

基本设计要求:设计一个红绿灯控制器控制器设计应具有以下功能 (1)东西方向绿灯亮,南北方向红灯亮。. (2)东西方向黄灯亮,南北方向红灯亮。

(3)东西方向红灯亮,南北方向绿灯亮。

(4 ) 东西方向红灯亮,南北方向黄灯亮。 要求有时间显示(顺数、逆数皆可),时间自定。(大于15秒以上)

二、 设计框图及整机概述

本课程设计在继承了原有的红绿灯的基本功能的基础上,有对其功能进行了很大的完善,其中主要包括:

(1)可以对大小路口的绿灯及黄灯任意置数。

(2)在倒计时3~0秒期间,当时正在点亮的绿灯或黄灯会进行闪烁。

正是由于拥有了这两个功能,使得电路稍显复杂,现在将分别讲解其设计思路。

本电路大体上可以分为四个部分,即:赋值电路部分、控灯闪烁部分、控制部分和核心计数部分。

其中,赋值电路部分占据了大量的空间和芯片,其主要原理是数据选择。控灯闪烁部分的芯片较少,也没有占用太多空间,控制部分分布在系统的各个部分,可以说是系统的灵魂,它对整个系统进行着控制。核心计数部分比较简单,主要是进行计数并且产生进位信号。

三、各单元电路的设计方案及原理说明

(一) 赋值电路部分

赋值电路的设计是整个电路设计最复杂的一个环节,其主要问题主要集中在(1)对于一个计数器的数据输入端,如何使之在不同时刻数据不同,即:如果假设绿灯为30秒,黄灯5秒,在对绿灯倒数计数时,则计数器的输入端应该为30,在置数信号到达时即可将其置数到输出端,并可开始计数。而当这30秒将要倒数完成时,又要考虑将输入端数据变成05(2)如果设计成任意输入数据,将以何种方式进行输入。

在设计这部分的电路时我首先想到的是第二个问题,开始阶段我所采用的是74LS151,同时决定给每一位个数据分配一个控制开关,但是,问题显而易见,开关太多了……粗略估计了一下,大概需要四十个左右……所以显然方案不行。之后想到了可以用脉冲的方法对计数器进行计数,即通过对计数器的CLK端不断的接高低电平,以达到将想要赋的数存储在计数器中的目的。就是利用的这种不断开起闭合开关的方法,从而将需要赋给核心计数部分的数据先储存起来。完成这部分功能的器件,我选择了74LS160和开关若干。

经过上面的叙述,已经了解了如何将想要实现的大路小路的各种灯的点亮描述输入进来,以及输入系统之后的储存原理。下面所要讲述的是如何将已经输入到系统中,并暂时储存的数据,分时段赋给计数部分份的原理。

从我的原理图可以看到,左侧有四个模块,每个模块由若干个74LS160和74LS153组成,且线路是相互垂直连接的,其中上面两个模块负责的是对黄灯和绿灯时间的计数,现以这两部分进行讲解。74LS153的作用是对已经存储在74160中的数据进行选择。设上数第一个模块为模块A,第二个为模块B。A的作用是对秒的十位进行赋值,B的作用是对秒的个位进行赋值。现以实例讲解:设要求输入大路口绿灯25秒,黄灯04秒,小路口绿灯15秒。同时可以得出,小路口红灯30秒,大路口红灯20秒。则在模块AB中的74LS160从上到下所存储的数据为2(0010)、1(0001)、5(0101)、4(0100)、5(0101)。AB中的数据选择器负责对这些数据进行选择,并输出给计数部分。当数据选择器中的输入端AB为00是,即输出所有AB中的数据选择器的1*0,2*0项,即,A模块通过两个153将输出0010(2),并赋给负责计秒数十位的核心计数部分的74190.B模块通过两个153将输出0101(5),即,此时的核心计数部分负责绿灯黄灯秒数的计数器74190的输入端0010 0101 (25),只要给一个合适的信号使其置数到输出端,即可开始进行倒数计数,当倒数到3秒时,将会给控制部分一个信号,使之经过一系列处理之后会使AB中的74153中的输入端由00变为01,这样,会使数据选择器中的1*1,2*1项全部输出,以此类推,就会实现在同一块计数器上的不同数据计数。

(二)控灯闪烁部分

控灯闪烁部分可以说是本电路的另一个亮点,本人只用了三个或门和两个74LS48就完成了这部分的设计。在设计之初,问题主要集中在让其闪烁的信号从哪里来。经过思考,我想到,如果能有一种电路,它在使能端为1时能够正常的将数据从输入送到输出,而在使能端为零时则能过将输出端置零。这样,将6个灯的信号通过这种原件,在平时倒数计数时,信号可以正常通过,即对亮灯是没有影响的,而当倒数计时到达三秒时,则会通过控制部分,使得使能端的信号变为一个脉冲,即,脉冲为1时,灯照常亮,而当脉冲为0时,电路的输出端被清零,灯熄灭,当脉冲再次为1 时,输出端又将拥有输入端的数据,即,刚刚熄灭的等又会亮,由此下去,在3~0秒期间,脉冲不断的作用于使能端,从而使得灯不断的亮灭,以达到闪烁的目的。

有了基本的原理后,其主要的问题是(1)选择那种芯片?(2)使能端的信号怎么来保证?(3)如果只解决了上述的两个问题的话,会出现一个问题,就是当倒数到3~0期间,所有在该时刻的点亮的灯是都会闪的,这其中也包括了红灯。而显示中,红灯是不需要闪烁的,因此,需要一种控制电路来完成在不同时刻,哪个会闪烁而哪个不会闪烁。

对于问题一,最初,我所想到的芯片是可以异步清零的计数器芯片,但是,要用其完成在使能端使之正常工作时,输入输出相当于通路的功能显而易见十分困难。之后,又想到了74LS48,之所以想到了这块芯片,主要是因为它能够灭0。但是,7448的主要功能是一个为LED所搭配使用的译码器,这时,如果要想上述的输入输出一样的功能的话,就需要去研究其功能表。经过研究发现,确实存在这样的输入输出端,从而使得这块芯片得以利用。当然,研究这个功能表大概花费了我两个小时的时间。

对于问题二,主要采用的是将一个脉冲信号与一个控制信号通过或门,并将输出接在使能端的方法,具体是,当倒数计数不3~0之间时,控制信号为0,即或门的输出仅仅决定于脉冲信号,这样,在0~3秒期间,灯会闪烁。而不在这个时间范围内时,控制信号会为1,即输出到使能端的信号一定为1。这样,就很好解决了信号问题。

对于问题三,如果按问题二的解决办法,就会出现红灯闪烁的现象,我上面之所以会这么说是便于理解的缘故。实际上,还要将或门的输出端分别连入两个或门,让这两个或门的输出与两个芯片的使能端相连接。而这两个或门的另一个输入,则是其对应芯片红灯的反馈信号,即,如果这个芯片上的红灯会点亮,即为高电平时,这个连接在对应芯片使能端的或门输出信号会恒为1,而如果通过这个芯片的红灯信号为0(黄灯或绿灯亮),即红灯没有点亮,输入到或门的信号为0,这样,脉冲信号就可以输入进入使能端,这样,就完成了合理闪烁的功能。

(三)核心计数部分

核心计数部分我采用的是四片74LS190,其中,两片为一组,分别负责绿灯黄灯的计数和红灯的减法计数,该部分比较简单,需要注意的是计数器输出端在控制电路部分充当了反馈的作用,十分重要。

(四)控制部分

对于控制电路,我运用了大量的反馈以及状态的扩展。所谓的状态的扩展就是说,每当特定的端口产生进位信号时,其进位脉冲都会对与其相连的计数器产生计数信号,这样,不同的数据就代表了不同的状态。控制部分就是根据这些不同的状态对特定电路进行控制的。

四.调试过程及结果分析

开始阶段,置零开关是全部打开的,要注意的是,在运行到45秒后,一定要将这7个开关打开才可以在之后正常工作

由于该设计的电路过于复杂,无法采用EWB进行很好的连线,因此我选用了ISIS进行模拟操作。模拟过程中,出现了许多的问题,同时也纠正了我的一些错误,例如,在赋数电路中,开始我所想到的方法存在很大的问题,其设计并不被软件所认可。

经过我的努力,实验结果完全正确,并没有出现问题,这主要与我的赋值电路的稳定,和控制信号的稳定有关。

五.设计、安装及调试中的体会

这次设计我的收获颇丰,首先,本人的学习宗旨就是实践,平时的学习都是尽可能的以实践为基础,这次课程设计,使我的平日所学知识得到了很好的检验,对可以说是对数字电路课程的一次完整的复习。其次,课程设计绝对不是应付差事,而是要给自己设立一个高标准,并且在设计中不断的进行完善,就像我的这个红绿灯一样,实现能够随意置数和闪烁绝非易事,在不断的完善自己的设计方案和不断的提高要求的过程中,更能锻炼自己的思维能力。再次,通过这次学习,使我对数字电路这门课程有了更加深入的认识,例如,在对于一些芯片的应用上,绝对不能只是简单的按其的基本用法进行操作,而是要通过研究其真值表不断的挖掘出新的功能,在本设计中,我就采用了74LS151 74LS138代替了部分门电路的功能,这样不仅对电路进行了简化,而且也更加的稳定易懂。同时,我对74LS48的应用也是十分的巧妙,这些都是通过对其功能表的研究得出的结论。最后,在设计的过程中,我充分的感受到了设计的乐趣,不断给自己增加难度的过程并不是对自己的苛刻,而是发自内心的希望能够做的更好,这样的心理让我并不急于应付差事,从而学到了更多的知识。

在实际的模拟调试阶段,我感觉到了理论与实际的巨大差距,明明已经理论很完美的设计,在实际仿真时却漏洞百出。例如,在课堂上。对于计数器的级联,课本并没有涉及太多的知识,而在实际应用模拟时,却总是出现很多问题。还有,对于几个逻辑门的串联也知识停留在理论上的可行阶段,实际上在模拟时候就会在输出变成高阻态。

总之,这次的课程设计,尤其是这个红绿灯的课程设计,让我体会到了很多东西,在不断推敲设计方案时,不仅对所学知识有了全新的认识,同时也对设计产生了浓厚的兴趣。还有就是通过这个设计,我也熟练掌握了ISIS这个软件。可以说,如果用心去做课程设计的话,收获一定会很大。

六.对本次课程设计的意见及建议

本次课程设计虽然学到了很多,但是我仍然觉得课程设计本身存在一些问题: 1

我个人觉得课程设计的题目设计稍有不合理,因为,首先来讲,做一个基本功能的红绿灯应该并非难事,如果只是按照基本的要求去做,要是专心的话基本一两天就搞定,很简单,例如,控灯的话,我只有一块一位寄存器外加两个或门就可以完成。对于第二个任意选择的题目来说,更是比红绿灯简单。两个题目都不是很难,我觉得与其说做两个都不是很难的题目,还不如去做一个复杂一点的题目。当然,每个人的能力不一样,因此,我建议可以出三道难度不同的题目由学生自由选择,根据题目的等级和学生的完成情况对其评分。

本次课程设计要求的软件为EWB,但是EWB操作起来并不是很方便,尤其是对复杂电路的布线,如果出现错误,那么乱的线,根本无法进行检查。

总的来说,本次课程设计使我学到了很多东西。在今后的学习中我将再接再厉,争取取得更好的成绩!

附录:原件清单:74LS160 11

74LS153 8

74LS190 4

74LS138 1

74LS48

74LS151 3

基于labview的定时器程序设计

目录

1. 程序设计背景„„„„„„„„„„„„„„„„„„„„„„„„„„3

1.1. labview定时器的介绍„„„„„„„„„„„„„„„„„„„„„3

2. 程序介绍„„„„„„„„„„„„„„„„„„„„„„„„„„„„3

a、主要用途和功能„„„„„„„„„„„„„„„„„„„„„„„4

b、前面板图和主要部件的功能„„„„„„„„„„„„„„„„„„„5

c、程序框图„„„„„„„„„„„„„„„„„„„„„„„„„„„6

3. 程序改进„„„„„„„„„„„„„„„„„„„„„„„„„„„„8

4. 程序界面及层次关系„„„„„„„„„„„„„„„„„„„„„„9

5. 存在的一些问题„„„„„„„„„„„„„„„„„„„„„„„„10

6. 程序来源说明„„„„„„„„„„„„„„„„„„„„„„„ 10

1

1.程序设计背景

定时器在家用电器中经常用于延时自动关机、定时。延时自动关机用于:收音机、电视机、录音机、催眠器、门灯、路灯、汽车头灯、转弯灯以及其他电器的延时断电及延时自停电源等。定时可用于:照相机曝光、定时闪光、定时放大、定时调速、定时烘箱、冰箱门开定时报警、水位定时报警、延时催眠器、延时电铃、延时电子锁、触摸定时开关等。例如空调中的定时器,在工作一段时间后便能自动切断电源停止工作。夏季夜间使用,入睡前先设好预定时间,等睡熟后到了预定时间,空调自动关机。方便节能。定时器除了应用于家电之外 还广泛应用于工农业生产和服务设施,军事等。 发展前景

传统的定时器大多数是发条驱动式、电机传动式或电钟式等机械定时器,部分电子器械中也有试用时间继电器的。相对于传统的定时器,电子定时器的体积小,重量轻。造价低。精度高、寿命长,而且安全可靠,调整方便,适于频繁的使用。同时随着现代电子技术的不断发展,定时器也在不断更新,朝着更多用途,更高精度,更小体积发展着。

Labview的定时器:

1.为什么要使用定时: 一般来说在循环中,我们都会添加一个定时器。他们的作用主要有2 个:

1. 控制代码执行的速率:简单的来说,如果在循环中添加了定时,就可以控制循环以一定间隔重复执行;或者在串口通信中,在发送指令后等待指定的时间再读返回值。

2. 降低CPU 占用率:如果没有设置定时,CPU 的大部分资源会一直被该线程占用, 而无法执行其他线程。

2 2.定时VI 用法:

在LabVIEW 中的常用定时有等待(ms)倍毫秒

1. 等待(ms)

该VI 的输入端为整型,单位是ms。指定代码执行的时间间隔。举例来说,连入VI 的输入为10ms,如果循环中代码的运行时间是3ms,那么每次循环的时间是10ms;如果循环中代码的运行时间是14 毫秒(大于10ms),那么每次的循环的时间是14ms。

(Windows 下软件定时的精度在1 个ms 左右,所以实际的情况会有1ms 左右的误差)

2. 等待到下一个整数倍毫秒

该VI 输入为整型,单位是ms。该VI 将定时和系统的时钟对应起来,使用该定时VI 后,代码将在系统时钟为定时时间的整数倍执行。 使用该定时VI 的第一次运行时间间隔是不确定的。比如设定定时为1000ms, 对于第一次运行,无论当前时间是50ms 还是850ms,都将在下一次1000ms 的整数倍时间第二次运行该代码,那么实际的间隔分别是950ms 和150ms。

3.定时的精度: 对于上面提到的定时VI,输入的单位都是ms,但是实际运行的最小间隔在2ms 以上。这是因为Windows 操作系统中,对线程的操作最小的间隔是2ms。

4.使用定时的注意事项:

在使用等待到下一个整数倍毫秒时需要注意,当该VI 处于等待状态时,整个线程都将处于等待状态。在对时间要求较高的实时系统中,往往不可以简单的将该定时VI 和代码并行的放置。 。

,和等待到下一个整数程序介绍

a、主要用途和功能

3 在测量过程中,有时需要测量、记录数据在2小时内的分布情况(稳定性、波动性);有时需要每10分钟测量一次数据并保存结果。这就需要有一个定时器或倒计时器来控制测量的过程,利用“已用时间”快速vi做了一个既有"定时"功能又有“倒计时”功能的vi,基本上满足应用程序的设计要求。

该vi的定时精度不是很高,大概在正、负1s左右,基本上可以满足工程上的使用要求。

b、前面板图和主要部件的功能

定时时间选择——这是一个枚举控件,用来选择定时或倒计时的时间间隔。设计时定义了一些常用时间的数据列表。

定时器(倒计时器)——这是一个开关控件,用来选择是定时功能还是倒计时功能。开始计时后将被灰化(运行时不可再操作)。

停止(开始)——这是一个开关控件,用来控制是否开始计时。开始计时后将被灰化(运行时不可再操作)。

定时持续时间——这是一个字符显示控件,用来实时显示定时或倒计时的时间间隔数值。

强行停止计时——这是一个开关控件,用来强行停止计时过程(退出计时)。

c、程序框图

整个程序框图

程序在执行时,首先通过选择按钮,选择是定时器模式还是倒计时模式,然后经过每局按钮确定定时时间,再按下开始,若在定时器模式下,则定时显示时间从0递增到枚举选择的时间,此过程中按钮变灰,不可用,到点时,由开始转为停止,所有键可用。倒计时器模式与此过程大致相同,唯一不同便是计数从预设值递减为0。程序在执行过程中可用确定强制退出键退出。

计时的功能由“已用时间”实现,枚举的数值为其上限,在定时器模式,已用时间直接输出到格式化日期,再到时间显示控件。在倒计数器模式,已用时间输出数据先与枚举数做减法运算,在输入到格式化日期。

中断循环由已用时间的结束输出、强行停止键、过程错误输出三者通过逻辑与接到中止键。

程序改进

上述程序过于简单,现做改进如下:

6 1.

将枚举控件用一个数值输入控件代替,这样就可以自行确定定时或倒计时的时间,从而扩大了程序适用的范围。(注意输入的数值以分钟记)

2. 为了更好的达到倒计时预警的效果,现加入LED灯进行倒计时小于10时的显示,从而更加直观,鲜明,同时为了不影响程序的观看效果,LED灯只在倒计时的最后10秒出现,其余情况皆为不可见。

7 3. 在程序设计中使用属性节点,比如本例中:利用属性节点将程序运行过程中的操作限定在唯一性上,可以降低操作者的误操作可能性。本程序运行时,要么等待定时结束,要么由操作者强行停止计时。

4.

新增一个图片下拉表,它的可视性与LED灯的情况相同。

5当定时时间到时,发出声音报警。 整体程序图

程序界面

存在的一些问题

本程序的定时显示精确性不高,例如LED灯的数字无法做到同步显示等等。 程序来源说明

本文原程序来源于http://tieba.baidu.com/p/1585935847 9

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐