?? 16f877a.txt
字號:
#include<pic.h>
//pic16f877a的PD口輸入,鍵盤識別,通過SPI連接HD7279顯示。
__CONFIG(HS&UNPROTECT&PWRTDIS&BORDIS&WDTDIS);
#define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit))
static bit PORTB_1@PORTBIT(PORTB,1);
#define PORTDIT(adr,bit) ((unsigned)(&adr)*8+(bit))
static bit PORTD_7@PORTDIT(PORTD,7);
static bit PORTD_6@PORTDIT(PORTD,6);
static bit PORTD_5@PORTDIT(PORTD,5);
static bit PORTD_4@PORTDIT(PORTD,4);
static bit PORTD_3@PORTDIT(PORTD,3);
static bit PORTD_2@PORTDIT(PORTD,2);
static bit PORTD_1@PORTDIT(PORTD,1);
static bit PORTD_0@PORTDIT(PORTD,0);
unsigned char j;
unsigned int i;
unsigned char x;
unsigned char z;
unsigned char keyen=0;
volatile unsigned char keyx;
volatile unsigned char KEY;
void DELAY(int us)
{
for(i=0;i<us;i++)
continue;
}
void INITIAL()
{
TRISD=0x0F;
TRISB=0x00;
OPTION=0x7F;
INTCON=0x00;
PORTD=0xFF;
}
void SPIINIT()
{
PIR1=0x00;
SSPCON=0x22;
SSPSTAT=0xC0;
TRISC=0x00;
}
void TM2INIT()
{
TMR2=0xFD;
T2CON=0x07;
}
void KEYSERVE()
{
PORTD_4=0;
if(PORTD!=0xEF)
{
DELAY(10000);
if(PORTD!=0xEF)
KEY=PORTD;
do
{
;
}while(PORTD!=0xEF);
keyen=1;
}
PORTD=0xFF;
PORTD_5=0;
if(PORTD!=0xDF)
{
DELAY(10000);
if(PORTD!=0xDF)
KEY=PORTD;
do
{
;
}while(PORTD!=0xDF);
keyen=1;
}
PORTD=0xFF;
PORTD_6=0;
if(PORTD!=0xBF)
{
DELAY(10000);
if(PORTD!=0xBF)
KEY=PORTD;
do
{
;
}while(PORTD!=0xBF);
keyen=1;
}
PORTD=0xFF;
PORTD_7=0;
if(PORTD!=0x7F)
{
DELAY(10000);
if(PORTD!=0x7F)
KEY=PORTD;
do
{
;
}while(PORTD!=0x7F);
keyen=1;
}
PORTD=0xFF;
}
void SPILED(int data,int data2)
{
PORTB_1=0;
DELAY(50);
SSPBUF=data;
do
{
;
}while(STAT_BF==0);
DELAY(20);
SSPBUF=data2;
do
{
;
}while(STAT_BF==0);
PORTB_1=1;
}
void SPILED1(int data)
{
PORTB_1=0;
DELAY(50);
SSPBUF=data;
do
{
;
}while(STAT_BF==0);
PORTB_1=1;
}
void KEYKK()
{
if(KEY==0x77) keyx=0x00;
if(KEY==0x7B) keyx=0x01;
if(KEY==0x7D) keyx=0x02;
if(KEY==0x7E) keyx=0x03;
if(KEY==0xB7) keyx=0x04;
if(KEY==0xBB) keyx=0x05;
if(KEY==0xBD) keyx=0x06;
if(KEY==0xBE) keyx=0x07;
if(KEY==0xD7) keyx=0x08;
if(KEY==0xDB) keyx=0x09;
if(KEY==0xDD) keyx=0x0A;
if(KEY==0xDE) keyx=0x0B;
if(KEY==0xE7) keyx=0x0C;
if(KEY==0xEB) keyx=0x0D;
if(KEY==0xED) keyx=0x0E;
if(KEY==0xEE) keyx=0x0F;
}
main()
{
INITIAL();
SPIINIT();
PORTB_1=1;
SPILED(0xA4,0);
PORTB_1=1;
do
{
KEYSERVE();
if(keyen==1)
{
KEYKK();
SPILED1(0xA0);
SPILED(0xCF,keyx);
keyen=0;
}
}while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -