流水灯设计的几个程序

发布者:MagicGarden最新更新时间:2015-10-28 来源: eefocus关键字:流水灯  延时函数 手机看文章 扫描二维码
随时随地手机看文章
第一个程序:让流水灯,从左到右,第一个灯,一瞬间到最高亮度,然后降到最低亮度,之后,就是前两个灯重复第一个灯的情况,然后是前三个灯,然后是前4个灯,直到全部完成
程序如下:
#include
delay(k)//延时函数
{
while(k--)
{}
}
 
void main(void)//主函数
{
unsigned int 25000,n 1;
P1 0xfe;
for(n = 1;n <= 7;n++)//可读性提高
{
delay(t);
P1 (0xfe< delay(t);
P1 0XFF;
}
}
开始的时候不会用位运算,把每一步都写出来(一闪一灭,每一次都是用赋值来表示),数着到那一个闪烁,[转载]流水灯设计的几个程序
代码很复杂,经过提醒后,然后通过位运算,大大化简了代码的数量,而且可读性提高不少..
错误的原因是:不了解编译语言是否可以像c语言一样编译,想了一会,就用复杂的代码去写出这个程序.
 
第二个程序:让流水灯,从右到左,第一个灯从暗到明,然后到最亮程度就保持住这个状态,然后第二个灯紧接着从暗到明,然后是第3个灯,以此类推直到全亮,然后集体熄灭.
程序如下:

#include
delay(k)//延时函数
{
while(k--)
{}
}
 
void main(void)//主函数
{
unsigned int ,i 1;//都最后要看看那些是变量,那些是常量
const int t = 600;
 
 
P1 0XFF;
for(n = 1;n 9;n++ )
{
for(i 1;i <= t;i++)
{
delay(t-i);//通过每一次循环暗的时间减少
P1 (0XFF >> n);
delay(i);//通过每一次循环,亮的时间增多,在人的眼睛看来就可以逐渐增亮
P1 (0XFF >> (n-1));
}
}
P1 0XFF;
delay(25000);
}
开始的时候,认为通过闪烁次数和熄灭的次数一样,然后最后就亮了,就可以算是由暗到亮了,这个想法到最后烧写发现变化太快了,由暗到亮的过程不算表示出来,出现了最致命的错误...
其实我们主要是在亮和暗的时间方面做了缓慢的变化就可以表示有暗到亮的过程....
 
第三个程序:让流水灯,从左到右,第一个灯,从暗到明,然后亮度再降下来,然后是接下一个灯,就是依次明暗亮一个灯,一次只亮暗一个
程序如下:
#include
 
delay(k)//一个延时的函数
{
while(k--)
{}
}
 
void main()//主函数
{
unsigned int dark 0xfe,i 1,n 1;
const int 600;//珍惜内存啊,不变的可以用常量来表示
 
P1 0xff;
for(n 1;n<=8;n++)
{
for(i 1;i {
P1 =0XFF;
delay(t-i);
P1 (dark);
delay(i);
}
for(i i;i 0;i--)//由亮到暗
{
delay(t-i);
P1 (dark);
delay(i);
P1 0XFF;
}
dark (dark<<1)+1;//向左位移后,最右补0,如果没有+1,那就会亮起来,没有一次只亮一个
}
}
开始的时候,也是想到用加法去表示出来,用0xff< 在其中,for中的语句有一些可读性不高的语句for(;n<9;n++),这些语句,在看程序的时候就要找出那个已经赋值的n在那里,是什么值..最后就把他改为for(n = 1;n<9;n++)
在其中有一个常量用了变量的形式去表示,这个是占用内存的错误,因此,每一次写,就要想好这个量是用常量还是用变量,如果是常量,可以用宏的形式去表示,也可以用const 去表示..用宏更容易维护
 
 
最后,我想下一次,每一次烧写我的程序之前,都会用流水灯的程序运行运行一次,确保灯的连线闭路的...
而且,写完运行之后,就找找那些变量是不是变了,是不是可以用常量表示.
自己看自己的程序,是不是可以一路看到最后,走到那个一步是要找出他的大小..会有麻烦,不方便...就看是否可以进行修改...
关键字:流水灯  延时函数 引用地址:流水灯设计的几个程序

上一篇:STC单片机的自动程序下载--Auto ISP
下一篇:按键灯的亮灭

推荐阅读最新更新时间:2024-03-16 14:37

AVR单片机外部中断触发的流水灯程序
/* program name : 外部中断程序; 这费了我好几个小时的心血!成功的喜悦难以用言语表达! 概述: 8位流水非精确定时,一秒循环灯闪烁,等待外部中断一下降沿中断触发信号, 外部中断一旦触发,等待触发按键弹起(此时流水灯暂停状态),中断按键一旦弹 起,继续运行上一级程序(流水灯继续运行); accomplish time : 2014-2-7 22:47:15; */ #include avr/io.h #include avr/interrupt.h //中断必备的头文件; typedef unsig
[单片机]
STM32流水灯的几种实现方法
#include “stm32f10x.h” void RCC_Configuration(void);//2 void GPIO_Configuration(void);//GPIO void Delay(u32 count) { u32 i=0; for(;i count;i++); } int main(void) { RCC_Configuration();//3 LED_Init(); while(1) { GPIO_SetBits(GPIOA,GPIO_Pin_0);//第一灯亮 Delay(800000); //延时 GPIO_ResetBits(GPIOA,GPIO_Pin_0); //第一灯灭
[单片机]
51单片机之LED流水灯
数据类型 在写流水灯程序之前,我们了解一下数据类型。 使用对应数据时,应该注意溢出问题,若溢出编译器也有可能编译通过,但是执行结果是错误的。 流水灯 操作LED前必须先了解LED是什么电平点亮,LED连接在什么引脚上,通常需要查找原理图。此处我的8个LED连接在P2口,为低电平点亮(因为灌电流比拉电流能力强)。 1、函数式循环流水灯: #include reg52.h #include intrins.h //函数头文件 #define led P2 //对整个LED的P2端口进行定义 /* 延时函数 */ void delay(unsigned int del) //10ms * del { uns
[单片机]
51单片机之LED<font color='red'>流水灯</font>
STM32F407——流水灯
1、流水灯简化代码 2、AD7-8.。 #流水灯简化代码 #include sys.h #include delay.h //#include usart.h #include led.h //#include beep.h //#include key.h #include exti.h extern u8 onoff,dir,speed,change,key; extern u16 time; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组 delay_init(168); /
[单片机]
关于STM32 Systick 延时函数 变量全局引用的问题
有这样一段代关于systick.c,如下: #include SysTick.h volatile unsigned int TimingDelay ; // 精确延时在SysTick中断里用的计数变量 // 在全局变量里面一定要加上volatile关键字(易变的),否则在全局引用中容易造成编译器的传递错误 void SysTick_1ms_Configuration(void) { /* Setup SysTick Timer for 1 msec interrupts */ if (SysTick_Config(SystemFrequency / 1000)) { /* Capture error */ while (
[单片机]
一个流水灯的小程序
很久没有写51单片机程序了,写个小程序练练手 #include //包含头文件 #include #define uchar unsigned char uchar temp; void delayms(int ms); void main() { temp=0x01; P1=temp; //点亮第一个灯 while(1) { temp=_crol_(temp,1); delayms(600); P1=temp; } } void delayms(int ms) { int i,j; for(i=0;i for(j=0;j 120;j++); }
[单片机]
单片机点阵LED小灯实现流水灯的设计
独立的LED小灯可以实现流水灯,数码管可以显示多位数字,那点阵LED就得来显示一点花样了。 我们要显示花样的时候,往往要先做出来一些小图形,这些小图形的数据要转换到我们的程序当中去,这个时候就需要取模软件。给大家介绍一款简单的取模软件,这种取模软件在网上都可以下载到,大家来了解一下如何使用,先看一下操作界面,如图7-3所示。 图7-3 字模提取软件界面 鼠标点一下“新建图形”,根据我们板子上的点阵,把宽度和高度分别改成8,然后点确定,如图7-4所示。 图7-4 新建图形 点击左侧的“模拟动画”菜单,再点击“放大格点”选项,一直放大到最大,那我们就可以在我们的8*8的点阵图形中用鼠标填充黑点,就可以画图形了,
[单片机]
单片机点阵LED小灯实现<font color='red'>流水灯</font>的设计
PIC16F630的I/O口的操作流水灯
//实验目的:RC0-RC5口的流水灯,熟悉PIC16F630的I/O口的操作 #include PIC.h __CONFIG(0x31b4); //看门狗关;内部RC振荡,RA4/RA5做I/O,MCLR脚做复位 //------------------------------------ //延时函数 void delay() { int i; //定义循环变量 for(i=5000;i 0;i--) //循环次数控制 { NOP(); //消耗一个指令周期时间 NOP(); } } //------------------------------
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved