实验二51单片机点亮流水灯

合集下载

51单片机流水灯程序

51单片机流水灯程序

51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。

流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。

下面详细介绍51单片机流水灯程序的编写。

一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。

一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。

具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。

•将每个LED灯的阴极通过限流电阻连接到P1端口。

•将P2端口的每个引脚依次连接到每个LED灯的阴极。

二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。

在主函数中,使用一个while循环控制流水灯效果。

在循环内部,使用一个for循环控制8个LED灯的状态。

在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。

51单片机流水灯实验报告

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灯连接错误、程序逻辑错误等,但通过仔细检查和调试,最终成功解决了这些问题。

这次实验让我更加熟悉了单片机的应用,为以后更复杂的项目打下了基础。

七、实验拓展在掌握了基本的流水灯实验后,我们可以进一步拓展实验内容。

例如,可以增加控制开关,实现对流水灯的启停控制;可以设计不同的流水灯效果,如闪烁、变速等;还可以与其他传感器、模块进行组合,实现更多功能和效果。

单片机C51的LED流水灯实验报告

单片机C51的LED流水灯实验报告

实验3.1.2 数字量输出输出扩展——LED流水灯一、实验目的1、掌握单片机外设扩展的方法2、使用单片机和8255实现LED流水灯的控制。

二、实验内容使用汇编语言编程,功能为:通过KK1脉冲实现LED灯工作方式即时控制,完成LED 开关控制显示和LED左循环、右循环、间隔闪烁功能。

三、实验环境PC机一台,Proteus仿真软件(或TD-PIT实验系统)一套四、实验硬件电路图说明:U2为单片机SST89E554RC,U1为8255A,通过8255A的PB输出使LED工作,BUTTON 为脉冲开关。

五、程序流程图六、实验程序清单ORG 0000HAJMP 0100HORG 0100HMAIN:MOV TMOD,#60H MOV TH1,#0FFHMOV TL1,#0FFHMOV DPTR,#7300HMOV A,#80HMOVX @DPTR,ASETB TR1MOV DPTR,#7100HLEFT:MOV R0,#8MOV A,#01HAG1:MOVX @DPTR,ACALL DELAYRLC ADJNZ R0,AG1JBC TF1,RIGHTAJMP LEFTRIGHT:MOV R0,#8MOV A,#80HAG2: MOVX @DPTR,ACALL DELAYRRC ADJNZ R0,AG2JBC TF1,FLASHAJMP RIGHTFLASH:MOV R0,#8AG3: MOV A,#55HMOVX @DPTR,ACALL DELAYMOV A,#0AAHMOVX @DPTR,ACALL DELAYDJNZ R0,AG3JBC TF1,LEFTAJMP FLASHDELAY:MOV R1,#0FFHDEL0:MOV R2,#0FFHDEL: DJNZ R2,$DJNZ R1,DEL0RETEND七、实验步骤1、按实验电路图接线;2、编写实验程序,编译连接无误后进入调试状态(可用PROTEUS也可以用硬件调试);3、按动BUTTON(PROTEUS下)或KK1(实验箱),观察流水灯工作情况,验证程序功能。

基于51单片机的流水灯设计

基于51单片机的流水灯设计

基于51单片机的流水灯设计51单片机是一种常用的微控制器,它具有高性价比、易于编程和广泛的应用范围。

流水灯是一种常见的电子灯光装置,它通过类似于瀑布般的效果,逐个点亮一系列的灯。

本文将介绍基于51单片机的流水灯的设计。

流水灯的设计过程可以分为硬件设计和软件设计两个步骤。

硬件设计:在硬件设计方面,我们需要准备以下器件和材料:1.51单片机开发板2.杜邦线3.LED灯4.电阻接下来,根据流水灯的设计思路,将多个LED灯连接在一起,形成一个线性的灯带。

为了控制LED灯的亮灭,我们需要使用51单片机的GPIO 口来提供高低电平信号。

通过改变GPIO口的输出信号,我们可以实现各个LED灯的顺序点亮和熄灭。

软件设计:在软件设计方面,我们需要使用到汇编或C语言来编写控制程序。

以下是一个简单的流水灯程序的伪代码:```1.初始化51单片机的GPIO口方向,设置为输出模式2. 定义一个存储灯光模式的数组,比如`light_pattern[] = {0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01}`3.定义一个循环计数器`i`4.进入无限循环5. 通过将`light_pattern[i]`的值写入GPIO口,控制LED灯的亮灭6.延时一定时间(比如几百毫秒)7.更新循环计数器`i`8.如果`i`超过了数组的长度,将其重置为09.结束循环```在程序中,我们可以通过循环计数器`i`来依次点亮和熄灭LED灯。

通过不断更新`i`的值,我们可以实现灯光模式的循环播放。

总结:。

实验二.51单片机点亮流水灯

实验二.51单片机点亮流水灯

硬件连接
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
#include<reg52.h> sbit A0=P1^0;//位地址声明 sbit A1=P1^1; sbit A2=P1^2; sbit A3=P1^3; sbit ENLED=P1^4; unsigned char LED[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};//定义无符号字符型一维数组LED的8个初值 void main() { ENLED=0; A3=1; unsigned int i=0;//无符号整形I,并赋初值0 while(1) { P1=LED[0]; for(i=0;i<30000;i++); P1=LED[1]; for(i=0;i<30000;i++); P1=LED[2]; for(i=0;i<30000;i++); P1=LED[3]; for(i=0;i<30000;i++); P1=LED[4]; for(i=0;i<30000;i++); P1=LED[5]; for(i=0;i<30000;i++); P1=LED[6]; for(i=0;i<30000;i++); P1=LED[7]; for(i=0;i<30000;i++); } }
• 表达式1首先执行一次且只执行一次;然后 执行表达式2,通常都是一个判断条件的表 达式,如果表达式2成立,就执行(要执行 的语句);然后再执行表达式3。。。。一 直到表达式2不成立时,跳出循环继续执行 循环语句。

通过51单片机控制24个发光二极管形成流水灯效果的亮灭状态

通过51单片机控制24个发光二极管形成流水灯效果的亮灭状态

成绩实验名称:单片机系统简单扩展实验
一、实验目的
1、了解单片机系统的扩展方法
2、熟悉8255A在单片机系统扩中的使用方法。

3、熟悉仿真软件Proteus以及编程软件Keil的使用。

二、实验仪器
三、实验内容
四、实验原理
实验报告
五、实验步骤
步骤:
1、根据给定的实验要求,分析实验的目的以及实验要求。

2、通过计算机仿真软件Proteus,根据实验目的设计电路,并且绘制电路原理图。

3、根据自己设计的电路,编写控制程序。

4、调试所编写的控制程序,直至程序没有语法及语意错误,可以通过编译。

5、将所编写的无错误的程序下载至仿真软件,并进行调试,根据仿真结果修改程序。

6、重复上一步骤,知道仿真效果达到实验要求,即可完成。

六、实验程序
#include <reg51.h>
#include<absacc.h>。

51单片机实验报告(共五则)

51单片机实验报告(共五则)

51单片机实验报告(共五则)第一篇:51单片机实验报告51单片机实验报告实验一点亮流水灯实验现象 Led灯交替亮,间隔大约10ms。

实验代码#include 〈reg51、h> void Delay10ms(unsigned int c);voidmain(){)1(elihwﻩ{ ﻩP0= 0x00;Delay10ms(50);;ffx0 =0Pﻩﻩ;)05(sm01yaleDﻩ } } void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)——b;0〉b;83=b(rofﻩ{ ﻩﻩfor(a=130;a〉0;a--);}ﻩﻩ}} 实验原理W W hi i le(1)表示一直循环。

循环体内首先将P0 得所有位都置于零,然后延时约5 5 0*10=500ms,接着 0 P0 位全置于 1 1,于就是 D LED 全亮了。

接着循环,直至关掉电源..延迟函数就是通过多个for r 循环实现得。

实验 2 流水灯(不运用库函数)实验现象起初 led 只有最右面得那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后 led 除最后一个都亮,接着上述过程 #includemain(){unsigned char LED;LED = 0xfe;while(1){ ﻩ;DEL = 0PﻩDelay10ms(50);00x0 == 0P(fiﻩ {;1〈〈 DEL = DELﻩ)ﻩ;efx0 = DELﻩ} ﻩ}ﻩ} void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)—-b;0〉b;83=b(rofﻩ{ ﻩﻩﻩ;)--a;0>a;031=a(rofﻩ} ﻩ} ﻩ} 实验原理这里运用了C语言中得位运算符, , 位运算符左移, , 初始值得二进制为1111 1 110, 之后左移一次变成1111 1 100 0,当变成00000 0000 时通过 f if 语句重置 1 1 11 1 11110、延迟函数在第一个报告已经说出了,不再多说..实验 3 流水灯(库函数版)实验现象最开始还就是最右边得一个不亮,然后不亮得灯转移到最右边得第二个,此时第一个恢复亮度,这样依次循环.实验代码#include 〈reg51、h> #include 〈intrins、h〉void Delay10ms(unsigned int c); void main(void){unsigned char LED;;EFx0 = DELﻩ)1(elihwﻩ{ ﻩP0 = LED;;)05(sm01yaleDﻩﻩ;)1,DEL(_lorc_ = DELﻩ} ﻩ} void Delay10ms(unsigned in t c){unsigned chara, b;for(;c〉0;c——){ ﻩfor(b=38;b〉0;b—-){ ﻩﻩ;)-—a;0〉a;031=a(rofﻩ} ﻩ}}实验原理利用头文件中得函数,_cro l_(,), 可以比位操作符更方便得进行 2 2 进制得移位操作, , 比位操作符优越得就是,该函数空位补全时都就是用那个移位移除得数据, , 由此比前一个例子不需要f if 语句重置操作..数码管实验实验现象单个数码管按顺序显示0-9与 A-F。

实训报告单片机流水灯

实训报告单片机流水灯

一、实验目的1. 熟悉单片机的基本原理和组成,掌握51单片机的编程方法。

2. 理解单片机I/O口的使用,学会利用单片机控制LED灯的流水灯效果。

3. 提高动手实践能力,培养团队协作精神。

二、实验环境1. 实验设备:51单片机开发板、LED灯、面包板、电源、连接线等。

2. 实验软件:Proteus仿真软件、Keil uVision5集成开发环境。

三、实验原理流水灯实验是单片机入门级实验之一,通过控制单片机的I/O口输出高低电平,使LED灯依次点亮,形成流水灯效果。

实验中,利用单片机的定时器产生定时中断,每隔一定时间改变I/O口的输出状态,实现LED灯的流水灯效果。

四、实验步骤1. 打开Proteus软件,新建一个工程项目,添加51单片机开发板和LED灯等元件,绘制电路图。

2. 打开Keil uVision5,新建一个C51工程项目,选择对应的单片机型号。

3. 编写程序:(1)初始化I/O口:将P0口设置为输出模式,将P1口设置为输出模式。

(2)设置定时器:选择合适的定时器,设置定时时间,使其产生定时中断。

(3)编写中断服务程序:在中断服务程序中,改变I/O口的输出状态,实现LED灯的流水灯效果。

(4)编写主程序:在主程序中,启动定时器,进入中断服务程序。

4. 编译程序,生成HEX文件。

5. 将生成的HEX文件导入Proteus软件,运行仿真实验。

6. 观察实验现象,检查LED灯的流水灯效果是否正常。

五、实验结果与分析1. 实验现象:在Proteus软件中,LED灯依次点亮,形成流水灯效果。

2. 实验分析:通过设置定时器,每隔一定时间改变I/O口的输出状态,实现LED 灯的流水灯效果。

实验过程中,可以调整定时器的定时时间,改变流水灯的速度。

六、实验总结1. 本实验使我们对单片机的基本原理和组成有了更深入的了解。

2. 通过编写程序,掌握了51单片机的编程方法,提高了编程能力。

3. 实验过程中,我们学会了利用单片机控制LED灯,实现了流水灯效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 只要箭头初始端的电压大于箭头末端的电 压0.7v,那么e,c之间就有可以导通。
• 以pnp为例,若Ue>Ub+0.7;那么e和c之间就 导通了。
三极管封装
三级管应用
• 在这个实验中,主要是用三极管基极侧的 低电压来控制集电极和发射级之间的高电 流;
• 由于IO口内部有电阻,所以电流很低,用了 三极管之后,LED直接使用的+5v电压供电, 所以电流更高,所以要借助电阻来控制电 流小于20mA。
准备材料
• 1.单片机最小系统(晶振,复位,电源<带 PL2303>)
• 2.面包板(杜邦线,插线若干) • 电阻1KΩ(8个),330Ω(8个) • PNP9012(就是S9012)三极管(8个) • 74HC138(一套:0.1uf电容) • 发光二极管(8个)。
硬件讲解
• 我们看下我们讲的这个STC89C52单片机,它有很多的引脚,我们经常 拿来用的主要有P0、P1、P3、P2四组,每组有八个,一共32个端口。 以P3组为例:有P3.0~P3.7这八个,这一组里面每一个都有一个用法相 同的基本功能,就是能够读取外部传过来的电平信号和向外部输出电 平信号,这样进进出出的是不是很有意思?所以叫它们为IO口。 细心的同学会发现P3这组IO口都有一个另外的名字,比如P3.0又写了 RXD这个名字,等等。是的,有两个名字的端口说明它们还有第二个 功能,具体怎么用我们现在先不要去管它。 想像一下,你的小车上有一个传感器和一个电机,你希望在某个时间 点上读取到传感器的信号,然后你根据这个信号来给电机下达一个命 令让其是正转、反转、停止、加速、减速等等。这时你只需将传感器 的信号线接到其中一个IO口上(比如P3.0),然后将电机的两根线 (这里先不考虑驱动的问题,驱动可理解为只是把电流电压放大了) 接到另两个IO口上(比如P3.1和P3.2)。
数字的基本类型表示范围
• 字符型:unsigned char:0-255;signed char: -128~127。
• 整型:unsigned int:0~65535;singed int: -32768~32767; 长整型:unsigned long:0~4294967295;
signed long:-2147483648~2147483647 浮点型:float:-3.4×10^38~3.4×10^38;
电磁干扰
• 冬天干燥的城市有时候手接触金属外壳会 产生静电;你在家里看电视,外面有大车 经过,电视会有颤纹出现;电脑在热插拔 优盘后有时会出现蓝屏现象;等等。
• 这些都是电磁干扰,有时会对电子元件造 成损坏;
去耦电容
• 电容的充放电功能就像一个大水库,洪水 (电磁干扰)来的时候,先经过水库(电 容),在放水,庄稼(电子元器件)就不 会受伤害;雨水不够的时候,水库开闸放 水(电容放电);总之,电容起到了0000;i++);

P1=LED[3];

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

P1=LED[4];

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

P1=LED[5];

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

P1=LED[6];

for(i=0;i<30000;i++);
• 经过大量的研究,科学家在每个芯片的供 电处的+5v和GND之间加上一个0.1微法的电 容。
三极管的应用
• 三极管有三个功能,截止,放大,饱和; 我们主要学习三极管的截止和饱和二种状 态。
三极管原理
• 三极管的型号记忆方式:箭头朝内PNP,导 通电压顺箭头过,电压导通,电流控制。
• 横向左侧的引脚叫B(基极),右边有箭头 的那侧叫E(发射级),剩下那个引脚叫C (集电极);
74HC138三八译码器
• 三八译码器是把三种输入状态翻译成八种 输出状态;
74L138引脚介绍
• A0,A1,A2可以组成8种状态: 000,001,010,011,100,101,110,111;
• 它的真值表:
注意观察E1,E2,E3上面的横线!!!
• E1,E2,E3是三个使能输入端,两个低有效 (E1和E2)和一个高有效(E3)。除非E1 和E2置低且E3置高,否则74HC138将保持所 有输出为高。
硬件连接
• #include<reg52.h>
程序说明

sbit A0=P1^0;//位地址声明

sbit A1=P1^1;

sbit A2=P1^2;

sbit A3=P1^3;

sbit ENLED=P1^4;

unsigned char LED[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};//定义无符号字符型一维数组LED的8个初值
}
• 表达式1首先执行一次且只执行一次;然后 执行表达式2,通常都是一个判断条件的表 达式,如果表达式2成立,就执行(要执行 的语句);然后再执行表达式3。。。。一 直到表达式2不成立时,跳出循环继续执行 循环语句。

void main()

{ ENLED=0;

A3=1;

unsigned int i=0;//无符号整形I,并赋初值0

while(1)

{

P1=LED[0];

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

P1=LED[1];

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

P1=LED[2];


P1=LED[7];

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


}

}
C语言基础
• C语言的数据类型分为:字符型char,整形 int,长整型long以及浮点型float。
• Unsigned表示无符号,就是没有负数的意思。 • 二进制:计算机程序汇编中常用的形式;
用他来表示十进制;而十六进制是二进制 的一种缩写形式。
C语言的基本运算符
• 在C语言中加减乘除和取余数分别为:+,-, *,/,%;还有++,是自动加1;而—是自 动减1;但是=表示赋值运算符;==表示是 否等于判断的关系运算符;‘!=’表示是 否不等于的判断关系运算符;
• For循环语句
for(表达式1;表达式2;表达式3)
{ (需要执行的语句);
相关文档
最新文档