ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

51单片机实验程序——点亮灯、灯闪烁、流水灯

2021-02-01 19:30:36  阅读:369  来源: 互联网

标签:main P1 点亮 void 51 unsigned 单片机 include


注意:本实验采用清翔电子51单片机开发板(同样的51单片机开发板,不同型号,内部设计会有一定差异,程序不一定适用)
在这里插入图片描述
1、点亮一个灯

#include <reg52.h>   //引用51头文件

sbit LED1 = P1^0;     //位地址声明,注意:sbit 必须小写,P 大写!

void main()     //头文件
{
	LED1 = 0;      //点亮P1.0上的小灯
}


效果图:在这里插入图片描述
点亮多个灯的方法:简单来说,多sbit定义几个就行,在此不再展开。
2、闪烁一个灯

#include <reg52.h>

sbit LED1 = P1^0;
unsigned  int i = 0;//定义一个无符号整数(声明部分)

void main()  //void即函数类型,无返回值
{
	
	while (1)
	{
		LED1 = 0;    	//点亮小灯
		for (i=0; i<30000; i++);	//延时
		LED1 = 1; 			//熄灭小灯
		for (i=0; i<30000; i++);	//延时
	}
}

现象:点亮的第一个灯闪烁

闪烁全部灯

#include<reg52.h>

unsigned int i;  //无符号整型,范围0~65535

void main()
{
	while(1)  //大循环
	{
		P1 = 0x00;  //全亮
		i = 65535;	
		while(i--); //延时
		P1 = 0xff;	//全灭
		i = 65535;	
		while(i--); //延时
	}	

}

因为是所有灯,所以直接用取反指令也可 P1=~ P1;
现象:在这里插入图片描述

3、流水灯
方法一

#include<reg52.h>
unsigned int i=0;			//无符号整型 范围0-65535
unsigned char cnt=0;  //无符号字符型 范围0-255,省字节,所以用这个,无符号整型也可以的
void main()
{
	while(1)				//大循环
	{
			for(cnt=0;cnt<8;cnt++) //最多移动7位,加上不移动,总共八次
		{
			P1 = ~(0x01<<cnt);			//左移cnt位,然后取反,刚好达到效果
			for(i=0;i<30000;i++);	//延时
		
		}
	}

}

现象:左移依次循环点亮

在这里补充一下左移的知识,
若P1=0xfe,即二进制为1111 1110
P1<<1;P1左移一位后
为1111 1100,移动时自动填零,所以上述程序采用了取反,来达到效果

方法二
使用这个字符循环左移库函数_cror_

#include <reg52.h>	 //包含51头文件
#include <intrins.h> //包含移位标准库函数头文件,这里用到了这个_crol_
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
} 
void main()//main函数自身会循环
{
	temp = 0xfe;
	P1 = temp; //1111 1110  初值LED1亮
	delay(100);//毫秒级延时 100毫秒
	while(1)
	{
		temp = _crol_(temp, 1);//字符循环左移
		P1 = temp;//移位完成后赋值给P1 每个一个灯点亮
		delay(100);//毫秒级延时 100毫秒
	}	
}  

现象:左移依次循环点亮
补充下这个_cror_:
如果

a=0xfe;//1111 1110
b=_crol_(a,1) ;//左移1位后将高位补低位,1111 1101

总结一下:方法千万条,多练第一条

标签:main,P1,点亮,void,51,unsigned,单片机,include
来源: https://blog.csdn.net/yyq7878748/article/details/113523314

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有