单片机学习2——流水灯的实现

cpp 复制代码
#include<reg52.h>
 
sbit LED = P1^0;
unsigned char i;

void main()
{
	while(1)
	{
	 	LED = 0;
		for(i=0;i<100;i++);
		LED = 1;
		for(i=0;i<100;i++);
	}
}

RST是复位按钮,单击一下之后,程序就会跑到最开始的位置运行。

右侧的按钮是RUN按钮,单击下,程序就会全速跑起来。

这两个按钮是最常用的按钮。

学会设置断点。进入到debug模式之后,这段程序主要是查看C程序的运行时间。就是看sec项。

肉眼几乎看不到灯的闪烁,因为时间太短了。

更改程序二:

cpp 复制代码
#include<reg52.h>
 
sbit LED = P1^0;
unsigned int i;

void main()
{
	while(1)
	{
	 	LED = 0;
		for(i=0;i<10000;i++);
		LED = 1;
		for(i=0;i<10000;i++);
	}
}

闪烁的比较快。

更改程序三:

cpp 复制代码
#include<reg52.h>
 
sbit LED = P1^0;
unsigned int i;

void main()
{
	while(1)
	{
	 	LED = 0;
		for(i=0;i<30000;i++);
		LED = 1;
		for(i=0;i<30000;i++);
	}
}

这样,就可以看到放光LED闪烁得比较正常了。

补充:

使用for语句的嵌套,可以讲时间变的更长。

cpp 复制代码
#include<reg52.h>
 
sbit LED = P1^0;
unsigned int i;

void main()
{
	while(1)
	{
	 	LED = 0;
		for(j=0;j<200;j++)
		{
		   for(i=0;i<30000;i++);
		}
		LED = 1;
		for(i=0;i<30000;i++);
	}
}

8个发光二极管,分别对应单片机I/O口的P1.0到P1.7,8个单片机IO口组成一个字节,在编写程序的时候,直接使用P1来操作。

C语言的8位二进制数代表8个I/O口。

P1=0xFE,它是二进制11111110的简短表示形式。

cpp 复制代码
#include<reg52.h>
 
sbit LED = P1^0;
unsigned int i;

void main()
{
	while(1)
	{
	 	P1 = 0xFE;	 //led1 11111110
		for(i=0;i<30000;i++);
		P1 = 0xFD;   //led2 11111101
		for(i=0;i<30000;i++);
		P1 = 0xFB;   //led3 11111011
		for(i=0;i<30000;i++);
		P1 = 0xF7;	 //led4 11110111
		for(i=0;i<30000;i++);
		P1 = 0xEF;	 //led5 11101111
		for(i=0;i<30000;i++);
		P1 = 0xDF;	 //led6 11011111
		for(i=0;i<30000;i++);
		P1 = 0xBF;	 //led7 10111111
		for(i=0;i<30000;i++);
		P1 = 0x7F;	 //led8 01111111
		for(i=0;i<30000;i++);
	}
}

在使用位移的方法,对代码进行处理。

cpp 复制代码
#include<reg52.h>

unsigned int i=0;
unsigned char j=0;

void main()
{
	while(1)
	{
	 	P1=~(1<<j++);
		if(8==j)
		{
			j=0
		}
		for(i=0;i<30000;i++);
	}
}

流水灯反方向流动:

cpp 复制代码
#include<reg52.h>

unsigned int i=0;
unsigned char j=0;

void main()
{
	while(1)
	{
	 	P1=~(0x7F>>j++);
		if(8==j)
		{
			j=0
		}
		for(i=0;i<30000;i++);
	}
}

全部点亮到全部熄灭:

cpp 复制代码
#include<reg52.h>

unsigned int i=0;

void main()
{
		P1=0x00;
		for(i=0;i<30000;i++);
		P1=0xFF;
}
相关推荐
莫浅子9 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
Hello_Damon_Nikola11 小时前
INMP441从入门到精通
单片机·嵌入式硬件·物联网
ye1501277745511 小时前
12V转3V-5V2A电位器无极调光调速WT7027
stm32·单片机·嵌入式硬件
无损检测小白白12 小时前
STM32F407 串口3 DMA收发-标准库
stm32·单片机·嵌入式硬件
greatriver00713 小时前
e2studio R7FA6M5 卡死 rtc 需要如何配置时钟
单片机·瑞萨单片机
恒锐丰小瑞13 小时前
率能SS6812T 40V/1A/双通道H桥驱动芯片,PWM电流控制与混合衰减模式(eTSSOP28),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·数码相机·机器人
嵌入式阿蔡14 小时前
传感器_02:MPU6050 六轴 IMU 姿态入门——从一串看不懂的数,到一个不漂的角度
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
恒锐丰小瑞15 小时前
率能SS6811H 38V/1.6A/双通道H桥驱动芯片,PWM控制接口与低功耗睡眠模式,用于舞台灯光/安防相机/机器人
单片机·嵌入式硬件·数码相机·机器人
国科安芯15 小时前
ASM232 单电源 RS-232 收发器——技术深读:原理、安全机制与抗辐照视角
网络·单片机·嵌入式硬件·架构·低轨卫星星座
怀民民民15 小时前
开篇:基于 Cortex-M7、OpenMV 与双频 GNSS 的智能派件 AGV 设计与实现
单片机·嵌入式硬件·gnss·openmv·智能车