📄 led.c
字号:
/////////////////////////////////////////////////////////////
// 文件:LED.C //
// 环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4 //
// 硬件:ATMEGA16芯片 //
// 日期:2007年5月28日 //
// 功能:流水灯、按键INT0、INT1改变显示方式 //
// 备注: //
/////////////////////////////////////////////////////////////
#include <iom16v.h> //包含单片机型号头文件
#include <macros.h> //包含"位"操作头文件
#include <delay.h> //包含延时头文件
#include <AVR_XQV12.h> //包含通用函数及宏定义头文件
/*******************************************************/
/****** 函数名称: Scan_Int_Key() ******/
/****** 功 能: 扫描INT0、INT1按键,使键值改变******/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void Scan_Int_Key(void)
{
if(KEY0==0) //判断是否有键按下
{
delay_nms(10); //延时去抖
if(KEY0==0) //再次判断是否有键按下
{
while(KEY0==0); //等待按键释放
Key_Number++; //键值加1
if(Key_Number>2)
Key_Number=2;
}
}
if(KEY1==0) //判断是否有键按下
{
delay_nms(10); //延时去抖
if(KEY1==0) //再次判断是否有键按下
{
while(KEY1==0); //等待按键释放
Key_Number--; //键值减1
if(Key_Number>2)
Key_Number=0;
}
}
}
/*******************************************************/
/****** 函数名称: main() ******/
/****** 功 能: 流水灯、按键INT0、INT1改变显示方式**/
/****** 参 数: 无 ******/
/****** 返回值 : 无 ******/
/*******************************************************/
void main(void)
{
unsigned char i;
CPU_Init(); //初始化CPU
En_Led(); //使能LED
while(1)
{
switch(Key_Number) //选择LED扫描方式
{
case 0:
while(1)
{
for(i=0;i<8;i++)
{
LED=0xff; //LED全部熄灭
LED&=~BIT(i); //点亮相应位LED
delay_nms(100); //延时大约100毫秒
Scan_Int_Key(); //查询是否有按键按下
if(Key_Number!=0)
break; //如果键值改变退出
}
if(Key_Number!=0)
break;
for(i=9;i>1;i--)
{
LED=0xff; //LED全部熄灭
LED&=~BIT(i-2); //点亮相应位LED
delay_nms(100); //延时大约100毫秒
Scan_Int_Key(); //查询是否有按键按下
if(Key_Number!=0)
break; //如果键值改变退出
}
if(Key_Number!=0)
break;
}
break;
case 1:
while(1)
{
for(i=0;i<8;i++)
{
LED=0xff; //LED全部熄灭
LED&=~BIT(i); //点亮相应位LED
delay_nms(50); //延时大约50毫秒
Scan_Int_Key(); //查询是否有按键按下
if(Key_Number!=1)
break; //如果键值改变退出
}
if(Key_Number!=1)
break;
}
break;
case 2:
while(1)
{
for(i=9;i>1;i--)
{
LED=0xff; //LED全部熄灭
LED&=~BIT(i-2); //点亮相应位LED
delay_nms(50); //延时大约50毫秒
Scan_Int_Key(); //查询是否有按键按下
if(Key_Number!=2)
break; //如果键值改变退出
}
if(Key_Number!=2)
break;
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -