2018-05-26 11:04:16 nanfeibuyi 阅读数 3915
  • 单片机控制第一个外设-LED-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4063 人正在学习 去看看 朱有鹏

单片机 流水灯

一、简述

    通过Proteus仿真单片机最小系统+流水灯的显示电路。用Keil编写相应执行文件。

    源码、仿真电路图打包:链接:https://pan.baidu.com/s/1ZetoHZGz-jebnAd_BQGAUg 密码:h8jc

二、效果

三、工程结构

1、Keil编程

2、仿真电路图

四、源文件

LiuShui.c文件

#include<reg51.h>

//void Delay1ms(unsigned int count) //软延时count毫秒
//{
//	unsigned int i,j;
//	for(i=0;i<count;i++)
//	for(j=0;j<120;j++);
//}

void Delay1ms(unsigned int count)//延时count*50ms
{
	unsigned int i;
	TMOD=0x01;			   //选用定时器0且工作在方式1
	TH0=0x3c;			  //设置初值0x3cb0
	TL0=0xb0;
	TR0=1;      //开启定时器
	for(i=0;i<count;i++) //循环count次,每次定时50ms,总共count*50ms
	{	
		while(TF0!=1);// 每次定时50ms (溢出时才会跳出循环)
		TH0=0x3c;	 //重置初值0x3cb0
		TL0=0xb0;
		TF0=0;		   //软置溢出位
	} 
	TR0=0;      //关闭定时器
}

void main()
{
	unsigned char LEDIndex = 0;	  //指示第几个灯
	bit LEDDirection = 1; //控制流水灯依次亮灭的方向

	while(1)			  
	{
		if(LEDDirection)			//正方向,灯由上往下亮灭
			P1 = ~(0x01<<LEDIndex);	  //P1寄存器控制P1并口	 电压为0时灯亮,先将要亮灯的某一位置1,其余置0,然后取反,就变为只有指定位为0,然后移位实现其他位置0
		else
			P1 = ~(0x80>>LEDIndex);	
		if(LEDIndex==7)
			LEDDirection = !LEDDirection;	//到了最后一盏灯,改变灯的亮灭方向
		LEDIndex = (LEDIndex+1)%8;	 //	  每次加一,%8保证 LEDIndex	取值在0~7之间
		Delay1ms(2); //延时100ms
	}
}

 

五、代码说明

 

    选用单片机的P1端口8只引脚作为输出脚,1只引脚控制1只LED灯。设置P1_0脚为低电平,使得第1只LED灯点亮,并延时一点时间,然后设置P1_0脚为高电平,熄灭第1只LED,以此同理控制其余7只引脚。比如:

11111110   P1_0脚为低电平,使得第1只LED灯点亮

11111101   P1_1脚为低电平,使得第2只LED灯点亮

11111011   P1_2脚为低电平,使得第3只LED灯点亮

11110111   P1_3脚为低电平,使得第4只LED灯点亮

11101111   P1_4脚为低电平,使得第5只LED灯点亮

11011111   P1_5脚为低电平,使得第6只LED灯点亮

10111111   P1_6脚为低电平,使得第7只LED灯点亮

01111111   P1_7脚为低电平,使得第8只LED灯点亮

P1寄存器有8位,分别控制对应的8个引脚。

正方向:从第1只LED等--》第8只LED灯

我们可设置初值为11111110,然后每左移1位,得到下一个流水灯的设置值

而这个初值可以用 00000001的取反来表示即 11111110=~(00000001)=~(0x01)

反方向:从第8只LED等--》第1只LED灯    ~(0x80)=~(10000000)=01111111

六、工程建立

1、编写执行程序

(1)新建Project  (默认操作即可)

(2)选择cpu型号

(3)设置Project  属性

(4)新建C文件,编写相应代码

(5)将C文件添加到工程

(6)编译生成hex文件

2、仿真电路

选择hex文件

元件旋转翻转:

快速添加标签(P1_0,P1_1,P1_2...),点击“LBL"标签,然后按"a"

 

=================================回复 weixin_44582500 这位兄弟=============

搜索相关元件:

2019-02-20 17:36:42 weixin_44668427 阅读数 308
  • 单片机控制第一个外设-LED-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4063 人正在学习 去看看 朱有鹏

单片机之入门级流水灯

引言

对于绝大多数初入单片机坑的学者,上手单片机所尝试的第一个程序都是流水灯,究其原因,与单片机的引脚结构以及程序简易程度有很大关联。所谓流水灯,就是单片机上的8颗LED灯依次点亮,当点亮完第八个灯后再返回点亮第一个,同一时刻,有且只有唯一一颗LED点亮,执行后的效果就跟流水一样。

实现方法

要实现流水灯的效果,有很多种不一样的方法,这里我们采用按位运算的方法写一下流水灯的程序。
既然流水灯是8颗LED灯依次点亮,同一时刻,有且只有唯一一颗LED点亮,那么我们为了实现这一效果,就需要把八颗LED的点亮时间依次分别间隔开来,这里很直接的就能够想到延时,八颗LED分别在不同时刻点亮,就需要用到我们的按位移动,依次的移动响应的引脚以点亮LED。

  1. 延时
  2. 按位移动

由此我们能够将延时写成一个函数,以实现延时功能,直接利用主函数main实现LED的按位移动与点亮

延时函数

void delay(void)   
{
    unsigned int a,b;
        for(b=500;b>0;b--)
            for(a=100;a>0;a--);
 }

按位移动LED,使LED依次点亮

void main()
{
	 while(1)
 	{
 	 	P0=i;
 		i<<=1;		//按位移动一位
  		delay();	//使用延时函数,将LED点亮时间间隔开
  		if(i==0x00)	//当点亮到第八个灯时,跳回第一个灯
   		i=0x01;
 	}
}

这里就将程序的主体写的差不多了,接下来看看完整版的吧

#include <reg52.h>
void delay(void)   //延时函数
{
    unsigned int a,b;
        for(b=500;b>0;b--)
            for(a=100;a>0;a--);
 }
 void main()
{
  	while(1)
  	{
  		int i=0x01;
    		P0=i;
   		i<<=1; 			//按位移动一位
    		delay(); 		//使用延时函数,将LED点亮时间间隔开
   		if(i==0x00)    i=0x01;	//当点亮到第八个灯时,跳回第一个灯	
	}
}

本程序采用按位移的方法实现流水灯的运作,属于比较简单直接的方法,另外还有其他一些方法,留待下次有机会再次分享,第一次写博客,心情激动,有不足之处,还望海涵,多多指点。

2019-10-25 11:02:57 qq_42188312 阅读数 33
  • 单片机控制第一个外设-LED-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4063 人正在学习 去看看 朱有鹏

单片机实现简单LED流水灯

#include"reg52.h"
sbit led=P2^0;
void delay(int num){
	while(num--){
	}
}
void main(){
   int  i;
   while(1){
	   for(i=0;i<8;i++){
	   P2=~(0x01<<i);#移位操作,再取反
	   delay(50000);
   }
  }
}
2018-03-24 20:32:58 chengshunhang 阅读数 2239
  • 单片机控制第一个外设-LED-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4063 人正在学习 去看看 朱有鹏

学习单片机最基础的一个实验就是流水灯了。

在实验之前必须的准备工作有:

1.windows系统电脑一台。

2.编译软件keil

3.烧写软件stc-isp

4.单片机(我用的是stc89c52)

5.usb转窜口线

这样就可以开始了

一.

首先使用keil软件创建C语言文件

流水灯代码为:

#include <reg52.h>//52系列的头文件
#include <intrins.h>//带有_crol_函数的头文件
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
uchar led;
void main()
{
led=0xfe;
P1=led;
while(1)
{
delayms(500);//500ms的延迟
led=_crol_(led,1);//将led变量向左移一位
P1=led;
}
}
void delayms(uint a)//延时函数
{
uint x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);//经过调试得出大概
}

注意点:

1.编译完后记得生成hex文件(烧写是用到)

2.调整频率为11.0592(正好为一个机器周期)

二.烧写

在使用stc-isp时,将刚刚生成的hex文件写入。

选择你说用的单片机型号

先断电然后开始再开电。

这样就完成了一个简单的流水灯了。

2020-01-01 23:14:31 liangmaoxuan 阅读数 265
  • 单片机控制第一个外设-LED-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4063 人正在学习 去看看 朱有鹏

51单片机流水灯原理

在实验之前必须的准备工作有:

1.单片机 STC90C51

2.编译软件keil

3.烧写软件

4.面包板

5.发光二极管

实验说明:通过单片机芯片,定时在引脚P00,P01,P02,P03循坏输出高电平,制作流水灯效果

重要端口:

 

原理说明:(红色部分为该实验电路图)

电流顺序:VCC正极进入 》 芯片P0.0触发一个高电平 》 LED0二极管 》 EA 》 GND负极流出

 

 

C语言编程烧写代码:

/**************************************************************************************
*		              LED闪烁实验												  *
实现现象:下载程序后指示灯闪烁
注意事项:无																				  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


sbit led0=P0^0;		 //将单片机的P0.0端口定义为led
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{
	while(1)
	{
		led0=0;
		delay(50000); //大约延时450ms
		led0=1;
		delay(50000); //大约延时450ms
		led1=0;
		delay(50000); //大约延时450ms
		led1=1;
		delay(50000); //大约延时450ms
		led2=0;
		delay(50000); //大约延时450ms
		led2=1;
		delay(50000); //大约延时450ms
		led3=0;
		delay(50000); //大约延时450ms
		led3=1;
		delay(50000); //大约延时450ms	
	}		
}

 

 

 

总结不好多多担待,文章只单纯个人总结,如不好勿喷,技术有限,有错漏麻烦指正提出。本人QQ:373965070

 

51单片机上设置流水灯程序

博文 来自: qq_45400902
没有更多推荐了,返回首页