|
//***********************************************************************
// 包含文件
//***********************************************************************
#include <string.h>
#include <stdio.h>
#define F_CPU 16000000 // 单片机主频为16MHz,用于延时子程序,熔丝位必须设置到外部高频晶振才行
#include <util/delay.h>
#include <avr/io.h>
#include <avr/iom128.h>
#include <avr/interrupt.h> //中断信号头文件
#include "Config.h"
//***********************************************************************
// 定义变量区
//***********************************************************************
uchar key;
//***********************************************************************
// IO端口初始化
//***********************************************************************
void system_init()
{
KEYPort |= (1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7); //四位独立按键连接在PD1/PD5/PD6/PD7上
KEYDDR = 0x00; //设置为输入,并且要打开上拉电阻
LED=0xFF; //LED灯IO口在PORTE
LEDDDR=0xFF; //设置为输出
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar keyboardscan(void)
{
uchar key_check;
uchar key_checkin;
key_checkin=KEYRead; //读取IO口状态,判断是否有键按下
key_checkin&= 0xE2; //读取IO口状态,判断是否有键按下
if(key_checkin!=0xE2) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
key_checkin=KEYRead;
if(key_checkin!=0xE2) //再次读取状态,判断是否有按键按下
{
key_check=KEYRead;
switch (key_check & 0xE2)
{
case 0xE0:key=1;break; //S1按下
case 0xC2:key=2;break; //S2按下
case 0xA2:key=3;break; //S3按下
case 0x62:key=4;break; //S4按下
}
}
}
else
{
return(key);
}
}
//*************************************************************************
// 主程序
//*************************************************************************
int main(void)
{
system_init(); //初始化端口,注意按键端口要打开上拉电阻,确保稳定
while(1)
{
keyboardscan(); //键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4
{
{
switch(key)
{
case 1: LED=0x7F;break; //给不同的键赋键值,键值1,亮1个LED灯
case 2: LED=0x3F;break; //给不同的键赋键值,键值2,亮2个LED灯
case 3: LED=0x1F;break; //给不同的键赋键值,键值3,亮3个LED灯
case 4: LED=0x0F;break; //给不同的键赋键值,键值4,亮4个LED灯
}
}
}
else
{
//LED=key; //没有按键的时候显示上次的键值
}
}
}
|
-
-
KEY4.zip
45.14 KB, 下载次数: 27, 下载积分: 黑币 -5
评分
-
查看全部评分
|