📄 3x3key._c
字号:
/******************************************/
//文件名:3X3Key.c
//功能: 键盘扫描的应用
//作者: young
//时间: 2006.11.6
//目标MCU:ATmega8
//晶振: 8MHZ
/******************************************/
#include <iom8v.h>
#include "Delay.h"
//按键扫描函数,返回按键的值
unsigned char ScanKey(void)
{
unsigned char temp,temp1,key;
temp=PINC;
temp&=0x07;
switch(temp) //判断行中哪条线有低电平
{
case 0x06:
DDRC=0X07;
PORTC=0X38;
delay_us(1);
temp1=PINC;
temp1&=0x38;
switch(temp1) //判断列中哪条线有低电平
{
case 0x30: key=0x01; //得到键值
break;
case 0x28: key=0x02;
break;
case 0x18: key=0x03;
break;
default: key=0;
break;
}
DDRC=0X38;
PORTC=0X07;
break;
case 0x05:
DDRC=0X07;
PORTC=0X38;
delay_us(1);
temp1=PINC;
temp1&=0x38;
switch(temp1)
{
case 0x30: key=0x04;
break;
case 0x28: key=0x05;
break;
case 0x18: key=0x06;
break;
default: key=0;
break;
}
DDRC=0X38;
PORTC=0X07;
break;
case 0x03:
DDRC=0X07;
PORTC=0X38;
delay_us(1);
temp1=PINC;
temp1&=0x38;
switch(temp1)
{
case 0x30: key=0x07;
break;
case 0x28: key=0x08;
break;
case 0x18: key=0x09;
break;
default: key=0;
break;
}
DDRC=0X38;
PORTC=0X07;
break;
default:
key=0;
break;
}
return (key);
}
//主函数,扫描按键显示数据
void main()
{
unsigned char temp, keynum;
unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//初始化端口
DDRB=0xFF; //设置B口为输出模式
PORTB=0xFF; //置高电平
DDRC=0X38;
PORTC=0X07;
while(1)
{
PORTB=0x40;
temp=PINC;
temp&=0x7;
if(temp==0x7)//检测是否有按键按下
continue;
delay_ms(10);
temp=PINC;
temp&=0x7;
if(temp==0x7)//检测是否有按键按下
continue;
keynum=ScanKey();
PORTB=num[keynum];
while(temp!=0x7)
{
temp=PINC;
temp&=0x7;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -