单片机控制LED流水灯从中间向两边,从两边向中间

这个就是把 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的 应该是这样的 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;

#include< reg52.h>

#include< intrins.h>

#define uint unsigned int

#define uchar unsigned char

void delay();

void main()

{ uchar temp,temp1,temp2,a,b;

P3=0xff;

while(1)

{ for(b=3;b>0;b--)

{ temp=0xaa;

P1=temp;

delay();

temp=0x55;

P1=temp;

delay();

}

for(a=3;a>0;a--)

{ temp=0xfe;

for(b=7;b>0;b--)

{ P1=temp;

temp=_crol_(temp,1);

delay();

P1=temp;

delay();

}

}

temp1=0xfe;

temp2=0x7f;

for(a=8;a>0;a--)

{

temp=temp1&temp2;

P1=temp;

delay();

temp1=_crol_(temp1,1);

temp2=_cror_(temp2,1);

}

}

}

void delay()

{ uint a,b;

for(a=100;a>0;a--)

for(b=600;b>0;b--);

}

程序实现的第2种方法:下面是http://www.51hei.com单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。主要看个人喜好.

-----------------------------------------------------

#include< reg52.h>

unsigned char code TABLE[]={

0xFF,0xE7,0xC3,0x81,0x00, //从中间向两侧点亮

0xFF,0xE7,0xC3,0x81,0x00,

0xFF,0xE7,0xC3,0x81,0x00,

0xFF,0x7E,0x3C,0x18,0x00, //从两侧向中间点亮

0xFF,0x7E,0x3C,0x18,0x00,

0xFF,0x7E,0x3C,0x18,0x00

};

unsigned char i;

DELAY()

{

unsigned int s;

for(s=0;s<30000;s++);

}

main()

{

while(1)

{

if(TABLE[i]!=0x01)

{

P1=TABLE[i];

i++;

DELAY();

}

else

{

i=0;

}

}

}

汇编程序如下:; 花样流水灯(8个发光二极管以各种形式循环点亮); 功能:流水灯(8个发光二极管循环以1S间隔以各种形式循环点亮) ORG 0000H ;伪指令,指定程序从0000H开始存放 LJMP MAIN ;跳转指令,程序跳转至MAIN处执行 ORG 0030H ;伪指令,指定程序从0030H开始存放MAIN: MOV SP, #60H ;给堆栈指针赋初值 MOV P1,#0FFH ;给P1口赋值 MOV DPTR,#TABLE;查表LIGHT: MOV R4,#42 ;设置循环次数LOOP: MOV A,#42 ;给A赋初值 SUBB A,R4 ;将A的值与R4的值相减,结果存在A中 MOVC A,@A+DPTR ;将A+DPTR的值所对应的TABLE中的值赋给A MOV P1,A ;将A的值赋给P1口 LCALL DEL1S ;调用1S延时子程序 DJNZ R4,LOOP ;判断R4是否为0,不为0跳转,为0顺序执行 LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行;1S延时子程序(11.0592MHz晶振,误差0微秒)DEL1S: MOV R5, #089HDL1S0: MOV R6, #0A4HDL1S1: MOV R7, #013H DJNZ R7, $ DJNZ R6, DL1S1 DJNZ R5, DL1S0 RETTABLE: ;定义表格数据DB 0FFH ;全灭DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐个点亮DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H 080H 000H ;依次逐个叠加DB 080H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐个递减DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;两边靠拢后分开DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;两边叠加后递减DB 000H ;全亮 END ;程序结束指令C语言程序如下:/* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管以1S间隔以各种方式循环点亮) */#include//包含reg.52文件#define uint unsigned int//宏定义#define uchar unsigned char//宏定义void delay(uint z);//声明延时函数uint a;//定义循环用变量uchar code table[]={0xff,//全灭0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减0x00,//全亮};//定义循环用数据表格/*亮的现象:先是全灭,然后依次逐个点亮,然后依次逐个叠加,然后依次逐个递减,然后两边靠拢后分开,然后两边叠加后递减,最后全亮。循环!*/void main()//main函数{ a=0;//给a赋初值 while(1)//while循环 { P1=table[a];//将a所在的table中的值赋给P1口 delay(1000);//1S延时子程序 a++;//a的值加一 if(a==42)//测试a是否等于42 a=0;//给a赋值 }} void delay(uint z)//1ms延时子程序,通过z值改变延时时间{ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}

/*动态数显的设计思路,首先是我们要先知道怎样才能使哪个位亮,显示的段是什么数值,接下来就是中断时间

的问题了,设计步骤如下,如果要让八个数码管静态显示1到8,我们可以修改中断时间,如把50000改成100或更低*/

#include#include#define uint unsigned int

#define uchar unsigned char

sbit duan=P2^6;

sbit wei=P2^7;

uchar a,numw,numd;

uchar code tabled[]={

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f}; /*第二步骤,创建段显数值的对码表0~9数值.如果要显示1~8数值,最好多加前后两位数0跟9,

因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/

uchar code tablew[]={

0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f}; //第二步骤,创建位显,就是显示的位置,这个码表相对简单,用二进制表示11111110~01111111,是0的为八位数显管的位置

void main()

{

a=0; //定义个时间函数

numw=0; //附位显初值为0位

numd=0; //附段显初值为0位

TMOD=0X01; //第四步骤,附中断暂存器初值

TH0=(65535-50000)/256; //附中断请求时间初值,高8位

TL0=(65536-50000)%256; //附中断请求时间初值,低8位

EA=1; //开启总中断

ET0=1; //开启定时中断

TR0=1; //启动定时中断

while(1)

{

if(a==10) //第三步骤,执行速度,如果等20差不多是1秒,则往下执行,相当于单位数值亮的时间

{

a=0; //重新附值初值0

numd++; //段显值++

if(numd==9) //如果段值在对码表第9位则转下执行

numd=1; /*重新附值段显值对应对码表第1位,因为++所以0位并不在数码管中显示.

如果要显示,也会因为++而在第二轮中显示出*/

duan=1; //开启段显端

P0=tabled[numd];//附段显P0值对应段显值对码表

duan=0; //锁存

wei=1; //开启位显端

P0=tablew[numw];//附位显P0值对应位显值对码表

wei=0; //锁存

numw++; //相当于位显移位

if(numw==8) //如果位显值到对应位显对码表第八位则转下执行

numw=0; //重新附值位显值对应对码表第0位起

/*

下面是简单的单个数码管显示例证 第一骤, 修改后在第三步骤内

#include"reg52.h"

#include"intrins.h"

sbit duan=P2^6; //段显端口

sbit wei=P2^7; //位显端口

void main()

{

//P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写

duan=1; //开启段显端口

P0=0x06; //附值段显数值为1,可以查阅数码管电路图相对应显示的对码表

duan=0; //锁存,保持上一步段显状态,硬件说明请查阅74HC573功能

wei=1; //开启位显端口

P0=0xfe; //附值位显位置,01111111,左边第一位,为0的显示

wei=0; //锁存,保持上一步位显状态,硬件说明请查阅74HC573功能

}

*/

}

}

}

void timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应,

感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

}

展开阅读全文

单片机c语言编程实现中间向两边,再从两边向中间亮的程序流程图,单片机控制LED流水灯从中间向两边.doc...相关推荐

  1. 从两边往中间流水灯c语言程序,单片机控制LED流水灯从中间向两边.doc

    WORD格式.分享 精品.资料 单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把 先奇数亮再偶数亮,循环三次:一个灯上下循环三次:两个分别从两边往中间流动三次:再从中间往两边流动三次:不过 ...

  2. 从两边往中间流水灯c语言程序,单片机控制LED流水灯从中间向两边

    单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把先奇数亮再偶数亮,循环三次:一个灯上下循环三次:两个分别从两边往中间流动三次:再从中间往两边流动三次:不过这个程序实现的应该是这样的先奇数亮 ...

  3. 从两边往中间流水灯c语言程序,单片机控制LED流水灯从中间向两边,从两边向中间...

    这个就是把 先奇数亮再偶数亮,循环三次:一个灯上下循环三次:两个分别从两边往中间流动三次:再从中间往两边流动三次:不过这个程序实现的 应该是这样的  先奇数亮再偶数亮,循环三次:一个灯上下循环三次:两 ...

  4. STC15单片机 线性按键控制LED流水灯位移

    目录 1.现象 2.代码 3.LED模块原理图 4.线性键盘原理图 1.现象 程序下载完成后: 首先,由最右边的 LED1 点亮.当按下线性按键 S1 后,LED1 熄灭,LED2 点亮.其次,每按下 ...

  5. 51单片机 按键控制LED流水灯模式

    本章博客实现按键控制LED流水灯模式的功能 1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include <REGX52.H> #include ...

  6. 点亮led流水灯c语言程序,用数组的指针控制LED流水灯--C语言编程

    #include/************************************************* 函数功能:延时约150ms (3*200*250=150 000μs=150ms ...

  7. PIC单片机与PIC单片机C语言编程简介

    对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念.在大学的学习生涯中,经常用于教学的是MCS-51系列单片机.其实,除了MCS-51单片机外,还有一类单片机--PIC单片机. PI ...

  8. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  9. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

最新文章

  1. 三星15TB固态硬盘开卖 售价高达10000美元
  2. 易语言复制C指针,易语言教程API模块制作cmd复制文件
  3. 后续升级鸿蒙系统,荣耀部分机型后续将支持升级为鸿蒙系统
  4. MySQL - 触发器
  5. Linux下基于socket和多线程的聊天室小程序
  6. Linux下Wireshark的Lua: Error during loading 和 couldn't run /usr/bin/dumpcap in child process 的解决方案
  7. biodist r语言_R语言 Biostrings包 pairwiseAlignment()函数中文帮助文档(中英文对照)
  8. Windows 有哪些值得推荐的必装软件?
  9. .net 4.5 新特性 async await 一般处理程序实例
  10. 数字图像处理技术与人脸识别
  11. 金蝶EAS初始化操作手册之科目表
  12. Linux 痕迹清理
  13. 2DPCA人脸识别--python
  14. Excel2003 找回工作表密码方法
  15. 主叫用户、被叫用户、局内呼叫、局间呼叫、发话端局、受话端局 等定义
  16. 1.7.10服务器物品编辑器,我的世界背包编辑器1.7.10
  17. 基于机器学习的Adam 优化算法来提高深层神经网络的训练速度
  18. vissim跟驰模型_vissim简介
  19. Packetdrill(网络协议测试工具)
  20. 【商品架构day3】京东商品系统的演进之路 - 如何抗住亿级流量

热门文章

  1. [Unity][Fungus]强大的剧情叙述、问答对话、文字互动插件Fungus
  2. vat可以退税吗_英国VAT退税流程以及VAT退税政策
  3. Pandas详解三之Index对象
  4. IDEA代码对齐整洁快捷键
  5. Xcode12调试iOS 15.1启动页卡顿解决
  6. JS判断输入手机号码是否正确
  7. asis2016_b00ks
  8. 2019.10 全世界评分最高动画TOP100
  9. poi 操作excel 自动换行
  10. skype java_使用taskan的java-skype api以Java形式发送Skype消息