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

📄 key.c

📁 用ATMEGA16控制舵机转动,当按动中断按键时
💻 C
字号:
/*****************************
key.c
********************************/

#include "key.h"

 //按键端口初始化
void keyPort_init(void)    
{
	//DDRD = 0x33;           //PD2\3\6\7定义为输入口
	//PORTD |= key2 | key3 | key4;   //按键key1\2\3内部上拉电阻使能
	
	DDRD = 0x00;           //PD口全部为输入脚
	PORTD = 0xfb;   //按键key1内部上拉电阻不使能,其余使能
	
}
  
//按键检测
unsigned char keyScan(void)  
{
	if((!(PIND & key4)) || (!(PIND & key3)) ||
	           (!(PIND & key2)) || ((PIND & key1)))            //是否有按键按下
	{
		Delayms(20);
		if((!(PIND & key4)) || (!(PIND & key3)) ||
	           (!(PIND & key2)) || ((PIND & key1)))    //按键消除抖动后,是否有按键按下
		{
			return 1;                       //有按键按下,返回1
		}
		return 0;              //干扰信号,返回0
	}
	return 0;                      //没有按键按下,返回0
}
    
//获取按键值
unsigned char KeyValue(void)
{
	if(keyScan())                //判断那个按键被按下
	{
		if(!(PIND & key4))      //按键4被按下,则返回键值4
		return 4;
		if(!(PIND & key3))   //按键3被按下,则返回键值3
		return 3;
		if(!(PIND & key2))      //按键2被按下,则返回键值2
		return 2;
		if(PIND & key1)        //按键1被按下,则返回键值1
		return 1;		
	}
	return 0;       //没有按键按下,返回0
}

//us级别的延时函数
void Delayus(unsigned int lus)
{
	while(lus--)
	{
		_delay_loop_2(4);      //_delay_loop_2(1)是延时4个时钟周期,参数为3则延时12
		           //个时钟周期,本实验用12M晶体,则12个时钟周期为12/12=1us
    }
}

//ms级别的延时函数
void Delayms(unsigned int lms)
{
	while(lms--)
	{
		Delayus(1000);        //延时1ms
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -