📄 app.c
字号:
#include "avr/io.h"
#include "util/delay.h"
#include "avr/pgmspace.h"
//#define _USE_SCAN_METHOD
#define DDRx_KEY DDRD
#define PINx_KEY PIND
#define PORTx_KEY PORTD
unsigned char Get_Key()
{
unsigned char temp=0,temp1,temp2;
unsigned char KEY_Number;
#ifndef _USE_SCAN_METHOD
////////////////////////////////线反转法/////////////////////
DDRx_KEY =0x0F;
PORTx_KEY=0xF0;
_delay_ms(1);
temp1=PINx_KEY;
DDRx_KEY =0xF0;
PORTx_KEY=0x0F;
_delay_ms(1);
temp2=PINx_KEY;
temp=(temp1&0xF0)+(temp2&0x0F);
#else
//////////////////////////扫描法///////////////////////////////
unsigned char i;
DDRx_KEY =0x0F;
PORTx_KEY =0xF0;
asm("nop");//
if((PINx_KEY&0xF0)!=0xF0)
{
_delay_ms(5);
if((PINx_KEY&0xF0)!=0xF0)
{
for(i=0;i<4;i++)
{
temp1 =~(1<<i);
PORTx_KEY =temp1;
asm("nop");//一定得加!也可加小延时。
if((PINx_KEY & 0xF0)!=0xF0)
{
temp2=PINx_KEY;
temp=(temp1 & 0x0F)+(temp2 & 0xF0);
}
}
}
}
#endif
switch(temp)
{
case 0xEE:
KEY_Number=0;
break;
case 0xDE:
KEY_Number=1;
break;
case 0xBE:
KEY_Number=2;
break;
case 0x7E:
KEY_Number=3;
break;
case 0xED:
KEY_Number=4;
break;
case 0xDD:
KEY_Number=5;
break;
case 0xBD:
KEY_Number=6;
break;
case 0x7D:
KEY_Number=7;
break;
case 0xEB:
KEY_Number=8;
break;
case 0xDB:
KEY_Number=9;
break;
case 0xBB:
KEY_Number=10;
break;
case 0x7B:
KEY_Number=11;
break;
case 0xE7:
KEY_Number=12;
break;
case 0xD7:
KEY_Number=13;
break;
case 0xB7:
KEY_Number=14;
break;
case 0x77:
KEY_Number=15;
break;
default:
KEY_Number=255;
break;
}
return KEY_Number;
}
const prog_char SegCode[16]={
/* Cathode common Smg display code*/
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisBuffer[8]={0,0,0,0,0,0,0,0};
void Scanf(void)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
PORTB = pgm_read_byte(&SegCode[DisBuffer[i]]);
PORTA|= (1<<PA4);
PORTA&=~(1<<PA4);
PORTB = (1<<i);
PORTA|= (1<<PA5);
PORTA&=~(1<<PA5);
_delay_ms(2);
}
}
int main(void)
{
unsigned char KeyNumber=0;
/* Set LED and Smg LE pin and USB-pull-up pin as output , databus as output */
DDRA |=(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7);
DDRB = 0xFF;
/* Off the LED display */
PORTB = 0xFF;
PORTA|= (1<<PA6);
PORTA&=~(1<<PA6);
/* Enable the USB pull-up */
// PORTA|= (1<<PA7);
// PORTB = 0x80;
PORTA&=~(1<<PA7);
// PORTB= 0xff;
while(1)
{
KeyNumber=Get_Key();
if(KeyNumber!=255)
DisBuffer[7]=KeyNumber;
Scanf();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -