拨码开关控制流水灯实作报告

合集下载

流水灯控制实验报告及程序

流水灯控制实验报告及程序

流水灯控制实验报告及程序实验三流水灯控制实验姓名专业通信工程学号成绩一、实验目的1.掌握Keil C51软件与protues软件联合仿真调试的方法;2.掌握如何使用程序与查表等方法实现流水效果;3.掌握按键去抖原理及处理方法。

1、实验仪器与设备1.微机1台2. Keil C51 集成开发环境3. Proteus 仿真软件二、实验内容1.用Proteus设计一流水灯控制电路。

利用P1 口控制8个发光二级管L1 —L8。

P3.3 口接一按键K1。

参考电路如下图所示。

其中74LS240为八反响三态缓冲器/线驱动器。

2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。

若用KEY表示按键的次数,则其对应的流水效果如下:①KEY=0: L1-L8 全亮;②KEY=1 : L1-L8先全灭,然后自右向左单管点亮,如此循环;③KEY=2 : L1-L8先全灭,然后自右向左依次点亮,如此循环;④KEY=3 : L1-L8先全亮,然后自左向右依次熄灭,如此循环;⑤KEY=4 : L1-L8先全灭,然后整体闪烁,如此循环;⑥KEY=5 :自行设计效果。

以上移位及闪烁时间间隔均设置为0.3秒,按动5次按键后,再按键时,流水效果从头开始循环。

四、实验原理1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如下图所示。

由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。

因而在闭合及断开的瞬间均伴随有一连串的抖动。

抖动时间的长短由按键的机械特性决定,一般为5?10ms按键抖动会引起一次按键被误读多次。

为了确保CPU寸键的一次闭合仅做一次处理,必须去除按键抖动。

在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。

按键的抖动,可用硬件或软件两种方法消除。

常用软件方法去抖动,即检测到按键闭合后执行一个5?10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。

流水灯实验报告总结

流水灯实验报告总结

流水灯实验报告总结一、实验目的本次流水灯实验的主要目的是通过实际操作,深入理解数字电路中时序逻辑电路的工作原理,掌握基本的硬件电路设计和编程方法,提高我们对电子电路的实践操作能力和问题解决能力。

二、实验原理流水灯是通过控制一系列发光二极管(LED)依次点亮和熄灭,从而产生一种流动的视觉效果。

其实现的核心原理是利用计数器和译码器来控制 LED 的亮灭状态。

在数字电路中,计数器可以对输入的时钟脉冲进行计数,从而产生不同的计数值。

译码器则将计数器输出的计数值转换为对应的控制信号,使得相应的 LED 点亮或熄灭。

例如,使用常见的 74LS161 四位二进制同步计数器和 74LS138 三线八线译码器,可以构建一个简单的八路流水灯电路。

计数器在时钟脉冲的驱动下不断计数,译码器根据计数器的输出值依次选通不同的输出端口,从而实现 LED 的顺序点亮。

三、实验设备及材料1、数字电路实验箱2、 74LS161 计数器芯片3、 74LS138 译码器芯片4、发光二极管(LED)若干5、电阻、电容等基本电子元件6、杜邦线若干7、数字万用表8、示波器四、实验步骤(一)电路设计1、根据实验原理,在实验箱上规划好芯片的布局和连线方式。

2、使用杜邦线将计数器、译码器和 LED 等元件按照设计好的电路连接起来。

3、注意连接的正确性,避免短路和断路现象。

(二)硬件搭建1、仔细对照电路设计图,将芯片插入实验箱的相应插槽中。

2、确保芯片引脚与插槽接触良好,无松动现象。

(三)编程与调试1、使用数字电路实验箱提供的编程工具,对计数器和译码器进行编程设置。

2、例如,设置计数器的计数模式、初始值等参数。

3、打开电源,观察 LED 的亮灭情况。

4、如果流水灯效果不符合预期,使用数字万用表和示波器等工具检测电路中的信号和电压,排查故障。

五、实验中遇到的问题及解决方法(一)LED 不亮1、问题描述:接通电源后,所有 LED 均不亮。

2、排查过程:首先检查电源是否正常,然后使用万用表测量芯片引脚的电压,发现计数器芯片没有正常工作。

STM32实验-GPIO输出-流水灯实验报告

STM32实验-GPIO输出-流水灯实验报告

课程实验报告学院:专业: 2018年10月18日姓名学号班级指导老师课程名称嵌入式系统原理与应用实验成绩实验名称GPIO输出-流水灯1.实验目的通过一个经典的跑马灯程序,了解 STM32F1的IO口作为输出使用的方法。

通过代码控制开发板上的4个 LED灯交替闪烁,实现类似跑马灯的效果。

2.实验内容工程文件建立、程序的调试,编译、jlink驱动的安装与配置、程序下载、实验结果验证。

3.实验环境Windouws10 Keil uVision5 4.实验方法和步骤(含设计)(1)实验硬件连接图四个led灯如图连接到GPIO的6~9引脚上。

(2)软件分析使用到的GPIO端口需配置为输出模式,使用推挽(PP)模式输出,IO口速度为 50MHz。

(3)实验步骤①建立工程文件:导入程序运行需要的库,加入主程序,调试运行环境,使程序可以成功被编译和运行且没有错误和警告。

②安装JLINK驱动程序,点击下载按钮将程序烧写进开发板中。

③检查led灯是否逐一顺序点亮,能够通过调整程序使点亮顺序改变。

(4)原函数5.程序及测试结果6.实验分析与体会如果4个LED灯是与A口的PA1、PA2、PA3、PA4相连,将led.c文件中的“GPIOC”改为“GPIOA”,并将Pin_X改为对应的1~4脚。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9);改为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);实验日期: 2018 年 10 月 18 日成绩评定教师签名:年月日Welcome To Download欢迎您的下载,资料仅供参考!。

实验二流水灯报告

实验二流水灯报告

一、任务分析1、了解 CPU 对 I/O 口的操作方法。

2、学会使用 51 系列单片机 I/O 口的基本输入、输出功能。

3、连接实验系统上的单片机 I/O 口、开关及 LED 灯,设计一个简易流水彩灯。

拨动开关 K1、K0 分别实现 4 种不同的流水彩灯工作方式:二、设计思路1、先对P3.0和P3.1口置1;2、将P3.0和P3.1的值读入寄存器A中;3、判断P3.0和P3.1口的值,由于两个按键有四种组合方式,所以P3.0和P3.1的值分别为00、01、10、11;通过JB跳转程序来判断哪个按键按下;按键按下的不同分别跳转到不同的子函数中;4、通过P3.0和P3.1的值分别跳转到设置P1口工作状态的四个子程序中;5、四个子程序中分别是LED灯闪烁的四种方式,用SETB P1.X 的方式来让LED灯点亮,还应写有Delay函数,Delay函数中设置延时为0.5ms;用CLR的方式来让LED灯灭。

若要让LED全亮或全灭,则对P1口整体赋值。

三、程序流程图图一程序流程图四、实验程序ORG 0030Hmain:SETB P3.0SETB P3.1;未按下按键MOV A, P3ANL A ,#03HMOV R0, #7;MOV R1 ,#7;MOV R2, #7Delay:MOV R6, #1000LP2:MOV R7,#500LP:DJNZ R7,LPDJNZ R6, LP2;延时程序CJNE A,#00H,Moshi1;不等跳到Moshi1,相等则顺序往下执行Moshi0Moshi0:MOV A,#80H ;10000000Next:RR A ;左循环MOV P1,A ;00000001ACALL DelayDJNZ R0,Next ;循环七次Next0:RL AMOV P1,AACALL DelayMOV R0, #7DJNZ R0, Next ;循环七次MOV A, P3 ;A的值改变了要赋值回来,判断语句ANL A ,#03HCJNE A,#01H,Moshi2 ;相等才往下执行,Moshi1:CJNE A,#01H,Moshi2 ; 相等则顺序往下执行MOV A,#01H ;0000 0001MOV P1,#01HNext1:RL A ;0000 0010ORL A,P1 ;或:0000 0011MOV P1,A ;A和P1与完之后结果放到P1里面MOV R0,#07HDJNZ R0, Next1 ;循环七次MOV P1 ,#00HMOV A, P3 ;A的值改变了要赋值回来,判断语句ANL A ,#03HCJNE A,#10H,Moshi1 ;相等才往下执行,Moshi2:MOV P1, 0FFHACALL DelayACALL DelayMOV P1, 0FEH ;11111110ACALL DelayMOV A,P1 ;A 11111110Next2:RL A ; A 11111101ANL A,P1 ;A 11111100MOV P1,ADJNZ R0,Next2 ;循环操作 A 11111100左移后11111001&P1:11111100=11111000;循环9次以后应该需要再判断一次状态。

单片机跑马灯(流水灯)控制实验报告

单片机跑马灯(流水灯)控制实验报告

单片机实验报告姓名: 学号:一、 实验实现功能:1:计数器功能2:流水灯二、 具体操作:1、计数器功能数码管的动态显示。

每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。

2、流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms 。

三、 程序流程图开始 定时器T0 设置初值,启动定时器,打开中断复位 Key2按下 中断关闭 计数器模式 计数器加1 Key3按下 流水灯模式 数码管显示数字加1 跑马灯点亮间隔50ms Key1按下中断打开四、程序#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16; //类型定义sbit P2_1 = P2^1;sbit P2_2 = P2^2;sbit P2_3 = P2^3;sbit P2_4 = P2^4; //位声明四个数码管开关sbit Key2 = P3^2;sbit Key3 = P3^3; //位声明2个按键K2和K3sbit Ledk = P2^0 ; //LED 开关void delay(uint16 i); //延时函数声明void refresh (); // 数码管刷新函数声明void liushuideng(); //流水灯函数声明uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管的真值表uint8 out[4] = {0}; // 数组变量uint16 counter=0; //用作计数器的变量uint16 Time_counter=0; //用作定时器的变量void main() //主函数{TMOD = 0x01; //定时器0,工作方式一TH0 = 0xFC;TL0 = 0x18; //定时器初值使每次循环为1msTR0 = 0; //定时器0开始作ET0 = 0; // 定时器中断关EA = 0; // 关中断while(1) //计数器模式{Ledk =1 ; //led开关关out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位if (!Key2) //计数器加1{++counter; //自加out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位while(!Key2) //等待键盘抬起refresh(); //刷新数码管}refresh(); //刷新数码管if (!Key3) // 进入跑马灯模式liushuideng();}} //主函数结束/*******************延时*************/void delay(uint16 i){uint8 j; // 定义局部变量for(i;i>0;i--) //循环i*240 次for(j=240;j>0;j--);}/************数码管刷新******************/void refresh (){uint8 j;for (j=0;j<4;j++) //四次循环刷新数码管{switch(j){case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管default:break;}P0 = out[j]; // 位选,给数码管送值delay (20); //延时消抖}}/*************定时器的中断服务函数**************/void Timer0_Overflow() interrupt 1 //定时器0溢出中断,这个语句1ms执行一次{TH0 = 0xFC;TL0 = 0x18; //每1ms重新赋定时器初值Time_counter++; //计数,看经过了几个1ms}/***********************流水灯子函数****************************/ void liushuideng(){uint8 j = 0 ; //定义局部变量P0 = 0xff; // 小灯全关TR0 = 1; //定时器1开始计时EA = 1; //中断开放ET0 = 1; //定时器0中断开while(1){Ledk = 0 ; //打开LED开关P2 = P2|0x1E; //关掉数码管if(50 == Time_counter) //50个毫秒{P0=~(1<<j++); //控制小灯Time_counter = 0; //清零开始下一次循环定时}if (8==j) //移完8次再重新移{j=0;}}}。

流水灯实验报告单(3篇)

流水灯实验报告单(3篇)

第1篇实验名称:流水灯实验实验日期:2021年10月25日实验地点:实验室实验者:张三一、实验目的1. 了解流水灯的原理和组成;2. 掌握流水灯的制作方法;3. 培养动手能力和团队合作精神。

二、实验原理流水灯是一种通过改变电路中各个灯泡的连接方式,实现灯光顺序变化的电子装置。

其原理是利用555定时器产生一个周期性的方波信号,通过控制方波信号的占空比,实现不同灯泡的顺序点亮。

三、实验器材1. 555定时器1个;2. 集成电路板1块;3. 灯泡4个;4. 电阻4个;5. 电池1节;6. 导线若干;7. 万用表1个;8. 电烙铁1把;9. 剪线钳1把。

四、实验步骤1. 制作电路板:将555定时器、电阻、灯泡等元件焊接在电路板上。

2. 连接电路:将电池的正负极分别连接到电路板的电源端,将555定时器的输出端分别连接到灯泡的正极,将灯泡的负极分别连接到电路板的GND端。

3. 测试电路:使用万用表测量555定时器的输出电压,确保输出电压在正常范围内。

4. 调整占空比:通过改变电阻的阻值,调整555定时器的占空比,实现不同灯泡的顺序点亮。

5. 验证实验:观察流水灯的运行情况,确认实验是否成功。

五、实验结果与分析1. 实验成功:通过调整电阻的阻值,实现了4个灯泡的顺序点亮,实验成功。

2. 分析:在实验过程中,我们发现调整电阻的阻值可以改变555定时器的占空比,从而改变灯光的顺序。

当电阻阻值增大时,占空比减小,灯光点亮速度变慢;当电阻阻值减小时,占空比增大,灯光点亮速度变快。

六、实验结论通过本次流水灯实验,我们掌握了流水灯的原理和制作方法,提高了动手能力和团队合作精神。

实验结果表明,通过调整电阻的阻值,可以实现不同灯泡的顺序点亮,达到流水灯的效果。

七、实验反思1. 在实验过程中,我们发现电路板焊接过程中容易出现短路现象,因此在焊接过程中要仔细检查,确保电路板焊接正确。

2. 在调整电阻阻值时,要注意观察灯光的变化,以便找到最佳的电阻阻值。

多功能流水灯实验报告

多功能流水灯实验报告

多功能流水灯实验报告第一篇:多功能流水灯实验报告课程设计报告设计课题:多功能流水灯专业班级:学生姓名:指导教师:设计时间:题目多功能流水灯一、课程设计目的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印制电路板的设计质量。

绘制原理图的两大原则:首先应该保证整个电路原理图的连线正确,信号流向清晰,便于阅读分析和修改;其次应该做到元器件的整体布局合理、美观、实用。

浙江工业大学指示灯和拨码开关控制实验报告

浙江工业大学指示灯和拨码开关控制实验报告

实验四指示灯和拨码开关控制实验报告姓名:郑永翔班级:通信1103 学号:201103110330实验目的1. 了解 ICETEK-VC5509-A 板在 TMS320VC5509DSP 外部扩展存储空间上的扩展。

2. 了解 ICETEK-VC5509-A 板上指示灯和拨码开关扩展原理。

3. 学习在 C 语言中使用扩展的控制寄存器的方法。

实验内容指示灯实验①拨码开关控制实验②指示灯实验①的程序和原理分析指示灯控制寄存器地址为400001h通过外部存储器(EMIF)接口寻址在0x400001上的4个led单元的值(控制字,逐位置1: 0001B 0010B 0100B 1000B),当led对应位置1时led等亮起,通过控制正向和反向的写入控制字来循环点亮led灯。

#include"func.h"// 定义指示灯寄存器地址和寄存器类型#define LBDS (*((unsigned int *)0x400001))// 子程序接口void Delay(unsigned int nDelay); // 延时子程序main(){unsigned int uLED[4]={1,2,4,8}; // 控制字,逐位置1: 0001B 0010B 0100B1000Bint i;PLL_Init(72); // 初始化DSP运行时钟SDRAM_init(); // 初始化EMIF接口while ( 1 ){for ( i=0;i<4;i++ ){LBDS=uLED[i]; // 正向顺序送控制字Delay(256); // 延时}for ( i=3;i>=0;i-- ){LBDS=uLED[i]; // 反向顺序送控制字Delay(256); // 延时}}}void Delay(unsigned int nDelay){int ii,jj,kk=0;for ( ii=0;ii<nDelay;ii++ ){for ( jj=0;jj<1024;jj++ ){kk++;}}}拨码开关控制实验②的程序和原理分析指示灯控制寄存器地址为0x400001拨码开关控制寄存器地址为0x4000020x400002为扩展地址,四位拨码器开关闭合时该地址对应位置0,打开置1 取0x400002内容后复制给0x400001地址控制led灯,原理如同①#include"func.h"// 定义指示灯控制寄存器地址和寄存器类型#define LBDS (*((unsigned int *)0x400001))// 定义拨码开关控制寄存器地址和寄存器类型#define DIPS (*(unsigned int *)0x400002)main(){// PLL_Init(12); // 初始化DSP运行时钟SDRAM_init(); // 初始化EMIF接口while ( 1 ){LBDS=DIPS; // 读取拨码开关状态直接送指示灯显示}}实验结论1. 映射在扩展存储器空间地址上的指示灯寄存器在设置时是低4 位有效的,数据的最低位对应指示灯D1,次低位对应D2,...依次类推。

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

《拨码开关控制流水灯》实作报告
班级:姓名:
一、任务描述:
利用一只拨码开关控制流水灯的流动方向。

拨码开关往上拨动时,流水灯自左往右流动,拨码开关往下拨动时,流水灯自右往左流动。

流动速度不限。

往上拨动
往下拨动
二、要完成本次任务,你需要把以下问题搞清楚:
1、硬件连接:
根据任务描述,共需要根导线连接LED灯,根导线连接拨码开关。

共需要根导线。

2、程序设计:
(1)实验箱上拨码开关往上拨动时输出电平,用数字来表示。

往下拨动时输出电平,用数字来表示。

(2)本例程序(需要/不需要)导入头文件<reg51.h>?
提示:是否用到了I/O口,P0、P1、P2或P3
)本例程序(需要<intrins.h>?
提示:是否需要移位,有要求做流水灯效果吗?
)本例程序(需要
(5)本例程序对流水灯流动速度不作要求,(需要/不需要)延时子函数。

(6)本例程序(需要/不需要)对某些引脚进行位定义(单独使用)?有的话,是哪些脚?
(7)利用(if/while/for)基本语句和逻辑运算符来判断拨码开关当前状态是往上拨动,还是往下拨动;利用(if/while/for)基本语句来反复扫描拨码开关的状态。

(8)流水灯的三要素是:P1=a;
yanshi(数值);数值大小决定的led的
a=_cror_(a,1);或=_crol_(a,1);
3、把程序补充完整(假定拨码开关接P2.0脚,LED接P1脚)
#include< > //导入头文件,方便寻址//
# include< > //导入头文件,便于使用移位指令//
#define unsigned int //宏定义,简化程序//
void yanshi(uint); //声明子函数//
sbit k= ; //位定义单独使用的引脚//
uint a=0x ; //设置流水灯初值//
void main() //主函数//
{
(1) //死循环//
{
if(k= = ) //判断拨码开关状态//
{
P1= ; //将a值送给P1口//
yanshi( ); //延时//
a=_crol_(a,1); //a向左移动一位//
}
if(k= = ) //判断拨码开关状态//
{
P1= ; //将a值送给P1口//
yanshi( ); //延时//
a=_cror_(a,1); // a向右移动一位//
}
}
}
void yanshi(uint x) //延时子函数//
{
uint i,j;
for(i=x;i>0;i--)
for(j= ;j>0;j--);
}。

相关文档
最新文档