51例程---流水灯改进版

2020-03-25来源: eefocus关键字:51  流水灯  改进版

(1)首先定义变量unsigned char a,初值等于0x80(10000000)

(2)8个状态,其实就是a依次右移0-7位

(3)利用C语言中移位运算符实现移位

C语言中的移位运算符,>>可以右移,<<可以左移。(无符号数移位:移出去的位丢掉了,空出来的位用0补。有符号位另当别论。)


例如:12345678---右移 = 01234567


例程1:


#include


void delay(void)

{

   unsigned char i = 100;

   unsigned char j = 100;

   while(i--)

   {

     while(j--);

}

} //延时函数



void main(void)

{  

     unsigned char i = 0;

unsigned char initial_value = 0x80;


     while(1)

{

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

  {

  P0 = (initial_value >> i);  //   这儿的initial_value的值在整个循环中一直是0x80

  delay();

  }

}


例程2:


void main(void)

{  

     unsigned char i = 0;


     while(1)

{

unsigned char initial_value = 0x80;

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

  {

  initial_value = (initial_value >> i);     //initial_value的值在每次循环中都会改变

  P0 = initial_value;

  delay();

  }


差别在于变量的作用域(请学习c语言)

关键字:51  流水灯  改进版 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492492.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于51单片机个8位数码管的简单拨号键盘
下一篇:关于这个错误 error C231: 'INT0': redefinition的原因以解决

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51例程---跑马灯
原理分析:什么是跑马灯(1)跑马灯和流水灯非常像,不同的是:流水灯是8颗LED其中7灭1亮,亮的在移动;跑马灯是8颗LED7亮1灭,灭的在移动。01111111 0x7f 1000000010111111 0xbf 0100000011011111 0xdf 00100000(2)编程实现跑马灯,必须用到C语言的2种技巧:左移(右移)、按位取反;C语言中~这个符号表示对一个数字按位取反,譬如一个数01111111按位取反后变成了10000000。而11011111按位取反后变成了00100000相反 01 左移例程:#include<reg51.h>void delay(void){   
发表于 2020-03-25
基于51单片机个8位数码管的简单拨号键盘
我们知道,在拨号是,每拨一位数字,前边拨的数字就要向左挪一位,我们可以用一个一位数组,通过移动数组中数字的移动和8位数码管的动态扫描来实现位置的移动。代码如下:#include "reg52.h"           //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;     //对数据类型进行声明定义typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;
发表于 2020-03-25
C51玩8x8LED点阵:PointGame
复制这段内容后打开百度网盘手机App,操作更方便哦打开软件后,新建8X8的图像,模拟动画,放大格点,用鼠标在白色窗口中点上自己想要的,取模方式,C51如果选择的是纵向(行选),那么列选是通用的0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe如果选择的是横向(列选),那么行选是通用的0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01更改纵向还是横向在参数设置-》其他选项里1.为了显示正确,必须先选通用的,再选另外一边2.一般另外一边在显示和延迟后需要消隐#include<reg52.h>#include<intrins.h>typedef
发表于 2020-03-25
C51玩8x8LED点阵:PointGame
51单片机——8X8点阵显示
74hc595.h:#ifndef __74hc595_H__#define __74hc595_H__/************************************位定义************************************/sbit DATA_IN = P1^0;         //串行数据输入sbit ST_CK = P1^1;         //存储寄存器时钟输入sbit SH_CK = P1^2;         //移位寄存器时钟输入/*****************
发表于 2020-03-24
基于51单片机的秒表和数显时钟
刚刚学过51单片机最重要的两个部分,定时器和中断,学完后应用定时器和数码管,首先,我们可以做出一个秒表程序,做出后,我们再在秒表的基础上,做一个数显时钟#include<reg52.h>sbit k1=P3^1;   //定义四个按键sbit k2=P3^0;sbit k3=P3^2;sbit k4=P3^3;sbit LSA=P2^2; //38译码器数码管位选sbit LSB=P2^3;sbit LSC=P2^4;typedef unsigned char u8;   //对数据类型进行声明定义typedef unsigned int u16;u8 code smgduan[]={0x3f
发表于 2020-03-24
多模式51单片机心形流水灯+呼吸灯+蜂鸣器音乐
=0;delay1(30);i=0;}  else if(m==music[i+1][0])  {TR0=1;delay1(n);TR0=0;pause();i++;} else {TR0=1;delay1(n);i++;} } }3)几种简易流水灯方式// 蜂鸣器音乐  [定时器产生音乐脉冲]void disp10() //状态10 从LED全部亮到全不亮(间断8格的3个LED开始逆时针熄灭){ for(i=0;i<9;i++) { P0=table5[i]; P2=table4[i]; P1=table4[i]; delay(100); } delay(300);}void
发表于 2020-03-20
多模式51单片机心形流水灯+呼吸灯+蜂鸣器音乐
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved