流水灯实验

时间:2024.4.13

           流水灯实验

1.引言

    当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

学习单片机的最有效方法就是理论与实践并重,现在我把单片机流水灯设计作为一个毕业课程设计,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。2.任务描述及设计方案

2.1任务描述

    设计流水灯控制电路,使连接在该电路上的8个发光二极管按顺序以次闪烁。

2.2设计方案

实现此功能有两种方案,一种是使用传统的模拟电路,另一种是用单片机控制的电路。我们选择单片机控制系统。其中系统工作原理为:

    在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水” 效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样就可以实现“流水”效果。

3.硬件设计方案

3.1 设计思路

如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

3.2交通灯控制系统电路原理图

1234图 3-1 流水灯系统工作原理图

3.3 主要元件功能说明

按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。其具体硬件组成如图3-1所示。

4.1 程序流程图

                        图 4-1 主程序流程图

4.2 程序清单

                   ORG 0000H

                   JMP MAIN

                   ORG 0100H

           MAIN:  MOV  A,#01111111B

           LOOP1:  MOV  P1,A

                   CALL  DELAY

                   RR  A

                   JMP    LOOP1

    DELAY:  MOV  R2,#10

                   MOV  R0,#200

          DL3:     NOP

          DL1:     MOV  R1,#250

          DL2:     DJNZ  R1,DL2    

                   DJNZ  R0,DL1

                   DJNZ  R2,DL3

                   RET

                   END

4.3 proteus软件仿真

在proteus软件仿真之前必须在Proteus里面画出硬件的外部接线图,接下来装入程序,然后组建生成HEX文件,接下来就可以运行仿真了,如图4-3。

125

图4-3 仿真图

5. 设计总结

通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。而安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。尤其是观察、分析和解决问题的实际工作能力。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。课程设计之后,我们普遍感到不仅实际动手说,这应该是个警示,在剩下的大学生活里,我应该好好珍惜,好好学习各方面的知识。在单片机方面也是了解了一些些,我相信这次课程设计会对我以后的工作通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西。


第二篇:实验2、流水灯控制实验


实验2、数码管显示实验

【实验目的】

1、 学习LPC系列处理器GPIO口的使用方法;

2、 学习用Keil软件开发ARM程序方法和步骤。

3、 学习7SEG数码管的驱动原理。

4、 学习74HC595驱动数码管的编程方法。

【实验要求】

1、  了解LPC系列处理器GPIO口的功能原理;

2、  在Keil中设计ARM程序,实现对7SEG数码管的控制,和利用74HC595对数码管驱动的驱动程序的编写;

3、  附加要求:请在数码管显示数组里面实现0——F循环显示(程序一)

【实验原理】

1、LPC系列处理器GPIO口的原理

PINSEL(x)     管脚功能选择寄存器

IOPIN(x)  GPIO引脚值寄存器

IOSET(x)  GPIO输出置位寄存器

IODIR(x)  GPIO方向控制寄存器   

IOCLR(x)  GPIO输出清零寄存器

2、实验电路原理图

实验电路的连接如下图,LED1和LED2是利用74HC595进行驱动显示[74HC595的三个控制信号SDI(数据输入)、SCLK(时钟控制)、LOAD(数据显示)分别接到p0.27---p0.29],LED8 COMMON AONDE用GPIO口的P1.18到P1.25来控制的。输出低电平则LED点亮,输出高电平则LED熄灭。

 本次实验的实质原理同第一次试验,对数码管的驱动实际上也是对LED的驱动,因为数码管的各个段也是一个LED灯,所以大家只要明白了哪个管脚对应于哪个LED,就可以实现用数码管显示不同的数字。

4、  程序代码

(1)

#include<lpc23xx.h>

#define led (0xff<<18)//指定P1.18到P1.25

typedef unsigned int uint8;

typedef unsigned long uint16;

const uint8 DISP_TAB[3]={0xdb,0x12,0xe3};//数码管显示数组

void Delay(uint16 t)   //延时函数

{

   while(t--);

}

int main()

{

uint8 i;

IODIR1=(0xff<<18); //设置P1.18到P1.25为输出

while(1)

{

for(i=0;i<3;i++)

{

IOSET1=led;         //先输出高电平使数码管各段全部熄灭

IOCLR1=(DISP_TAB[i]<<18); //输出显示内容

Delay(10000000);  //延时输出

}

}

}

(2)

/*本实验的重点在对74HC595的驱动(show_seg_char()函数功能),其余的同上一个程序,观察显示,上网查找74HC595和74LS595的资料,分析显示结果*/

#include<lpc23xx.h>

#define SDI_SEG   1<<27  //指定p0.27

#define SCLK_SEG  1<<28 //指定p0.28

#define LOAD_SEG  1<<29  //指定p0.29     

typedef unsigned int uint8;

typedef unsigned long uint32;

typedef unsigned char uchar;

void Delay(uint32 t)  //延时函数

{

while(t--);

}

                                                  

void init_seg(void) //初始化连接数码管的端口

{

   PINSEL1 =PINSEL1&0x003fffff;  //选择GPIO 功能

   IODIR0 |=0x0f<<27;                 // 端口为输出

}

  void show_seg_char(uchar data)  //显示一位数字

{

        uchar i;

           IOCLR0=LOAD_SEG;         //锁存数,可从寄存器通过 ,可输入74HC595内的寄存器

              IOCLR0=SCLK_SEG;         //上升沿采样

             for(i=0;i<8;i++)

        {

            

           if((data&0x80)==0x80) //先发高位

                    IOSET0=SDI_SEG;

              else 

                  IOCLR0=SDI_SEG;

                     IOSET0=SCLK_SEG;   //上升沿

                     data=data<<1;

                  IOCLR0=SCLK_SEG;

                   

         }

        

         IOSET0=LOAD_SEG;             //显示数据  

         }

int main()

{

uchar tab[18]={0x24,0x6f,0x38,0x2a,0x63,0xa2,0xa0,0x2f,0x20,0x23,0x21,0xe0,

               0xb4,0x68,0xb0,0xb1,0xff,'\0'};     //  最后一个数据0xff为全灭

uint8 i;

init_seg();

while(1)

{

for(i=0;i<18;i++)

{

show_seg_char(tab[i]);

Delay(10000000);

}

}

}

附(来自网上):

74HC595  数码管驱动 

74HC595使用总结

74HC595外形图

         

 QB --|1              16|--Vcc

 QC --|2              15|--QA

 QD --|3              14|--SI

 QE  --|4              13|--/G

 QF  --|5              12|--RCK

 QG  --|6              11|--SCK

 QH  --|7             10|--/SCLR

  GND-|8               9|--QH'

           

74595的数据端:

QA--QH: 八位并行输出端,可以直接控制数码管的8个段。

QH': 级联输出端。我将它接下一个595的SI端。

SI: 串行数据输入端。

74595的控制端说明:

/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。

SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)

RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。

/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

//这个引脚不管是否用到,都要给他下拉。否则显示会不稳定,万一上拉,将没有任何显示。

注:74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。

74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。

与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态

更多相关推荐:
单片机实验报告——流水灯

电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡**学号:*********一、实验目的:进一步熟悉keil仿真软件、prote…

流水灯设计与总结报告

流水灯设计与总结报告摘要近年来随着电子技术和微型计算机的发展呢单片机的档次不断提高应用领域也不断扩大已在工业控制尖家电汽车电子系统端科学智能仪器仪表日用办公自动化设备个人信息终端及通信产品中得到广泛的应用成为现...

流水灯实验报告

实验报告课程名称单片机实习专业班级姓名戴秀锋学号1104451216电气与信息学院和谐勤奋求是创新1234实验教学考核和成绩评定办法课内实验考核成绩严格按照该课程教学大纲中明确规定的比重执行实验成绩不合格者不能...

单片机流水灯实验报告

单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用USBISP烧录软件的操作方法5帮...

流水灯实验报告

扬州大学广陵学院课程设计报告设计题目流水灯设计姓名学号100036137班级时间20xx年7月4日目录一设计任务与要求3二实验目的3三实验思路31系统逻辑设计32源程序代码3LED流水灯控制模块4分频器5四位选...

流水灯实验报告

单片机流水灯实验一任务让8个LED灯轮流亮起来实现流水灯的功能二思路让接在P00口的LED灯亮起来那么只要把P00口的电平变为低电平就可以了相反如果要接在P00口的LED灯熄灭就要把P00口的电平变为高电平就可...

流水灯实验报告

实验一流水灯实验一实验目的1简单IO引脚的输出2掌握软件延时编程方法3简单按键输入捕获判断二实验实现的功能1开机时点亮12发光二极管闪烁三下2按照顺时针循环依次点亮发光二极管3通过按键将发光二极管的显示由顺时针...

流水灯实验

流水灯实验黄博杰电信3班2220xx315220xx3一实验目的1熟悉Quartus的软件的操作2编写流水灯程序基本掌握时序逻辑电路的编写方法二实验原理所谓流水灯就是让LED灯的亮灭模拟流水按照顺序使LED灯依...

msp430流水灯实验

includequotio430hquotunsignedcharLEDunsignedinta8BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT7intmainvoidStopwatchdogtimertoprev...

流水灯实验

LiaoningNormalUniversity单片机实验项目题目流水彩灯学院物理与电子技术学院专业电子信息工程班级序号03学号20xx1121020xx920xx1121020xx9学生名称程磊尹元元指导老师...

流水灯实验

华北电力大学实验报告实验名称课程名称专业班级自动化1203学生姓名孟令虎黄琰淦学号20xx09020xx620xx020xx306成绩指导教师张妍老师实验日期20xx511一实验目的1熟练掌握开发板的使用方法和...

左右来回循环的流水灯实验报告

青岛科技大学微机原理与接口技术综合课程设计(报告)题目_直流电机控制综合实验指导教师__________________________学生姓名__________________________学生学号___…

流水灯实验总结(21篇)