📄 key.c
字号:
#include <macros.h>
#include "includes.h"
//#pragma interrupt_handler icp_time1:6
//#define BIT(x) (1<<(x))
#define uchar unsigned char
#define uint unsigned int
const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,79,71};//七段译码字形表
const uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar ledbuff[6];//显示缓冲区
uchar led[6];
uint oldcount;
uint newcount;
/*
键盘扫描函数
读取当前键盘的状态
有按键按下返回相应按键值
无按键按下返回"0x00"
*/
uchar key_read(){
uchar i;
DDRA = 0x00;/*获取列地址*/
PORTA = 0x0F;
DDRA = 0xF0;
i = PINA;
DDRA = 0x00;/*获取行地址*/
PORTA = 0xF0;
DDRA = 0x0F;
i&=PINA;
DDRA = 0x00;/*输出复位*/
PORTA = 0xFF;
switch (i) {/*将按键码转换成键值*/
case 0x81: return 0x00;
case 0x82: return 'a';
case 0x84: return 'b';
case 0x88: return 'c';
case 0x41: return '1';
case 0x42: return 0x02;
case 0x44: return 0x03;
case 0x48: return 'd';
case 0x21: return 0x04;
case 0x22: return 0x05;
case 0x24: return 0x06;
case 0x28: return 'e';
case 0x11: return 0x07;
case 0x12: return 0x08;
case 0x14: return 0x09;
case 0x18: return 'f';
default : return 0x00;
}
}
/*****************************************
延时1MS
******************************************/
void delay_ms()
{uint i;
for(i+0;i<1142;i++)
;
}
void delay(uint t)
{uchar i;
for(i=0;i<t;i++)
;
}
/****************************************
mcu初始化
*****************************************/
void init()
{ //DDRA=0x00;
DDRD=0xff;
DDRB=0xff;
// PORTA=0xff;
PORTB=0xff;
PORTD=0xff;
}
void main()
{ uchar key;
uchar i;
uchar x_position;
uchar *space = " ";
Init_LCD();
//PORTD = 0xff;
//DDRD = 0xf0;
PORTA = 0xff;
DDRA = 0xf8;
LCD_DisplayString(1,1,"key scan test");
x_position = 2;
init();
for( ; ; )
{
key=key_read();
//针对4X4的键盘
switch(key)
{
case 1:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('1');
break;
case 2:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('2');
break;
case 3:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('3');
break;
case 4:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('4');
break;
case 5:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('5');
break;
case 6:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('6');
break;
case 7:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('7');
break;
case 8:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('8');
break;
case 9:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('9');
break;
case 10:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('*');
break;
case 11:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('0');
break;
case 12:
LCD_Cursor(2,x_position);
LCD_DisplayCharacter('#');
break;
default : break;
}
//delay_nms(10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -