栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51单片机点亮流水灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51单片机点亮流水灯

单片机的最小系统:

 1.晶振电路

2.复位电路

3.电源电路

4.下载电路

  

各个电路具体的原理不清楚楚。

点亮led,led的单向导通,普中开发板采用共阳极接法,并在led后串联电阻限流,led阴极接51芯片,所以当51单片机I/O接口为低电平是,led导通发光,用逻辑0表示。

#include "reg52.h"//51单片机的头文件

sbit 	LED1=P2^0;// sbit为重定义  将p2.0定义成led1 ,后面可以用led1直接控制p2.0
void main()
{
    LED1=0;//低电平,led亮
   while(1)//空循环,应该可以删掉
   {
   
   }
}

 led闪烁

函数的运行和写法不了解

 #include "reg52.h"

 sbit LED1=P2^0;
 void delay_10us(int ten_us)
 {
 					  while(ten_us--)//延时函数,需要进一步学c语言了解
					  ;
 }
 void main()
 {
    	while(1)
		{
		LED1=0;
		delay_10us(50000);//led闪烁即为亮之后延时然后灭再延时,并循环
		LED1=1;
	    delay_10us(50000);
		}
 }

流水灯

循环里面加入别的端口的循环

#include "reg52.h"

sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
void delay_10us(int ten_us)
 {
 					  while(ten_us--)
					  ;
 }

void main()
{
while(1)
		{
		LED1=0;
		delay_10us(50000);
		LED1=1;
	    delay_10us(50000);
		LED2=0;
		delay_10us(50000);
		LED2=1;
	    delay_10us(50000);
		LED3=0;
		delay_10us(50000);
		LED3=1;
	    delay_10us(50000);
		LED4=0;
		delay_10us(50000);
		LED4=1;
	    delay_10us(50000);
		LED5=0;
		delay_10us(50000);
		LED5=1;
	    delay_10us(50000);
		LED6=0;
		delay_10us(50000);
		LED6=1;
	    delay_10us(50000);
		LED7=0;
		delay_10us(50000);
		LED7=1;
	    delay_10us(50000);
		LED8=0;
		delay_10us(50000);
		LED8=1;	   
		}		  
}

 或用for循环

 #include "reg52.h"

unsigned char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;//定义一个数组

void delay_10us(int ten_us)
 {
 					  while(ten_us--)
	 			  ;
 }

void main()
{
unsigned char a;
while(1)
		{
		for(a=0;a<8;a++)
		{
	     P2= tab[a] ;//即p2为tab数组中第a个元素
		delay_10us(50000);
		}
		}		  
}

因为之前有用sbit重定义,本想尝试定一个LED【a】的数组,来实现循环,用led【a】=0,delay,led【a】=1;delay模仿闪烁的那个程序实现,但是没成功。

#define LED P2	 //#宏定义 将p2端口定义为led
void delay_10us(int ten_us)
 {
 					  while(ten_us--)
					  ;
 }

void main()
{
          int i;
         LED = ~0x01;	   //   00000001  d8-d1 对应p2.7-p2.0
		 delay_10us(50000);
   		 while(1)
		 {
		 for(i=1;i<8;i++)
		 {
		 LED =  _crol_(LED,1);	//左移7次	左移0000 0001一次  变为0000 0010 以一个圆循环左移 
		 delay_10us(50000);
		 }
		  for(i=1;i<8;i++)
		 {
		 LED =  _cror_(LED,1);	//右移7次
		 delay_10us(50000);
		 }
		}	  
}

用移位的函数实现

#include "reg52.h"
#define LED P2
void delay_10us(int ten_us)
 {
 					  while(ten_us--)
					  ;
 }

void main()
{
  unsigned char a;
    while(1)
		{
	for(a=0;a<8;a++)
	{
	LED=~(0x01<

这一段是用移位操作符和for循环进行实现,移位0000 0001并将结果按位取反,使得只有一个led亮

仅是学习的记录

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号