📄 m.c
字号:
#define KEYPORT PORTC
#define KEYPIN PINC
//PB port as led data port
#define LED_DATA_DDR DDRB
#define LED_DATA_PORT PORTB
#define LED_DATA_PIN PINB
//PD port as led select port
#define LED_ADD_DDR DDRD
#define LED_ADD_PORT PORTD
#define LED_ADD_PIN PIND
#include <avr/io.h>
#include <inttypes.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
uint8_t keyboard(void)
{
static uint8_t scancode=0xF7,tempnum=16,lastnum=16,currentnum=16,times=0;
switch(scancode)
{
case 0xF7:scancode=0xFB;break;
case 0xFB:scancode=0xFD;break;
case 0xFD:scancode=0xFE;break;
case 0xFE:scancode=0xF7;break;
default:scancode=0xF7;break;
}
KEYPORT=scancode;
switch(KEYPIN)
{
case 0xE7:tempnum=0;times=0;break;
case 0xD7:tempnum=1;times=0;break;
case 0xB7:tempnum=2;times=0;break;
case 0x77:tempnum=3;times=0;break;
case 0xEB:tempnum=4;times=0;break;
case 0xDB:tempnum=5;times=0;break;
case 0xBB:tempnum=6;times=0;break;
case 0x7B:tempnum=7;times=0;break;
case 0xED:tempnum=8;times=0;break;
case 0xDD:tempnum=9;times=0;break;
case 0xBD:tempnum=10;times=0;break;
case 0x7D:tempnum=11;times=0;break;
case 0xEE:tempnum=12;times=0;break;
case 0xDE:tempnum=13;times=0;break;
case 0xBE:tempnum=14;times=0;break;
case 0x7E:tempnum=15;times=0;break;
default:{
times++;
if(times==4)
{
tempnum=16;
times=0;
}
}break;
}
lastnum=currentnum;
currentnum=tempnum;
if(currentnum==lastnum)return(16);
else return(currentnum);
}
uint8_t ledcode[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x58,0x5E,0x79,0x71};
//uint8_t ledaddr[6]={0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; //for PD port pd5=0,
void Initi_Device(void)
{
LED_ADD_DDR=0xFF;
LED_ADD_PORT=0xFE;
LED_DATA_DDR=0xFF;
LED_DATA_PORT=0xFF;
}
SIGNAL(SIG_OVERFLOW1)
{
static uint8_t code_num=0;
code_num=keyboard();
if (code_num!=16)
LED_DATA_PORT=ledcode[code_num];
TCNT1L=0xB2;
TCNT1H=0xFF;
}
int main(void)
{
Initi_Device();
DDRC=0x0F;
PORTC=0xFF;
TCNT1L=0xB2;
TCNT1H=0xFF;
TCCR1A=0;
TCCR1B=5;
TIMSK=(1<<TOIE1);
LED_ADD_PORT=0xDF;
LED_DATA_PORT=0x3F;
sei();
for(;;)
{}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -