51单片机流水灯实验报告单片机实验报告流水灯.pptx
51单片机流水灯实验报告
51单片机流水灯实验报告51单片机流水灯实验报告引言:51单片机是一种常用的微控制器,广泛应用于各种电子设备中。
流水灯实验是学习单片机编程的基础实验之一,通过控制多个LED灯的亮灭顺序,可以了解单片机的基本原理和编程方法。
一、实验目的本实验旨在通过使用51单片机,设计并实现一个简单的流水灯电路,加深对单片机原理的理解,掌握基本的单片机编程方法。
二、实验原理51单片机是一种8位微控制器,具有强大的功能和广泛的应用。
流水灯实验中,我们需要控制多个LED灯的亮灭顺序,通过编写程序,将指令发送给单片机,控制LED灯的亮灭。
三、实验器材1. 51单片机开发板2. LED灯若干3. 面包板4. 连接线四、实验步骤1. 将51单片机开发板连接到电脑上,打开开发板的编程软件。
2. 在编程软件中,新建一个工程,选择适合的单片机型号。
3. 编写程序,设置相应的引脚为输出模式,并配置流水灯的亮灭顺序。
4. 将单片机开发板与面包板连接,将LED灯连接到相应的引脚上。
5. 将编写好的程序下载到单片机中。
6. 打开电源,观察LED灯的亮灭顺序是否符合预期。
五、实验结果与分析经过实验,我们成功地实现了一个简单的流水灯电路。
LED灯按照设定的顺序亮灭,形成了流水灯的效果。
通过调整程序中的指令顺序,我们可以改变LED灯的亮灭顺序,实现不同的流水灯效果。
六、实验心得通过这次实验,我对51单片机的原理和编程方法有了更深入的了解。
流水灯实验是一种简单但基础的实验,通过实际操作和编程,加深了我对单片机的理解和掌握。
在实验过程中,我遇到了一些问题,如LED灯连接错误、程序逻辑错误等,但通过仔细检查和调试,最终成功解决了这些问题。
这次实验让我更加熟悉了单片机的应用,为以后更复杂的项目打下了基础。
七、实验拓展在掌握了基本的流水灯实验后,我们可以进一步拓展实验内容。
例如,可以增加控制开关,实现对流水灯的启停控制;可以设计不同的流水灯效果,如闪烁、变速等;还可以与其他传感器、模块进行组合,实现更多功能和效果。
实验二流水灯报告
一、任务分析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;}}}。
基于51单片机的流水灯实训报告
4、焊接完了,还要对电烙铁进行保护措施——在电烙铁的笔头抹上一层锡,防止笔头被氧化!
周二
1、上午跟下午都是进行实物焊接。看着电脑上面的仿真电路图来一步步焊接,还要在脑海里边想象这样子焊接能否做到不用飞线,到最后又能让人看起来一目了然,清晰明了的感觉!不会看起来很混乱的联想图!所以,焊接是一个很考验人的耐性跟思维能力的功夫!在单片机的P0端口,接数码管的时候,要接上一个排阻来保护电路,因为在单片机内部除了P0端口,其它端口都有接内部电阻,所以,一定要在P0端口外接一个排阻来保护电路!
周五
我都在努力着完成最后一步工作,把程序下载到单片机中,刚开始的时候,经常出现CPU跟MCU握手失败,程序无法载入单片机中。我努力想到底哪里出错了,后来在一个同学的帮忙下,终于找到了出现问题的地方,就是数码管的1脚还没有与单片机的21脚焊接上。经过一会的补救,终于完成了!
总程序:
#include<reg51.h>
后来,老师就教我们編数码管的程序,然后结合流水灯的程序,通过修改后,仿真到模拟电路中看流水灯的走动和数码管的显示是否按你设想的结果一致,如果不一致,就要请教老师和同学。
最后,老师教给我们一个作业——写实训报告,后来我们都在埋头苦干中。
周四
由于部门的辩论赛活动,我不得不请假,所以就没有来参加实训!听同学们说老师叫我们自己动手把之前没完成的工作继续去完成!主要还是編程序和写实训报告。
uchar wei[2]={0xfe,0xfd};
bit start=0;
bit turnflag=0;
uchar num=0;
单片机流水灯实验报告
单片机流水灯实验报告电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2 流水灯实验时间: xx-10-21 班级:电信092 姓名:蔡松亮学号: 910706247一、实验目的:进一步熟悉keil仿真软件、proteus仿真软件的使用。
了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。
二、实验原理:MCS-51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。
每组I/O口内部都有8位数据输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。
四组并行I/O端口即可以按字节操作,又可以按位操作。
当系统没有扩展外部器件时,I/O端口用作双向输入输出口;当系统作外部扩展时,使用P0、P2口作系统地址和数据总线、P3口有第二功能,与MCS-51的内部功能器件配合使用。
以P1口为例,内部结构如下图所示:图 P1口的位结构作输出时:输出0时,将0输出到内部总线上,在写锁存器信号控制下写入锁存器,锁存器的反向输出端输出1,下面的场效应管导通,输出引脚成低电平。
输出1时,下面的场效应管截止,上面的上拉电阻使输出为1。
作输入时:P1端口引脚信号通过一个输入三态缓冲器接入内部总线,再读引脚信号控制下,引脚电平出现在内部总线上。
I/O口的注意事项,如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用;四个口在作输入口使用时,均应先对其写“1”,以避免误读;P0口作I/O 口使用时应外接10K的上拉电阻,其它口则可不必;P2可某几根线作地址使用时,剩下的线不能作I/O口线使用;P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。
三、实验环境:硬件:PC机,基本配置CPU PII以上,内存2G 软件:keil 2, Proteus 7.5四、实验内容及过程:1、用Proteus画流水灯电路图流程:1)、运行Proteus仿真软件,单击pick from libraries,打开搜索元器件窗口,如图 1 所示:图 1 打开搜索元器件窗口2)、搜索添加元器件,如图2 所示:图2 搜索添加元器件窗口3)、添加元器件,修改元器件的参数,绘制流水灯原理图,元器件参数为c1=c2=20pf、c3=10uf;R1=R2=R3=R4=R5=R6=R7=R8=470欧姆、R9=10k欧姆;晶振=12M;VCC=5V。
实验一 51单片机流水灯实验 实验报告
“流水灯”实验报告一、实验目的1.了解单片机I/O口的工作原理。
2.掌握51单片机的汇编指令。
3.熟悉汇编程序开发,调试以及仿真环境。
二、实验内容通过汇编指令对单片机I/O进行编程(本实验使用P0口),以控制八个发光二极管以一定顺序亮灭。
(即流水灯效果)三、实验原理通过更改P0口8位的高低电平,分别控制8个发光二极管的亮灭。
具体的亮灭情况如下表:要实现“流水灯”效果,也就是需要将P0口的输出值发生以下变化:FE→FD→FB→F7→EF→DF→BF→7F→BF→DF→EF→F7→FB→FD→FE→......可以使用一个循环,不断对数据进行移位运算实现。
这里的移位指令采用RL和RR,即不带进位的位移运算指令。
如果使用带进位的位移运算指令(RLC和RRC),则需要定期把CY置0,否则会出现同时亮起两个发光二极管的情况。
四、实验过程1.在仿真系统中绘制好单片机的电路图2.编写汇编程序,程序如下:ORG 0000H Delay: MOV R0, #0FFHSJMP Start Delay1: MOV R1, #0FFH Start: MOV A, #0FEH Delay2: NOPMOV P0, A DJNZ R1, Delay2CLR P2.7 DJNZ R0, Delay1CLR P3.7 RETMove: MOV R2, #7H ENDMOV R3, #7HRMove: RL AMOV P0, ACALL DelayDJNZ R2, RMoveLMove: RR AMOV P0, ACALL DelayDJNZ R3, LMoveSJMP Move五、实验结果为了便于实验结果的描述,下面分别把P0.0, P0.1…, P0.7对应的发光二极管编号为1, 2, …, 8号二极管。
在仿真系统中,先从1号二极管下面是在仿真系统中的实验结果:1.只有1号二极管点亮2.只有2号二极管点亮3.只有3号二极管点亮4.只有4号二极管点亮5.只有5号二极管点亮6.只有6号二极管点亮7.只有7号二极管点亮8.只有8号二极管点亮实验的结果:二极管的发光状态从1→2→3→4→5→6→7→8→7→…→1→2;如此往复循环。
基于51单片机的流水灯实验
可以调用C51库函数实现循环左移和循环右移(具 体可以见C:\keil\C51\HLP\C51lib.chm): 1、必须先包含intrins.h 2、i=_crol_(i,1);/*将i循环左移1位*/ 3、i=_cror_(i,1);/*将i循环右移1位*/ 用循环左移编写第三个流水灯程序。[例程]
认识一个For 循环语句
• For (表达式1;表达式2;表达式3) { 语句(内部可为空)} 执行过程: 1.求解一次表达式1. 2.求解表达式2,若其值为真(非0 即为真),则执行 for中语句。然后执行第3步。否则结束for 语句,直接 跳出,不再执行第3步。 3.求解表达式3. 4.跳到第2步重复执行。
了解一下实验板初始化
• 初始化就是把变量赋为默认值,把控件设为默认
状态,把没准备的准备好。 但是如果是整个系统初 始化那就不一样了。在汇编语言中,为变量分配空 间时,初始化过的变量的初值位于可执行文件代码 段数据后,会占用一定空间,不必要的初始化会造 成磁盘空间的浪费。在C语言等高级语言中,为每 一个变量赋初值被视为良好的编程习惯,有助于减 少出现Bugs的可能性。因此,是否对不必要的变量 初始化依情况而定。
程序就是人的思想的反映,编程最重要的就是你的编程思路,有什么样的思 路就会编出什么样的程序。 先看上一讲的点一个发光管程序: 1、思路分析。流程图是整理我们思路的好工具,同时也能保证若干年以后 你还能轻易看懂自己编写的程序。 2、程序讲解(这个程序是利用了位输出操作) 。 宏定义 函数和函数调用 如何熄灭发光管 循环结构,while语句详解、关系运算和逻辑值 如何改变流水灯流动的速度
单片机流水灯实验报告
单片机流水灯实验报告:实验一:用C51实现流水灯实验实验要求:完成亮流水,即LED从低位流向高位流动,每次流动一位,且每次只亮一个LED灯,其它LED灭。
实验原理:单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用r1或rr a实现位的转换。
实验内容:通过仿真来实现实验电路图代码如下;for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;实验结果:实验程序:#include<REG51.H>void delay();//延时函数声明void main()//主函数{unsigned charx,num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1){for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;}}void delay()//延时函数,无符号字符型变量i为形式参数{unsigned int j,k;//定义无符号字符型变量j和kfor(k=0;k<500;k++)//双重for循环语句实现软件延时for(j=0;j<100;j++);}实验总结:这次试验通过仿真实验软件实现流水灯实验,充分学会了keil 软件和Proteus电路仿真的联合调试,为后期的实验做足了功课。
也认识到仿真实用性。
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
51单片机流水灯实验报告
51单片机流水灯试验一、实验目的1.了解51单片机的引脚结构。
2.根据所学汇编语言编写代码实现LED灯的流水功能。
3.利用开发板下载hex文件后验证功能。
二、实验器材个人电脑,80c51单片机,开发板三、实验原理单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用rl或rr a实现位的转换。
A寄存器的位经过rr a之后转换如下所示:然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。
四、实验电路图五、通过仿真实验正确性代码如下:ORG 0MOV A,#00000001BLOOP:MOV P2,ARL AACALL DELAYSJMP LOOPDELAY:MOV R1,#255DEL2:MOV R2,#250DEL1:DJNZ R2,DEL1DJNZ R1,DEL2RETEnd实验结果:六、实验参考程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};sbit P00=P0^0;sbit P01=P0^1;void delay(uchar t){uchar i,j;for(i=0;i<t;i++)for(j=0;j<110;j++); }void main(){uchar i;while(1){P00=1;delay(2000);P00=0;for(i=0;i<8;i++){P1=table[i];P2=table[i];delay(2000);}P01=1;delay(2000);P01=0;}}实物展示:(1)单片机最小系统板(2)自己焊制的集成最小系统板(3)自己制作的心形流水灯实验板(4)系统板与实验板的连接展示七.实验总结:这次试验我通过Proteus仿真实现对流水灯功能的实现。
51单片机流水灯实验报告
51单片机流水灯实验报告一、实验目的1.熟悉51单片机的硬件资源2.掌握51单片机的I/O口编程3.掌握51单片机的定时器/计数器编程二、实验原理流水灯是一种简单的电子设计,通过依次点亮和熄灭多个LED灯来形成流水灯的效果。
本实验使用的是51单片机,它有40个I/O口和3个定时器/计数器,可以方便地实现流水灯的效果。
三、实验器材1.51单片机开发板B数据线3.LED灯若干4.面包板5.连线材料(公对公、公对母杜邦线)四、实验过程1.准备工作:a.将51单片机开发板和LED灯连接起来,将LED灯依次插在面包板上,并与51单片机的I/O口相连接。
b.连接电脑与51开发板,使用USB数据线将它们连接起来。
2.编写程序:a. 打开Keil开发环境,新建一个工程。
b.在C代码文件中编写流水灯的控制程序,并引用51单片机的头文件和IO口控制相关的函数。
代码示例:```c#include <reg51.h>sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;sbit LED4 = P1^3;sbit LED5 = P1^4;void delay(unsigned int t)while(t--)for(unsigned int i = 0; i < 125; i++);}void maiwhile(1)LED1=0;//点亮LED1delay(1000); // 延时LED1=1;//熄灭LED1LED2=0;//点亮LED2delay(1000); // 延时LED2=1;//熄灭LED2LED3=0;//点亮LED3delay(1000); // 延时LED3=1;//熄灭LED3LED4=0;//点亮LED4delay(1000); // 延时LED4=1;//熄灭LED4LED5=0;//点亮LED5delay(1000); // 延时LED5=1;//熄灭LED5}}```3.烧录程序:a.将开发板上的烧录开关调整为“USB”模式。
单片机流水灯实验报告
单片机流水灯实验报告单片机流水灯实验报告一、实验目的本实验旨在通过单片机控制八个LED灯,实现流水灯效果。
通过本实验,我们希望达到以下目的:1.深入理解单片机的I/O端口的工作原理和使用方法。
2.掌握单片机定时器/计数器的工作原理和使用方法。
3.学会编写简单的单片机程序,实现特定的LED灯控制。
4.通过实践操作,提高单片机软硬件的综合应用能力。
二、实验设备1.单片机开发板2.电脑一台3.八个LED灯4.杜邦线若干5.电阻、电容等电子元件三、实验原理本实验采用AT89C51单片机作为主控芯片。
八个LED灯分别连接到P1端口的P1.0到P1.7。
通过编程控制P1端口的每一个引脚,实现对LED灯的亮灭控制。
使用定时器/计数器实现延时,达到流水灯效果。
四、实验步骤和内容1.搭建硬件电路将八个LED灯、一个上拉电阻以及相应的杜邦线连接至单片机开发板。
确保电源正确连接,并注意LED灯的长脚为正极,短脚为负极。
2.编写程序使用Keil C51编写程序,实现如下功能:点亮每个LED灯一定的时间,然后熄灭。
重复此过程,形成流水灯效果。
代码如下:#include <reg51.h> //包含51单片机的头文件#define LED P1 //定义LED为P1端口void delay(unsigned int time) //延时函数{unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);}void main() //主函数{while(1) //程序一直循环执行{unsigned char i=0; //定义一个变量i,用于循环控制LED灯while(i<8) //循环点亮每个LED灯{LED=~(0x01<<i); //点亮第i个LED灯delay(50000); //延时50ms(50*1275us)i++; //变量i加1,控制下一个LED灯}}}3.编译程序将程序编译为二进制文件,生成HEX文件。
51八只LED灯做流水灯实验
51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。
如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。
想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED 1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。
本实验在“SP-5 1实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。
我们不能说P1.1你变低,它就变低了。
因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。
我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。
今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。
这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。
前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。
现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。
“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1P1.2低clr p1.2P1.2高setb p1.2这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。
51单片机实验报告.pptx
unsigned char i; for(i=0; i<8; i++)
{ DisplayData[i] = DIG_CODE[i];
} while(1) {
DigDisplay(); } } void Dighar i; unsigned int j; for(i=0; i<8; i++) {
实验 2 流水灯(不运用库函数) 实验现象 起初led 只有最右面的那一个不亮,半秒之后从右数第二个 led 也不亮了,直到最后一个也熄灭,然后 led 除最后一个都亮,接 着上述过程
#include <reg52.h>
3
#include <intrins.h> void Delay10ms(unsigned int c); main()
{ unsigned char LED; LED = 0xfe;
while (1) {
P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00)
{ LED = 0xfe;
} } } void Delay10ms(unsigned int c) {
8
#define GPIO_PLACE P1 unsigned char code DIG_PLACE[8] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code DIG_CODE[17] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char DisplayData[8]; void DigDisplay();
实验一-51单片机流水灯实验-实验报告5页
实验一-51单片机流水灯实验-实验报告5页实验目的:通过51单片机控制LED流水灯的实验,提高学生对于51单片机I/O端口控制的掌握程度,并加深对于“流水灯原理”的理解,在此基础之上,提高同学们对于算法的理解与启发式思路。
实验器材:1. 计算机及Keil C51开发软件。
2. STC89C52单片机开发板一块。
3. LED灯若干(使用的LED有红、黄、绿、蓝、紫共5种,将每种颜色灯各6枚组合成一共30颗灯)。
4. 单片机烧录器。
实验原理:数码管实验就是在P0口中,以位选方式驱动数码管,以位选控制器件的组成电路。
流水灯实验就是在P1口中,以位移方式驱动LED灯,以主控程序的组成电路。
实验内容:实验中使用Keil C51软件编写程序,由程序控制单片机的P1口输出电平,从而控制LED的灯光闪烁。
LED灯的控制方式为从左到右控制LED逐层点亮或逐层熄灭,或者从左到右逐层递增亮度或递增颜色。
另外,LED灯的控制还可以从中间开始点亮或者点熄,并在两边逐层变化。
实验时,需要先理清楚流水灯的控制原理,明确各个控制变量的功能,并制定出相应的算法,在程序中进行实现。
实验步骤:1. 将30个LED灯按照左到右的次序排列好,将其中一个LED固定在开发板上的对应P1口位置上。
2. 根据实验要求,编写一个程序,对于LED的灯光状态进行控制,使LED灯从左到右依次变亮或变暗。
编写程序时可以采用多种实现方式,如如果使用循环语句,可以循环控制LED序列中的每个灯的亮度状态,使得程序能够不断运行直到停止。
3. 编写完成程序后,通过单片机烧录器,将程序烧录到开发板上,并将开发板上的电源连接上。
4. 开发板接通电源后,可以看到电路中的LED发出不同的亮光信号,如果控制程序设计得好,可以实现一些比较有意思的效果,如从起始位置到中间逐渐点亮,或者从中间到两侧依次点亮,等等。
实验结果:通过程序的编写和烧录,可以实现对于LED流水灯的控制。
程序运行期间会通过P1口输出电平信号,控制LED灯的点亮和熄灭,从而实现LED的流水灯效果。
51单片机的流水灯实验
实验一流水灯实验一、实验目的1、简单I/O引脚的输出2、掌握软件延时编程方法3、简单按键输入捕获判断二、实验实现的功能1、开机是点亮12发光二极管,闪烁三下2、按照顺时针循环依次点亮发光二极管3、通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计1、元器件STC51单片机,MAX232芯片,晶振,共阴极数码管,PC线路板,排针、电阻、电容、发光二极管、开关若干,串行接口,USB数据接口以及接口数据线2、原理电路四、系统软件设计1、软件开发环境:2、使用语言:C513、程序内容:见附表五、实验过程中遇到的问题及解决方法1.首次程序运行时,采用VC++6.0环境,而不是keil uvision3,程序报错,不支持C51头文件。
2.程序载入单片机时候出现故障,未检查出错误原因,请教他人后发现载入的不是hex文件,重新生成文件后载入,运行实验成功。
指导老师签字:日期:程序附表#include <reg51.h>unsigned int m,n;signed int i=11;sbit P32=P3^2 ;sbit P33=P3^3 ;sbit P34=P3^4 ;sbit P35=P3^5 ;sbit h1=P3^6;sbit h2=P3^7;sbit k=P0^5;unsigned char table1[]={1,1,1,1,1,1,1,1,0,1,1,1};unsigned char table2[]={1,1,1,1,1,1,1,1,1,0,1,1} ;unsigned char table3[]={1,1,1,1,1,1,1,1,1,1,0,1};unsigned char table4[]={1,1,1,1,1,1,1,1,1,1,1,0};unsigned chartable5[]={0xfe,0x0fd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff}; void keyscan1() ;void keyscan2() ;void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void keyscan1(){h1=0,h2=1;if(k==0){delay(10);if(k==0){ while (1){for(i=i;i>-1;i--){P32=table1[i];P33=table2[i];P34=table3[i];P35=table4[i];P2=table5[i];delay(1000); keyscan2();}i=11;}}}}void keyscan2(){h1=1,h2=0;if(k==0){delay(10);if(k==0){while (1){for(i=i;i<11;i++){ P32=table1[i];P33=table2[i];P34=table3[i]; P35=table4[i];P2=table5[i]; delay(1000);keyscan1();}i=0;}}}}void main(void){for(m=0;m<3;m++){P32=0,P33=0,P34=0,P35=0, P2=0x00;delay(1000);P32=1,P33=1,P34=1,P35=1,P2=0xff;delay(1000);}while (1){for(i=0;i<12;i++) { P2=table5[i];P32=table1[i];P33=table2[i]; P34=table3[i];P35=table4[i]; keyscan1();delay(1000);}}}。
单片机实验报告---流水灯实验
流水灯实验实验内容实验说明:如上图所示,板载 8个 LED 的阳极经排阻 RP1 上拉至 VCC,阴极连接至端口 J9。
实验中,使用杜邦线将单片机的 P1 端口(端口地址:0x90)顺序连接至 J9 端口。
程序功能:先将 P1 端口全部置高(LED 均熄灭),延时 0.2s 左右后,P1.0 置低(LED1 点亮),再延时 0.2s 左右后,P1.0 置高(LED1 熄灭),同时 P1.1 置低(LED2 点亮),如此循环,实现流水灯功能。
实验步骤:1.打开 Keil,新建工程:Project/New Project,输入工程名,并保存;2.选项选择器件:Atmel 的 89C52;3.新建程序文本,并另存该文件为汇编文件格式: (1)“File/New”,(2) File/Save As/键入欲使用的文件名及后缀名,即“文件名.asm”。
再单击“保存”;4.添加该文件到工程:回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,单击“Add File to Group ‘Source Group 1’”,选择刚才新建的汇编文件。
5.在 keil 的汇编文件中输入程序代码,并编译,调试。
6.编译通过后,将生成的HEX文件下载到单片机实验板中,观察实验现象。
参考代码:(1)ORG 0000HLJMP STARTSTART:MOV A, #0FFHCLR CMOV R2, #8LOOP1:RRC AMOV P1,ALCALL DELAYDJNZ R2,LOOP1SJMP STARTDELAY: MOV R3,#7D1: MOV R4,#50D2: MOV R5,#250DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND(2)ORG 0000HLJMP START START:MOV A, #00H SETB CMOV R2, #8LOOP1: RRC A MOV P1,ALCALL DELAYDJNZ R2, LOOP1 SJMP START DELAY: MOV R3, #7 D1: MOV R4, #50 D2: MOV R5, #250 DJNZ R5, $DJNZ R4, D2DJNZ R3, D1RETEND(3)ORG 0000HLJMP START START: MOV A, #00H SETB CMOV R2, #8LOOP1: RRC AMOV P1,ALCALL DELAYDJNZ R2, LOOP1 MOV R2, #7LOOP2: RLC AMOV P1,ALCALL DELAYDJNZ R2,LOOP2 SJMP START DELAY: MOV R3, #7 D1: MOV R4, #50D2: MOV R5, #250 DJNZ R5, $DJNZ R4, D2DJNZ R3, D1RETEND实验结果。
流水灯单片机实验报告
流水灯单片机实验报告流水灯单片机实验报告引言:单片机是一种集成电路芯片,具有微处理器的功能。
它广泛应用于各个领域,包括家电、电子产品、汽车等。
在本次实验中,我们将使用单片机实现一个简单的流水灯效果,通过这个实验,我们可以深入了解单片机的原理和应用。
实验目的:1. 了解单片机的基本原理和工作方式;2. 掌握单片机的编程方法和流程;3. 实现流水灯效果,并通过调整参数改变灯光的亮度和频率。
实验器材:1. 单片机开发板;2. LED灯若干;3. 连接线。
实验步骤:1. 连接电路:将LED灯与单片机开发板相连,确保连接正确无误。
2. 编写程序:使用C语言编写单片机程序,实现流水灯效果。
3. 烧录程序:将编写好的程序通过编程器烧录到单片机中。
4. 调试程序:将烧录好的单片机插入开发板,启动电源,观察LED灯的亮灭情况。
5. 调整参数:根据需要,可以通过修改程序中的参数来改变流水灯的亮度和频率。
实验结果:经过调试和调整参数,我们成功实现了流水灯效果。
LED灯在单片机的控制下,按照一定的顺序依次亮起和熄灭,形成了流水灯的效果。
通过修改程序中的参数,我们还可以调整灯光的亮度和频率,使得流水灯的效果更加丰富多样。
实验分析:通过这个实验,我们深入了解了单片机的原理和应用。
单片机作为一种集成电路芯片,具有微处理器的功能,可以通过编程来实现各种各样的功能。
在流水灯实验中,我们通过编写程序,控制LED灯的亮灭,实现了流水灯的效果。
通过调整参数,我们还可以改变灯光的亮度和频率,使得流水灯的效果更加丰富多样。
结论:本次实验通过使用单片机实现了流水灯效果,深入了解了单片机的原理和应用。
通过编写程序和调整参数,我们成功控制了LED灯的亮灭,实现了流水灯的效果。
这个实验不仅提高了我们对单片机的理解和应用能力,还培养了我们的动手能力和解决问题的能力。
希望通过这个实验,我们能够更好地掌握单片机的原理和应用,为今后的学习和工作打下坚实的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、 实验目的
1.了解 51 单片机的引脚结构。 2.根据所学汇编语言编写代码实现 LED 灯的流水功能。 3.利用开发板下载 hex 文件后验证功能。
二、实验器材
个人电脑,80c51 单片机,开发板
三、 实验原理
单片机流水的实质是单片机各引脚在规定的时间逐个上电,使 LED 灯能逐个 亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的 P2 端口,对 8 个 LED 灯进行控制,要实现逐个亮灯即将 P2 的各端口逐一置 零,中间使用时间间隔隔开各灯的亮灭。使用 rl 或 rr a 实现位的转换。 A 寄存器的位经过 rr a 之后转换如下所示:
3
sbit P00=P0^0; sbit P01=P0^1;
void delay(uchar t) {
uchar i,j; for(i=0;i<t;i++) for(j=0;j<110;j++); }
void main() {
uchar i; while(1) {
P00=1; delay(2000); P00=0; for(i=0;i<8;i++) {
DJNZ R1,DEL2 RET End 实验结果:
六、实验参考程序
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
8
+5 v
0 5
Vcc1 P2.0 P2.1 6 P2.2 7 P2.3 8 P2.4 5 P2.5 6 P2.6 7 P2.7 8 b1 5 b2 6 b3 7
GNDb4 0 8
80C51
五、 通过仿真实验正确性
2
代码如下: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
A0 A1 A2 A3 A4 A5 A6 A7
然后将 A 寄存器转换一次便送给 P2 即 MOV P2,A 便将转换后的数送到了 P2 口,不断 循环下去,便实现了逐位置一操作。
四、 实验电路图
1
1 a1 2 a2 3 a3 4 a4 1 a1 2 a2 3 a3
4 a4
1 a1
2 a2 3 a3 4 a4
P1=table[i]; P2=table[i]; delay(2000); } P01=1; delay(2000); P01=0)单片机最小系统板
(2)自己焊制的集成最小系统板
5
(3)自己制作的心形流水灯实验板
(4)系统板与实验板的连接展示
6
7
七.实验总结:
这次试验我通过 Proteus 仿真实现对流水灯功能的实现。受益匪浅,对 80c51 的功能和 结构有了深层次的了解,我深刻的明白,要想完全了解 c51 还有一定距离,但我会一如既往 的同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写 好程序的却总出错,不知道什么原因,原来没有生成 hex 文件。这些错误令我明白以后在试 验中要步步细心,避免出错。