Linglong之AVR程例3 流水灯

发布者:心语如画最新更新时间:2016-03-03 来源: eefocus关键字:AVR程例  流水灯 手机看文章 扫描二维码
随时随地手机看文章
下面我们写流水灯的程序。LED程序的书写是我们学习单片机很基础的,但我是我觉的还是很重要的。能写好LED程序对我们理解AVR IO口的操作很有好处呀。

先这里简单的介绍下我的硬件,8个LED接到PA口上,公共端接地。

 

 

程序:

#include         //调用AVR IO口头文件

#include      //调用GCC本身的调时程序。

 

int main(void)            //主程序

{

unsigned char i = 0;        //定义循环变量

DDRA = 0xff;             //定义PA口为输出态

while(1)                  //主程序循环语句

{

         PORTA=0x01<    //循环点亮IO口的灯

         if(++i>=8)i=0;         //对循环变量的控制,让其循环8次

  _delay_ms(1000);         //延时程序

}

}
这里我们主要讲讲while(1)语句部分。

第一句:PORTA = 0x01<

     在主函数中我们定义了i变量,我们并对其赋值为0.(这里其实赋不赋0,效果都是一样的,但是我还是希望大家赋值,这样比较规范)

         这一句第一次执行的意思就是0x01左移0次,并将左移后的结果赋结PA口。0x01就是二进值的0000 0001,左移0位还是0000 0001.那么这样就是第一个LED点亮了。

第二句:if(++i>=8)i=0;

         这里用的是一个if语句,这句话的意思就是如果i的值大于等于8了,那么将其清0;如果没有i就是其本身的值。

这里一个要重点注意的地方就是++i,而不是i++。这两个的区别就是是先加再执行,还是执行了再加。这是有不同的,大家可以试着改一下,体会下这两个的不一样。

第三句就是延时了没有什么好说的。

 

现在我们再重新的回顾下这个while(1)语句的一个执行过程。首先0x01左移0位,将0x01赋给PA口,点亮第一个LED。再对i进行自加0+1=1,1〈 8则不对其进行清0操作,最后是延时一会。

第二次执行PORTA=0x01<

如此循环下去,当循环8次后i被清0,再从第一个LED亮起。

     这样流水灯的效果就出来了。

关键字:AVR程例  流水灯 引用地址:Linglong之AVR程例3 流水灯

上一篇:Linglong之AVR程例4 数码管一位显示
下一篇:Linglong之AVR程例1 点亮一个LED

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

畅学多功能MSP430F149实验箱流水灯实验
/******************************************************* 程序功能:单色流水灯测试 开发环境:IAR For MSP430 5.30 硬件环境:EESKILL多功能开发学习板/实验箱(2017版),MSP430F149核心板 接线说明:核心板P4口接底板JP15,具体为:P40-I1,P41-I2,P42-I3,P43-I4,P44-I5,P45-I6,P46-I7,P47-I8 跳线说明:无 实验现象:8个流水灯依次点亮 技术网站:http://www.eeskill.com 淘宝店铺:http://cepark.taobao.com 作
[单片机]
ARM学习1-LED流水灯
通过近段时间的不懈努力终于找到一个可以用来编译ARM 的Keil ,再利用Protuse软件进行模拟仿真。 开始了我的ARM学习之路 本实例是我学习ARM的第一个实例,仿真软件是利用的是Porteus,编译软件用的是Keil的RealView.MDK.3.2。 本程序是花样流水。一共有三个花样,可以通过按键选择不同的花样。通过此程序学习了ARM GPIO的处理和按键处理。 原理图: 程序代码: /*********************************************/ /* */ /* led.c: 花样流水
[单片机]
ARM学习1-LED<font color='red'>流水灯</font>
用51单片机点亮流水灯
1. 直接按位操作一个一个点亮 #include reg51.h //头文件 sbit LED0=P2^0; //位定义单片机接LED灯的端口 sbit LED1=P2^1; sbit LED2=P2^2; sbit LED3=P2^3; sbit LED4=P2^4; sbit LED5=P2^5; sbit LED6=P2^6; sbit LED7=P2^7; void delay()//延时函数 { unsigned char a,b; for(a=0;a 200;a++) for(b=0;b 200;b++); } void main()//主函数 { while(1) { LED0
[单片机]
Linglong之AVR5 数码管4位显示
现在我们让4位数码管显示4位数字,这里用的动态扫描法。 这里说一个这个写这个程序要注意的地方: 1 动态描的循序。首先是将数据送入段选端,再打开要显示位的位选端,再延时,最后就是开闭所有的位选端。这个如果没有处理好很容易出现鬼影。 2 延时。我这里是延时5ms。看了下延时效果还不错。 关键是理解动态扫描的思想:我们先点亮第一位数码管,亮5ms.再点亮第二位数码管,亮5ms.这时第一位是不亮的,如此循环下去。因为人眼5ms反映不过来,看上去就是4位数码管都是亮的。 比较简陋的源程序: #include avr/io.h
[单片机]
STM32库开发和流水灯
一、库开发 这里指的库开发使之调用库函数接口完成对相应寄存器的设置,相比较与51单片机编程中直接对寄存器操作而言,代码量跟查找手册看寄存器位再去配置,能节约很多时间。但是相对的对寄存器的位操作看得就没拿明白了,不知道库函数接口是如何配置各个寄存器位的了,这个时候可以将函数名复制下来去STM32固件库使用手册中查看相应了用法了。如下图所示复制了库函数之后,打开STM32固件库使用手册,复制到这里 然后回车,就会跳到相应的库函数说明那里,一下就清楚了它是如何配置寄存器位的,如下图 这个函数解释的很清楚了,使能和失能APB1的外设时钟,如果不理解参数是什么,可以复制参数能在末尾的表中找到相应的参数解释。 说一下我对库开
[单片机]
STM32库开发和<font color='red'>流水灯</font>
51 main.c/点阵式流水灯
/********************************************************************** * 文件名称: main.c/点阵式流水灯 * 程序作者: Kevin Chin * 程序版本: V1.0 * 编制日期: 2010/07/15 * 功能描述: 8*8的点阵式,流水灯。从左上角第一个点开始亮到最后一个点,如此循环。 * 编译器:Keil3 * 芯片:STC89C54,外部12MHZ晶振 * 邮箱:kevinchin@qq.com * 论坛:bbs.cepark.com * 基于浩豚电子的mini80e开发板 *********************************
[单片机]
单片机32位LED花样流水灯程序+原理图
最近有点忙,可还是腾出空来打造了一款 单 片机32位LED花样流水灯 !......................那是没办法的,那*丝急了 这是原理图: 呵呵,原理不怎么难吧 LED心形排布图: 这是PCB,我改过了的,减少了一些限流电阻! 将PCB打印好,弄好板,装好原件,再焊接好,看,这就是成品了 部分程序: #include reg52.h #define uchar unsigned char uchar flag=200; //////////////////////////////////////////////////////////////////
[单片机]
单片机32位LED花样<font color='red'>流水灯</font>程序+原理图
STM32按键控制流水灯 转换|加速|减慢
单片机源程序如下: #include stdio.h #include stm32f4xx.h #include led.h #include key.h int main(void) { int pwm_cmd; SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_Init(); KEY_Init(); EXTI_Config(); while(1) { }
[单片机]
STM32按键控制<font color='red'>流水灯</font> 转换|加速|减慢
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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