serial.c修改两行 ,97是根据波特率,时钟频率算出来的,请查找相关公式。
PINSEL0 = 0x00050000;
U1LCR = 0x83;
U1DLL = 97;
U1LCR = 0x03;
main.c 增加了一段代码(弥补软件缺陷的,自己阅读理解),这里把整个main.c拷了过来,乱码不用管,粘贴到keil中就能正常显示
#include "LPC21xx.h"
#include <stdio.h>
extern void init_serial (void); /* initialize serial interface */
//³£Á¿¶¨Òå
const unsigned char LEDSEGCODE[]=
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char KSCANCODE[]={0x01,0x02,0x04,0x08};
unsigned char keytab[4][4]= //¼üÖµ±í£¬±£´æÁË16¸ö°´¼üµÄ¶ÔÓ¦¼üÖµ
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x01,0x02,0x03,0x04,0x05
};
void Delay_250uS(void) //ÑÓʱº¯Êý
{
unsigned int i;
i=50000;//CCLK=60MHZ
while(i--);
}
int main(void)
{
unsigned int keyval;
unsigned int row,col,x1,x2;
unsigned int oldrow=66;
unsigned int oldcol=66;
int amount=10;
init_serial( );
//printf("xvvvv1");
//³õʼ»¯LPC2124µÄP0
PINSEL0=0x00050000;//0x00000000;
PINSEL1=0x00000000;
PINSEL2=0x00000000;
IO0DIR=0x000000FF;//
IO1DIR=0x000F0000;//KR1-KR4¶¨ÒåΪÊä³ö KC1-KC4¶¨ÒåΪÊäÈë
IO0CLR=0x000000FF;//³õʼ»¯LEDÃð
keyval=0;
//ÎÞÏÞÑ»·Ìå
printf("xin zhen shuai");
while (1)
{
//Delay();
//printf("%d %d\n",(x1 & 0x00F00000)!=0x00F00000,(x2 & 0x00F00000)!=0x00F00000);
//Ñ»·´ÓP1.16-P1.19Êä³öÐÐɨÃèÐźţ¨Ö»ÓÐ1ÌõÐÐÏßÊä³öµÍµçƽ£¬ÆäÓà3ÌõΪ¸ß£©
for (row=0; row<4; row++) //·¢³öɨÃèÂëµÄʱºò£¬È·¶¨±¾´Î¼ì²â°´¼üµÄÐкÅ
{
IO1SET=(0x0F)<<16;
IO1CLR=(KSCANCODE[row])<<16; //¸ù¾ÝÐкŲé±í£¬µÃµ½²¢·¢³ö±¾´Î¼üÅÌɨÃèÂë
x1= IO1PIN;
if ((x1 & 0x00F00000)!=0x00F00000) //¼ì²âµ½¼üÅÌ°´Ï¶¯×÷
{
Delay_250uS(); //ÑÓʱȥ¶¶¶¯
x2=IO1PIN;
if ((x2 & 0x00F00000)!=0x00F00000) //È·ÈÏÊÇÄÄÁеļü°´ÏÂ
{ //È·¶¨°´¼üµÄÁкÅ
if ((IO1PIN & 0x00E00000)==0x00E00000) col=0;
else if ((IO1PIN & 0x00D00000)==0x00D00000) col=1;
else if ((IO1PIN & 0x00B00000)==0x00B00000) col=2;
else col=3;
keyval=keytab[row][col]; //¸ù¾ÝÐкźÍÁкţ¬²é±íÇó¼üÖµ
if(oldrow==row && oldcol==col)
{
if(amount>0){
amount--;
break;
}
}
amount=10;
oldrow=row;
oldcol=col;
IO0CLR|=0xFF; //ÇåÏÔʾ
IO0SET=(LEDSEGCODE[keyval]<<0); //ÏÔʾ±¾´Î°´ÏµļüÂëÖµ
printf("R=%x c=%x\n",(x2>>16)&0x000f,(x2>>20)&0xf);
IO1SET=(0x0F)<<16;
IO1CLR=(KSCANCODE[row])<<16; //¸ù¾ÝÐкŲé±í£¬µÃµ½²¢·¢³ö±¾´Î¼üÅÌɨÃèÂë
x1= IO1PIN;
Delay_250uS();
while(1){
Delay_250uS();
if((x1 & 0x00F00000)==0x00F00000)break;//ûÓа´¼ü°´ÏÂÍ˳öÑ»·
IO1SET=(0x0F)<<16;
IO1CLR=(KSCANCODE[row])<<16; //¸ù¾ÝÐкŲé±í£¬µÃµ½²¢·¢³ö±¾´Î¼üÅÌɨÃèÂë
x1= IO1PIN;
}
}
}
}
}
}
串行口怎么看?
这个黑黑的就是个显示屏,可以看到串行口输出的字符,main.c中调用printf函数输出的内容就会在这里显示。
想要看这个黑屏幕的内容很简单,运行后,右键点击黑框,再点击最后一行virtual terminal(虚拟终端)
如果一切正常,可以在弹出的virtual terminal中看到打印出来的字符,每按一下按键都会再打印出一行字符