搜档网
当前位置:搜档网 › 飞思卡尔单片机编程实例!!

飞思卡尔单片机编程实例!!


#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define RowSize 4
#define ColumnSize 4
const unsigned char DisplayDecode[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,
~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71};
const unsigned char KeyDecode[]={ 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x0a,0x0b,
0x0c,0x0d,0x0e,0x0f};
unsigned char showdata[4];
void Init_PORT() {
DDRA=0x0F;//输出
/*Ports ABEK, BKGD pin Pull-up Control Register (PUCR)
7 PUPKE
6 BKPUE
5 0
4 PUPEE
3 0
2 0
1 PUPBE
0 PUPAE
*/
PUCR|=0x01;
DDRB=0xFF;//输出
DDRP=0xFF;
DDRT=0xFF;

}

void delay(unsigned int countert)
{
unsigned int i,j;
for(i=0;ifor(j=0;j<4000;) j++;
}

unsigned char KeyScan()
{
unsigned char Input,Output,Keynumber,Keyvalue1;
unsigned char i;

Keyvalue1=0xFF;
Output=0xF0;
PORTA=Output;
Input=PORTA>>4;
if(Input!=0x0F)
{
delay(4);
Input=PORTA>>4;
if(Input!=0x0F)
{
Output=0x01;
; for(i=0;i{
PORTA=~Output;
Input=PORTA>>4;
if(Input!=0x0F)
{
switch(Input)
{
case 0x0E:
Keynumber=0;
break;
case 0x0D:
Keynumber=1;
break;
case 0x0B:
Keynumber=2;
break;
case 0x07:
Keynumber=3;
break;
}
Keynumber=Keynumber+i*ColumnSize;
Keyvalue1=KeyDecode[Keynumber];
break;
}
else Output<<=1;
}
}
}
return(Keyvalue1);
}

void Show()
{
unsigned char DisplayNumber;

PTT=0x0f;
for(DisplayNumber=0;DisplayNumber<4;DisplayNumber++)
{
PTP=DisplayDecode[showdata[DisplayNumber]];
if(DisplayNumber==2) PTP&=0x7f;

switch(DisplayNumber)
{
case 0:
PTT=0xfe;
break;
case 1:
PTT=0xfd;
break;
case 2:
PTT=0xfb;
break;
default:
PTT=0xf7;
break;
}
delay(1);
}
}


void main(void)
{
/* put your own code here */
unsigned char Keyresult;

showdata[0]=1;
showdata[1]=2;
showdata[2]=3;
showdata[3]=4;
EnableInterrupts;
Init_PORT();
Show();
for(;;)
{
Keyresult=KeyScan(); //键盘扫描
if(Keyresult!=0xFF) //showdata[0]=Keyresult;
PORTB=~Keyresult;
Show(); //显示
}
}

相关主题