📄 lesson1._c
字号:
/*******************************************
文件:LED.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED
备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#define uchar unsigned char
#define uint unsigned int
/*******************************************
函数名称: Delayms
功 能: 延长点亮或者熄灭LED的时间
参 数: ms 延长多少毫秒
返回值 : 无
********************************************/
void Delayms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
/*******************************************
函数名称: One_led
功 能: 点亮或者熄灭指定的LED
参 数: number--指定的LED
light--为1的时候为点亮LED,为0的时候为熄灭LED
返回值 : 无
/********************************************/
void One_led(uchar number,uchar light)
{uchar i;
if(light==1) //点亮操作
{
PORTA|=BIT(number); //更新数据
Delayms(10); //调整时序
}
else
{
PORTA&=~BIT(number); //更新数据
Delayms(10); //调整时序
}
}
/*******************************************
函数名称: All_led
功 能: 点亮或者熄灭全部LED
参 数: light--为1的时候为点亮全部LED,为0的时候为熄灭全部LED
返回值 : 无
/********************************************/
void All_led(uchar light)
{
if(light)
{
PORTA=0XFF; //输出数据
Delayms(5); //调整时序
}
else
{
PORTA=0X00; //输出数据
Delayms(5); //调整时序
}
}
/*******************************************
函数名称: Flow_led
功 能: 流水灯(循环一次)
参 数: MS--点亮相邻LED的时间间隔,单位是毫秒
返回值 : 无
/********************************************/
void Flow_LED(uchar MS)
{
uchar i;
for(i=0;i<8;i++) //循环8次,8个LED依次点亮
{
All_led(0); //全部熄灭
One_led(i,1); //点亮指定的LED
Delayms(MS); //延时指定的时间
All_led(0); //全部熄灭
}
}
/*******************************************
函数名称: Flash_led
功 能: 闪烁指定的LED(第几盏就闪烁几次)
参 数: number--指定的LED
MS--LED闪烁的时间间隔
返回值 : 无
/********************************************/
void Flash_LED(uchar number,uchar MS)
{
uchar time=6;
for(;time>0;time--)
{
All_led(0); //熄灭所有的LED
One_led(number,1); //点亮指定的LED
Delayms(MS); //延时指定的时间
All_led(0); //熄灭所有的LED
Delayms(MS); //延时指定的时间
One_led(number,0); //熄灭指定的LED
}
}
/*******************************************
函数名称: main
功 能: 1. 流水灯 2.闪烁指定的LED
参 数: 无
返回值 : 无
/********************************************/
void main()
{
uint b,i;
b=0;
DDRA=0XFF; //b指定闪烁的LED
while(1)
{
if(b<3600)b++,b++;
if(b%2==0)b++;
if(b==3600)b=0;
i=(int)(b%8>0);
switch(i)
{
case 0:
Flow_LED(200); //i=0,以流水灯的方式显示
break;
case 1:
Flash_LED(b%8,100); //i=1,以闪烁灯的方式显示
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -