关于单片机的一些小实验_01点亮一个灯

合集下载

51单片机点亮一盏LED灯的原理解析

51单片机点亮一盏LED灯的原理解析

51单片机点亮一盏LED灯的原理解析单片机是指一种集成了微处理器核、存储器和外设接口的制作技术、封装技术等多种技术的集成电路芯片。

其中,51单片机是一种以Intel公司的80C51为核心的单片机。

点亮一盏LED灯是单片机入门的基础实验,通过这个实验可以学习到单片机的基本原理和操作方法。

点亮一盏LED灯的实验原理是通过单片机的I/O口控制LED的亮灭。

I/O口是单片机用于与外部设备进行数据交换的通道,可以通过它控制外部的电子元件。

LED是一种基本的显示元件,用来指示设备的运行状态。

在51单片机中,I/O口分为P0、P1、P2、P3四个8位I/O口,每一位可以控制一个LED。

其中P0口用来与外部设备进行数据交换,P1口是输入/输出口,P2口和P3口是专用输入/输出口。

首先,我们需要连接单片机与LED灯。

将单片机的VCC端连接到LED灯正极,将单片机的GND端连接到LED灯负极。

然后,选择一个合适的I/O口,将单片机的I/O引脚与LED的另一端连接。

接下来,我们需要编写程序控制LED的亮灭。

首先,需要包含头文件。

例如,在Keil C编译器中,我们需要使用“#include <reg52.h>”来包含51单片机的寄存器定义。

然后,我们需要定义LED的连接位置和状态。

例如,我们可以使用“sbit LED = P1^0;”来定义LED连接到P1口的第0位。

接着,我们需要编写主函数。

在主函数中,我们可以使用赋值语句来控制LED的亮灭。

例如,我们可以使用“LED = 1;”使LED亮起,使用“LED = 0;”使LED熄灭。

我们可以使用延时函数来控制LED的亮灭时间。

例如,我们可以使用“delay(1000);”使程序暂停1000毫秒。

综上所述,51单片机点亮一盏LED灯的原理是通过单片机的I/O口控制LED的亮灭,并通过编写程序来实现。

这个实验是单片机入门的基础实验,可以帮助初学者了解单片机的基本原理和操作方法。

单片机流水灯实验原理

单片机流水灯实验原理

单片机流水灯实验原理
单片机流水灯实验原理是通过使用单片机控制LED灯的亮灭
顺序,实现像水流一样顺序逐个灯泡点亮或熄灭的效果。

具体的原理是首先定义一个存储变量来表示灯泡的状态,将其初始化为一个特定的值,然后通过循环不断地改变存储变量的值,从而改变LED灯的状态。

在流水灯实验中,使用的通常是移位寄存器方法。

首先将存储变量的最低位设置为1,表示第一个灯泡亮起。

然后通过向左
移位的方法不断改变存储变量的值,使得下一个灯泡依次点亮。

当存储变量的最高位被移动到最低位时,循环重新开始,实现灯泡的循环点亮。

为了使灯泡的点亮和熄灭速度可见,可以在每次改变存储变量的值之后,添加一个延时函数,控制灯泡亮灭的间隔时间,从而形成一个流动的效果。

通过编程控制灯泡的亮灭顺序和时间间隔,可以实现不同的流水灯效果,如单方向流水灯、双向流水灯、交替流水灯等。

这些效果的产生都是通过改变存储变量的值和控制亮灭时间来实现的。

单片机独立按键控制led灯实验原理

单片机独立按键控制led灯实验原理

主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。

其中,控制LED灯是单片机实验中常见的任务之一。

本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。

2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。

在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。

通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。

3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。

这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。

希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。

下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。

1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。

这些材料包括单片机板、按键、LED灯、连线和电源。

在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。

单片机P1口亮灯实验

单片机P1口亮灯实验

实验一 P1口亮灯实验
一、实验目的
(1)学习P1口的使用方法;
(2)学习延时子程序的编写。

二、实验预备知识
(1)P1口对准双向口,每一位都可独立地定义为输出线或输入线。

(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。

三、实验内容
P1作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

四、程序框图
五、实验电路
六、实验步骤
P1.O-P1.7用插针连至L1-L8,运行程序后,观察发光二极管闪亮移位情况。

程序代码如下:
ORG 0000H
MOV P1,#0FFH ;送P1口
MOV A,#0FEH ;L1(L0?)发光二极管点亮
LOOP: MOV P1,A
LCALL DELAY ;调用延时子程序
RL A ;左移位
SJMP LOOP ;循环
DELAY: MOV R7,#0FFH ;延时子程序LOOP1: MOV R6,#0FFH
LOOP2: NOP
NOP
DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET ;返回
END
七、思考
1、改变延时常数,使发光二极管闪亮时间改变。

改变R7、R6的值
2、修改程序,使发光二极管闪亮移位方向改变。

将RL A 改为RR A。

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告本实验旨在通过单片机控制LED灯的亮灭,实现流水灯效果。

通过对实验的设计、搭建和调试,我们可以更深入地理解单片机的工作原理和掌握相应的编程技巧。

实验器材和元件:1. 单片机,我们选用了STC89C52单片机作为控制核心;2. LED灯,我们使用8个LED灯作为实验的输出设备;3. 电阻,为了限流,我们使用了适当的电阻;4. 连接线、面包板等。

实验步骤:1. 搭建电路,首先,我们按照电路图将单片机、LED灯和电阻连接在一起,并将电路连接到电源上;2. 编写程序,接下来,我们使用C语言编写单片机的控制程序,实现LED灯的流水灯效果;3. 烧录程序,将编写好的程序通过烧录器烧录到单片机中;4. 调试程序,将烧录好的单片机连接到电路上,进行程序的调试和验证;5. 完善电路,根据实际调试情况,对电路进行必要的调整和完善,确保LED 灯能够按照预期的流水灯效果工作。

实验结果:经过反复调试和完善,我们成功实现了单片机控制LED灯的流水灯效果。

在程序控制下,8个LED灯按照顺序依次亮起并熄灭,形成了流水灯的效果。

整个实验过程非常顺利,取得了预期的效果。

实验心得:通过本次实验,我们对单片机的控制原理有了更深入的理解,也掌握了一定的C语言编程技巧。

在实验的过程中,我们遇到了一些问题,如LED灯未按预期工作、程序逻辑错误等,但通过分析和调试,最终都得到了解决。

实验不仅提高了我们的动手能力,也培养了我们的分析和解决问题的能力。

总结:本次实验不仅让我们熟悉了单片机的控制方法,也让我们体验了从实验设计到调试完善的整个过程。

通过这次实验,我们不仅学到了专业知识,也培养了动手能力和解决问题的能力。

希望在以后的学习和实践中,能够更好地运用所学知识,不断提升自己的能力。

以上就是本次单片机流水灯实验的报告内容,希望对大家有所帮助。

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

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

单片机实验报告姓名: 学号:一、 实验实现功能: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;}}}。

实验一:点亮一个发光二极管

实验一:点亮一个发光二极管

实验一:点亮一个发光二极管
一、实验目的:
1掌握单片机试验系统的硬件电路连接方法,编程软件keil的操作方法,以及下载软件的使用方法。

2、掌握并行I/O接口的基本工作方法。

二、实验要求:
1、将一个共阳发光二极管连接到单片机的并行I/O接口引脚。

2、根据你的电路编写程序点亮发光二极管。

3、将程序下载到单片机中。

4、运行观察发光二极管是否点亮,若没有点亮,则检查硬件及软件,重新调试。

三、实验原理图:
发光二极管是共阳的,0点亮,1熄灭。

该图中的P2是指排针,而非P2接口。

四、思考题:
若要求同时点亮8个发光二极管,硬件及软件怎么修改?。

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。

单片机LED灯实验报告

单片机LED灯实验报告

单片机LED灯实验报告
本次实验我们使用单片机控制LED灯的亮灭,这是一个非常简单的实验,适合初学者。

1、实验原理
单片机是一种集成电路芯片,具有计算机的基本结构和功能,可以通过编程实现对外
设的控制。

在本实验中,我们通过编程控制单片机的输出口,使其控制LED灯的亮灭。

2、实验器材
1)单片机开发板
2)LED灯
3)导线
4)电池
5)万用表
3、实验步骤
第一步:连接电路,将开发板上的输出口与LED灯的正极连接起来,将GND和LED灯
的负极连接起来。

第二步:打开开发板和计算机,用Keil uVision软件编写程序,将程序下载至单片机。

第三步:将电池接电,观察LED灯的亮灭情况。

第四步:使用万用表进行电压和电流检测,确保电路工作正常。

4、实验结果
当单片机控制输出端口时,LED灯会随之变化。

当单片机输出低电平时,LED灯熄灭;输出高电平时,LED灯亮起。

通过这次实验,我们掌握了单片机的基本原理和一些控制技巧。

这对于我们以后了解
和使用单片机会有很大的帮助。

同时,也加深了我们对电路基础知识的认识和理解。

单片机实验报告范文

单片机实验报告范文

单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。

二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。

2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。

通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。

三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,点亮LED灯。

2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将按键和LED灯与单片机相连。

(3)编写程序,实现按下按键控制LED灯亮灭。

3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将数码管与单片机相连。

(3)编写程序,将数字输出到数码管上显示。

4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,实现定时器功能。

四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。

2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。

按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。

3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。

通过程序设计,可以实现数码管显示不同的数字。

4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。

通过调节定时器的参数,可以实现不同的定时功能。

五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。

通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。

这些技能对于日常生活和工程设计都具有很大的实用性。

在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。

项目用单片机点亮一个发光二极管PPT教案

项目用单片机点亮一个发光二极管PPT教案

理论基础——认识单片 机
单片微型计算机,简称单片机, 是指集成在一个芯片上的微型计算机, 它的各种功能部件,包括CPU、存储 器、基本输入/输出接口电路、定时/计 数器和中断系统等,都制作在一块集 成芯片上,构成一个完整的微型计算 机。
第6页/共23页
单片机应用系 统
单片机应用系统
单片机
接 口 电 路 及 外设等
RXD
中断系统
INT0 INT1
第8页/共23页


并个中行8央位I/处O的口I理/O:口器4
PC0P、UP:1、8P位2、,
••


串 全P时运功中 5内4R3个KO行双钟断部。算能BM中口工掩电控R,和断O:串膜路制用M源控行一:系:于口个制可统。:
• •
产序 振和(定断串存始定两定实数内 共 单 使 单生列 频1外时2行放数 时个时 现功2部元用元25时, 率中/中程据 定能/1/R,前,M6计计计6个AH钟允 6断断序和 时。1用用位数数数M个MZ2R脉许21、表 或户于的8:中器器HA,个个个冲晶原格 计ZM:,,)。
1
4
2
0
3
3
4 5
8031
9 3
6
8
7 8051 3
8
7
9 1
8751
3 6
0
3
1 89C51 5
1
3
1
4
2
3
1
3
3
3
1
2
4
3
1
1
5
3
1
0
6
2
1
9
7
2
1
8
8

单片机 跑马灯实验精选全文

单片机 跑马灯实验精选全文

可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。

每点亮一个LED,采用软件延时一段时间。

2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。

松手后,又按正序点亮流水灯。

3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。

按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。

二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。

所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。

低电平有效输出:P0.0~P0.7-D0~D7。

LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。

按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。

为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。

主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。

单片机控制led灯点亮原理

单片机控制led灯点亮原理

单片机控制led灯点亮原理单片机控制LED灯点亮原理:LED(Light Emitting Diode)是一种化学特性非常稳定,发光效率较高的半导体器件。

而单片机则是一种数字电路系统,具有处理器、内存、输入输出等功能。

在这样的基础上,我们可以很容易地利用单片机控制LED灯的点亮。

步骤:1. 准备工作:选择合适的单片机芯片、开发板和电路元件。

将电路元件进行布线连接,准备编写程序和烧录到单片机设备中。

2. 了解LED工作原理:LED 的灯香大致分为正极和负极,通电之后,电子会沿着半导体通道运动,此时会放出一种能量,这种能量就是光。

3. 控制流程:编写单片机程序,利用单片机内部的IO口操控电路。

首先需要使IO口的电平输出为高电平,这样就可以提供足够的电压以让LED灯点亮。

4. 将程序烧录到单片机中:通过编程软件将程序烧录到单片机中,这样程序就会自动运行,并且可以控制LED灯的点亮和灭。

5. 测试单片机功能:通过手动控制单片机的IO口电平,可以检测电路和单片机是否正常运行。

如果一切正常,那么LED灯就可以顺利地被控制点亮。

需要注意的是,控制LED灯点亮并不是只需要上述步骤就可以完成的。

我们还需要加入适当的电阻,限制LED的电流,以防止LED损坏。

此外,还需要在程序中添加控制语句,实现闪烁、呼吸等效果。

除此之外,由于不同的单片机芯片和开发板的差异,控制LED灯点亮的具体实现方法也有所不同。

总而言之,单片机控制LED灯点亮是一种基础的数字电路系统应用。

通过学习上述步骤,掌握基础的控制流程,可以更深入地了解数字电路的工作原理和实现方法,并且为日后的数字电路应用打下基础。

实验一:点亮第一个LED灯

实验一:点亮第一个LED灯
示,拨码开关任意拨第四个,第四个灯会亮。
六、讨论
1:仿真软件的安装最后一步需要升级。 2:define 语句不写分号。
七、参考文献
《微机原理与接口技术》实验指导书
第5页
三、程序设计
开始
P0=P1
程序说明:从主程序开始不断执行将 P1 口赋值给 P0 口。
四、程序代码
#include <reg51.h> void main(void) // 程序主函数 {
第3页
技术报告用纸
while(1) // 循环用于实时扫描 IO 状态 { P0=P1; // 将 P1 口的数据发送给 P0 口 } } 五、运行结果
第1页
二、硬件设计
技术报告用纸
图 1-1 LED 接口电路 电路图说明:该图为 LED 接口电路,P0 口连接八个 LED 灯,每个 LED 灯要接 300 欧的上拉电阻 作为保护电路。八个灯为共阳极,低电平点亮 LED 灯。
第2页
技术报告用纸
图 1-2 拨码开关电路图 该图为拨码开关电路图,每个开关拨上连接到地,P1 口为低电平,拨下连接到 VCC,P1 口为高电 平。
实验内容为设置p1为输入口p0口为输出口将p1口的开关状态发送到p0口让灯亮灭将p1的电平状态通过p0口的led的亮灭表示出来
技术报告用纸
电气与自动化工程学院
单片机实训 课程研究型学习 技术报告
项目名称:
点亮第一个 LED 灯
学生姓名:
张倩如
学号: 160512239
项目序号:
1
专业: 自动化
提交时间:
一、项目概述
通过一简单的实验掌握: 1. 掌握 PL2303 驱动的安装,掌握 Keil3 开发环境的安装、设置和基本使用; 2. 掌握项目、文件的建立方法、程序的下载以及寄存器、存储器内容的查看方法; 3. 掌握程序的执行及断点设置方法。 实验内容:通过了解 P1 口的开关控制电路和 P0 的 LED 电路,编写基本输入输出实验程序。实验 内容为设置 P1 为输入口,P0 口为输出口,将 P1 口的开关状态发送到 P0 口,让灯亮灭,将 P1 的电平 状态通过 P0 口的 LED 的亮灭表示出来。 本实验由自己独立一人完成所有上述项目。

40个经典单片机实验帮你成功

40个经典单片机实验帮你成功
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在
执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理: 如图 4.1.1 所示的石英晶体为 12MHz,因此,1 个机器周期为 1 微秒 机器周期 微秒
(2). 输出控制
如图 3 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向 导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0 端口输出高电平, 使用 CLR P1.0 指令使 P1.0 端口输出低电平。
3. 系统板上硬件连线
(1. 把“单片机系统”区域中的 P1.0-P1.3 用导线连接到“八路发光二 极管指示模块”区域中的 L1-L4 端口上;
(2. 把“单片机系统”区域中的 P1.4-P1.7 用导线连接到“四路拨动开 关”区域中的 K1-K4 端口上;
4. 程序设计内容
(1. 开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状 态,根据每个开关的状态让相应的发光二极管指示,可以采用 JB P1.X,REL 或 JNB P1.X,REL 指令来完成;也可以一次性检测四路开关状态,然后让其指 示,可以采用 MOV A,P1 指令一次把 P1 端口的状态全部读入,然后取高 4 位的 状态来指示。
void main(void) {
while(1) { L1=0; delay02s(); L1=1; delay02s(); } }
2. 模拟开关灯 1. 实验任务

51单片机实验报告

51单片机实验报告

51单片机实验报告51单片机是一种广泛应用于控制领域的微型处理器。

本文将介绍我所进行的两个基础实验,包括实验目的、实验内容、实验原理和实验结果。

实验一——点亮LED灯实验目的:了解51单片机的基本接口和编程方法;学会使用单片机的开发工具和调试器;掌握51单片机控制LED灯的方法。

实验内容:将LED灯连接至51单片机的P1.0引脚,并进行控制。

编写程序,使得LED灯能稳定地点亮。

实验原理:单片机可通过其IO口控制外部设备,使用高低电平来控制LED灯的开关。

P1.0是51单片机的一个输出端口,可通过赋予其电平状态从而控制LED的点灯与熄灭。

当单片机输出高电平时,LED灯会点亮,否则会熄灭。

实验结果:经过编写程序和调试后,成功实现了LED灯的点亮和熄灭。

按下按键即可改变LED的状态。

实验二——数码管计数器实验目的:了解51单片机的数字口和中断响应机制;掌握编写定时器中断程序的方法;学会使用键盘进行输入和外接数码管进行输出。

实验内容:通过对8位数码管控制台的编程,实现对数字的控制,使用定时器中断实现计数器功能,加深对51单片机中断响应机制的理解。

实验原理:单片机中断请求源包括外部中断源、定时器/计数器中断源以及串口中断源。

本次实验使用定时器中断,可实现一定时间间隔内数字的加减;使用键盘进行输入,采用P3口中断请求源实现按键响应,输出则通过数码管接口外设实现。

实验结果:通过定时器计数器、中断响应和数码管接口外设,成功实现一组数字的计数。

按下按键即可进行数字的加减,并通过数码管显示出来。

结语:本文所述实验为51单片机的基础操作,相信可以为读者提供实用的参考和帮助,帮助大家更加深入地理解51单片机的基础知识和使用方法。

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

将0xfe赋给P1口,然后使用移位函数来改变P1口的值,达到流水灯的效果 移位函数: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下:
随后会弹出一个对话框,要求选择单片机的型号。在该对话框中显示了Vision2的器件数据库,从中可以根据使用的单片机来选择。
PART ONE
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指针 寄存器、8k字节Flash,256字节片内RAM
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码)
各种进位制的对应关系
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
9
1001

单片机教程 第二讲 如何点亮一个发光管

单片机教程 第二讲 如何点亮一个发光管

4种IO模式 简化图
C51中端口及其位的表示
端口P0的数据寄存器用P0表示,某一位用P0 . 0 表示。
Pn
Pn.7 Pn.6 Pn.5 Pn.4 Pn.3 Pn.2 Pn.1 Pn.0
端口控制寄存器的相应位设置为1表示输出高电 平,设置为0表示输出低电平。 输出有锁存,一直保持到被新的值取代为止。
包含语句
# include <系统文件名> # include “用户文件名”
系统自带文件,文件名必须由< >括起来,程序员无需人工添加 该文件到工程中。编译时,会自 动在系统的目录中寻找到它。
预处理指令,相 当于汇编中的伪 指令。 仅在编译过程中 起作用。 用#开头
# include是文件包含指令 这条指令会导致预处理器 把#include后面跟的文件 的内容替换到这条指令的 位置。
• STC提供的下载编程 工具采用串口下载; • TOP51学习系统 采用USB下载程序。
IAP在应用编程
概念:
In Appplication Program ,在应用编程,简称IAP。 In-System Program,在系统编程,简称ISP 。
• IAP和ISP表面上看很类似,都是单片机通过下载线或者串口线、USB线和电脑连接,但 IAP的烧写时序是单片机控制的,ISP的烧写时序是电脑控制的,当然对于一般用户,不 严格区分这两者也是没有关系的,象STC的单片机,严格来说是IAP,但原厂在许多资料 里都称其为ISP。
STC12C5A60S2 除了两个VDD和两个VSS外其余36个引脚都可当成 输入/输出引脚(I/O引脚),一般每8个I/O引脚为一组,称I/O端口, 共分 P0、P1、P2、P3、P4、 P5 六个端口,每个端口可以输入或输 出一个8位二进制数。 直插封装的包括: P0(P0.0~ P0. 7) P1(P1.0~ P1. 7) P2(P2.0~ P2. 7) P3(P3.0~ P3. 7) P4(P4.4~ P4.7) 贴片封装的还包括: P4(P4.0~ P4.3) P5(P5.0~ P5.3) 8个引脚 8个引脚 8个引脚 8个引脚 4个引脚 4个引脚 4个引脚
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档