主函数
void Main(void)
{
SetClockDivider(1, 1);//设置时钟分频
SetSysFclk(DFT_FCLK_VAL);//设置处理器频率
Port_Init();//初始化串口
Uart_Printf( "\n4X4 KEY array TEST ( Interrupt MODE )\n" );
Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );
KeyScanInit() ;
while( Uart_GetKey() != ESC_KEY ) ;
rGPGCON = rGPGCON & (~((3<<22)|(3<<6))) | ((0<<22)|(0<<6)) ; //GPG11,3 set input
rGPFCON = rGPFCON & (~((3<<4)|(3<<0))) | ((0<<4)|(0<<0)) ; //GPF2,0 set input
Uart_Printf( "the keyboarb is stopped\n" );
while(1);
}
6. 键盘的实现
6.1键盘初始化程序
void ScanInit(viod)
{
1.GPG6、GPG2、GPE13、GPG11设为output端口,并且输出0
2.GPG11、GPG3、GPF2、GPF0 设为EINT端口,分别为EINT19、EINT11、EINT2、
EINT0
3.EINT19、EINT11、EINT2、EINT0 设为下降沿出发(falling edge int)
4.EINT19、EINT11、EINT2、EINT0 中断标志位被清楚
5.pISR_EINT0 = pISR_EINT2 = pISR_EINT8_23 = (U32)KeyISR 建立中断函数
6.EINT19、EINT11、EINT2、EINT0 中断开启
}
6.2键盘中断响应
void __irq KeyISR(void)
{
1.GPG13、GPG11、GPF2、GPF0 设为input端口
2.清楚中断EINT19、EINT11、EINT2、EINT0
3.键盘扫描Key_Scan(),并在串口输出
4.重新初始化端口: GPG6、GPG2、GPE13、GPG11设为output端口,并且输出0;
GPG11、GPG3、GPF2、GPF0 设为EINT端口,分别为EINT19、
EINT11、EINT2、EINT0
}
6.3键盘扫描程序
U8 Key_Scan( void )
{
1.扫描键盘第1列 K10、K7、K4、K1, 返回扫描值
2.0扫描键盘第2列 K11、K8、K5、K2, 返回扫描值
3.扫描键盘第3列 K12、K9、K6、K3, 返回扫描值
4.扫描键盘第4列 K16、K15、K14、K13,返回扫描值
}
阅读(1843) | 评论(0) | 转发(1) |