一、程序结构
二、程序源码
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条评论)
登录后参与讨论