⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 AVR开发板实验源代码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 + -