原创 ATmega16_Basic_V1.1范例1:LED流水灯(ICC)

2010-4-7 00:22 4343 17 17 分类: MCU/ 嵌入式

一、程序结构


a30c074e-c77e-4857-8f1f-7c7fabae6a9c.jpg


二、程序源码


1、main.c


/*******************************************************************************
Platform : ATmega16_Basic_V1.1开发板(http://bbs.armavr.com/
Project : 范例一:LED流水灯(ICC)
Clock F : 7.3728M
Software : ICCAVR7.14C
Author : 林夕依然
Version : 10.03.26
Updata :
comments :
1、以学习板八个LED灯为硬件电路,LED_EN短路块需装上
2、练习两种延时函数的程序编写
3、AVR单片机端口寄存器的使用及理解
4、善始善终,一开始就要重视程序的规范书写,模块化编写
5、必要的注释有助于提高程序的可读性,便于后续维护升级
6、单片机休眠模式练习
*******************************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "led.h"


void main(void)
{
int i,j;
DDRA =0XFF; //端口输出
PORTA=0X00; //输出低电平,LED点亮
DDRB =0x00; //端口上拉
PORTB=0xFF;
DDRC =0X00;
PORTC=0XFF;
DDRD =0X00;
PORTD=0XFF;


for(j=0;j<10;j++) //循环10次
{
for (i = 0; i < 8; i++) //顺序单个点亮LED
LED_01(i);
for (i = 6; i > 0; i--) //逆序单个点亮LED
LED_01(i);
}
LED_off(); //所有LED熄灭


//MCUCR=0x40; //空闲模式,CPU占用100%
//MCUCR=0x50; //ADC噪声抑制模式,CPU占用100%
//MCUCR=0x60; //掉电模式,CPU占用80%
//MCUCR=0x70; //省电模式,CPU占用4%
//MCUCR=0xE0; //Standby模式,CPU占用80%
MCUCR=0xF0; //扩展Standby模式,CPU占用4%
asm("sleep"); //CPU休眠指令,进入休眠状态。嵌入汇编指令
}


2、led.c


/*******************************************************************************
Platform : ATmega16_Basic_V1.1开发板(http://bbs.armavr.com/
Project : LED程序
Clock F : 7.3728M
Software : ICCAVR7.14C
Author : 林夕依然
Version : 10.03.26
Updata :
comments :
********************************/
#include <iom16v.h>
#include <macros.h>
#include "delay.h"


void LED_on(void) //打开所有LED
{
PORTA =0XFF;
Delay();
}


void LED_off(void) //关闭所有LED
{
PORTA = 0x00;
Delay();
}


void LED_01(int i) //LED亮灭控制
{
PORTA = BIT(i); //输出高电平
DelayMs(100); //调用延时程序
}


3、delay.c


/*******************************
Platform : ATmega16_Basic_V1.1开发板(http://bbs.armavr.com/
function :延时函数
Clock F : 7.3728M
Software : ICCAVR7.14C
Author : 林夕依然
Version : 10.03.26
comments :
1、两种方式实现延时
********************************/


/*---------------------------------------------------------------------------------
延时程序计算方法
计数个数j = 延时时间/6*晶振频率 - 1
---------------------------------------------------------------------------------*/


//方式一:
void Delay(void)
{
unsigned char a, b, c;
for (a = 1; a; a++)
for (b = 1; b; b++)
for (c = 0; c<10; c++) //循环次数=255*255*10
;
}


//方式二:1ms延时,准确性较Delay();高
void DelayMs(unsigned int i)
{
while(i--)
{
unsigned int j;
for(j=1;j<=1228;j++)
;
}
}


4、led.h


void LED_on(void);
void LED_off(void);
void LED_01(int i);


5、delay.h


void Delay(void);
void DelayMs(unsigned int i);


三、源码文件



四、支持信息


定购联系方式:
手机:15811279852
旺旺:linxiyiran
QQ :915657830
/ 605987969



技术支持:http://bbs.armavr.com/  
原理详解:http://bbs.armavr.com/thread-1848-1-1.html
精彩图集:http://bbs.armavr.com/thread-1845-1-1.html

文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条