一、程序结构
二、程序源码
1、main.c
/*******************************************************************************
Platform : ATmega16_Basic_V1.1开发板(http://bbs.armavr.com/)
Project : 范例2:8种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、8种LED点亮模式,注意学习算法和思路
7、程序调用,头文件编写方法
*******************************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "led.h"
void main(void)
{
int l,m,n,o,p,q,r,s,i,j;
DDRA =0XFF; //端口输出
PORTA=0X00; //输出低电平,LED点亮
DDRB =0x00; //端口上拉,不使用的端口建议上拉,不要使其悬浮
PORTB=0xFF;
DDRC =0X00;
PORTC=0XFF;
DDRD =0X00;
PORTD=0XFF;
for (r=0;r<5;r++)
{
for(l=0;l<5;l++) //模式1:顺序点亮
{
for (i = 0; i < 8; i++) //顺序单个点亮LED
LED_01(i);
for (i = 6; i > 0; i--) //逆序单个点亮LED
LED_01(i);
}
LED_off();
for(m=0;m<5;m++) //模式2:顺序单个间隔点亮
{
for (i = 0; i < 8; i += 2) //顺序间隔点亮LED
LED_01(i);
for (i = 7; i > 0; i -= 2) //逆序间隔点亮LED
LED_01(i);
}
LED_off();
for(n=0;n<5;n++) //模式3:间隔点亮
{
for (i = 2; i < 8; i++) //间隔顺序同时点亮
LED_02(i);
for (i = 6; i > 2; i--) //间隔逆序同时点亮
LED_02(i);
}
LED_off();
for(o=0;o<5;o++) //模式4:相临点亮
{
for (i = 1; i < 8; i++) //相临顺序同时点亮
LED_03(i);
for (i = 6; i > 1; i--) //相临逆序同时点亮
LED_03(i);
}
LED_off();
for(p=0;p<5;p++) //模式5:发散聚集点亮
{
for(i=0;i<4;i++) //发散点亮
LED_04(i);
for(i=2;i>0;i--) //聚集点亮
LED_04(i);
}
LED_off();
for(q=0;q<5;q++) //模式6:四四点亮
{
for(i=0;i<4;i++) //四四顺序点亮
LED_05(i);
for(i=2;i>0;i--) //四四逆序点亮
LED_05(i);
}
LED_off();
for(s=0;s<5;s++) //模式7:四四点亮
{
for(i=0;i<2;i++) //四四顺序点亮
LED_06(i);
}
LED_off();
for(j=0;j<10;j++) //模式8:全部点亮熄灭
{
LED_on();
LED_off();
}
}
//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); //调用延时程序
}
void LED_02(int i) //间隔点亮
{
PORTA = BIT(i)|BIT(i-2);
DelayMs(100);
}
void LED_03(int i) //相临点亮
{
PORTA = BIT(i)|BIT(i-1);
DelayMs(100);
}
void LED_04(int i) //发散聚集点亮
{
switch(i)
{
case 0ORTA=0x18;DelayMs(100);break; //延时100ms
case 1ORTA=0x24;DelayMs(100);break;
case 2ORTA=0x42;DelayMs(100);break;
case 3ORTA=0x81;DelayMs(100);break;
default:break;
}
}
void LED_05(int i) //00,0F,F0,FF方式显示
{
switch(i)
{
case 0ORTA=0xFF;DelayMs(100);break; //延时100ms
case 1ORTA=0xF0;DelayMs(100);break;
case 2ORTA=0x0F;DelayMs(100);break;
case 3ORTA=0x00;DelayMs(100);break;
default:break;
}
}
void LED_06(int i) //间隔同时点亮或熄灭
{
switch(i)
{
case 0ORTA=0X55;DelayMs(100);break; //延时100ms
case 1ORTA=0XAA;DelayMs(100);break;
}
}
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);
void LED_02(int i);
void LED_03(int i);
void LED_04(int i);
void LED_05(int i);
void LED_06(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条评论)
登录后参与讨论