单片机
返回首页

51单片机用三种方法实现流水灯

2021-10-29

一、数组流水灯

定义一组数组分别对应点亮LED1~7

然后利用for循环赋值给p2从而实现流水灯


#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数组

 


// 函数功能:毫秒延时

void delay(uint z)

{

uint x,y;

for(x = 0; x < z; x++)

for(y = 0; y < 113; y++);

}


void main()

{

uchar i;

while(1)

{

for(i=0;i<8;i++)

{

P2 = table[i];

delay(300);

}

}

}

二、移位函数流水灯

先定义p2为1111 1110

然后利用_crol_和_cror_函数进行移位

_crol_循环往左移一位,地位的补去高位,cror 循环往右移一位,高位的补去低位


#include

#include //_crol_和_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()

{

   temp = 0xfe;

   P2 = temp;

   delay(100);

   while(1)

   {

      temp = _crol_(temp, 1);//循环往左移一位,地位的补去高位

      P2 = temp; //_cror_ 循环往右移一位,高位的补去低位

      delay(100);

   }

}

三、移位运算符流水灯

先定义p2为1111 1111

然后用for循环<<和>>进行移位

<<将p2的值左移1位(高位丢弃,低位补0),>>将p2的值右移1位(低位丢弃,高位补0)


#include  //单片机头文件 

void delay(unsigned int xms);//延时函数声明

void main()

{

unsigned char i,j;//定义无符号字符型变量i和j(范围为0~255)

while(1) //重复执行while循环体的程序

{

i=0xff; //给i赋值1111 1111

P2=i; //给P2端口赋i的值 

delay(500); //延时500ms

for(j=0;j<8;j++)//循环8次

{

i=i<<1; //将i的值左移1位(高位丢弃,低位补0)

P2=i; //将i的值赋给P2端口

delay(500); //延时500ms

}

}


void delay(unsigned int xms)

{

unsigned int i,j; //定义无符号整形变量i(范围为0~65535)

for(i=xms;i>0;i--) //执行xms次即延时x毫秒

for(j=115;j>0;j--); //延时1ms(给i赋1ms的延时值,循环体为空时执行i--指令115次为1ms)

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章