完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #include "Key_Board.h" #include "Nokia5110.h" #include "SystemInit.h" #include "driverlib/gpio.h" #include "driverlib/sysctl.h" #include "driverlib/interrupt.h" #include "driverlib/timer.h" #include "inc/hw_timer.h" #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_gpio.h" #include "inc/hw_sysctl.h" unsigned char num; //用来显示字符计数 unsigned char Int_flag=1; //中断标志位 unsigned char num2=0; //负责对输入的计数 unsigned char key_val=88; //输入的值初始设置 unsigned char in_put_end_flag=0;//输入结束标志 unsigned char keyinput_val[]="A321B654C987DE0F"; unsigned char input[32];//输入的要显示的数组 /********************************************************************************************************* ** Function name: GPIO_Port_F_ISR ** Descriptions: GPIOF的中断服务函数 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void GPIO_Port_F_ISR(void) [ unsigned long ulStatus; unsigned char K_In; K_In=0x80; SysCtlDelay(5*(TheSysClock/ 3000)); //消抖 ulStatus=GPIOIntStatus(KEY_PORTF,true); // 读取中断状态 GPIOIntClear(KEY_PORTF, ulStatus); // 清除中断状态,重要 if (ulStatus&KEY_PIN_L) //如果KEY_L的中断状态有效 [ SysCtlDelay(5*(TheSysClock/ 3000)); // 延时约10ms,消除松键抖动 key_val=KeyIn(K_In); //读取按键值 KeyChecKend();//检查按键结束 ] Int_flag=0; Nokia5110_DisNumber(0,5,key_val); ] void Key_IntInit(void) [ /*高4位KEY_PIN_H配置*/ [ /*KEY_PIN_H使能*/ SysCtlPeripheralEnable(KEY_PERIPH_GPIOC); //高4位使能 /*高4位KEY_PIN_H模式*/ GPIOPinTypeGPIOOutput(KEY_PORTC,KEY_PIN_H);//高4为输出 GPIOPinWrite(KEY_PORTC,KEY_PIN_H,0x00); //高4位输出0 ] /*低4位中断输入设置*/ [ /*使能KEY_PIN_L所在GPIO端口*/ SysCtlPeripheralEnable(KEY_PERIPH_GPIOF); //低4位使能 HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0x4c4f434b; //解锁PF0 HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = GPIO_PIN_0; /*设置KEY_PIN_L所在GPIO端口输入模式*/ //GPIOPinTypeGPIOInput(KEY_PORTF,KEY_PIN_L);//低4位输入 GPIOPadConfigSet(GPIO_PORTF_BASE,KEY_PIN_L,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIODirModeSet(GPIO_PORTF_BASE,KEY_PIN_L, GPIO_DIR_MODE_IN); /*设置KEY_PIN_L中断类型*/ GPIOIntTypeSet(KEY_PORTF,KEY_PIN_L,GPIO_FALLING_EDGE);//低4位下降沿触发中断 //IntPrioritySet(INT_GPIOF, 1 << 5); // 设置KEY中断优先级为1 /*注册中断*/ GPIOIntRegister(KEY_PORTF,GPIO_Port_F_ISR); /*中断配置*/ GPIOIntEnable(KEY_PORTF,KEY_PIN_L);//低4位中断输入使能 IntEnable(INT_GPIOF); ] ] /********************************************************************************************************* ** Function name: Keycheckend ** Descriptions: 检查按键结束 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void KeyChecKend(void) [ SysCtlDelay(10 * (TheSysClock/ 3000)); // 延时约10ms,消除按键抖动 //while (GPIOPinRead(KEY_PORTF,KEY_PIN_L) == 0x00); // 等待KEY抬起 SysCtlDelay(10*(TheSysClock/ 3000)); // 延时约10ms,消除松键抖动 ] /********************************************************************************************************* ** Function name: KeyIn ** Descriptions: 按键值检测模块 ** input parameters: 无 ** output parameters: 检测到的键盘输入值 key_val ** Returned value: 无 *********************************************************************************************************/ unsigned char KeyIn(unsigned char K_In) [ unsigned char keyH_out; unsigned char temp1; unsigned char row; unsigned char col; unsigned char pinStatus; for(row=0;row<4;row++) [ keyH_out=0xF0; keyH_out-=K_In; K_In>>=1; GPIOPinWrite(KEY_PORTC, KEY_PIN_H,keyH_out); pinStatus=GPIOPinRead(KEY_PORTF,KEY_PIN_L); if((pinStatus&0x0f)<0x0f) [ temp1=0x01; for(col=0;col<4;col++) [ if((pinStatus&temp1)==0x00) [ key_val=col+row*4; ] temp1<<=1; ] ] ] GPIOPinWrite(KEY_PORTC, KEY_PIN_H,0x00); return key_val; ] //主函数(程序入口) int main(void) [ SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);//配置为PLL 4分频,外部16Mhz晶振,则系统时钟为200Mhz/4=50Mhz Nokia5110_Init(); //液晶初始化 Key_IntInit(); // KEY中断初始化 //GPIOIntClear(KEY_PORTF, KEY_PIN_L); // 清除中断状态,重要 IntMasterEnable(); // 使能处理器中断 while(1) [ Nokia5110_DisNumber(0,0,key_val); Nokia5110_DisNumber(0,1,1); ] // while(1) // 等待按键中断 // [ // Nokia5110_DisNumber(0,5,key_val+1); // if(Int_flag==0) // [ // Nokia5110_DisNumber(0,3,Int_flag); // Nokia5110_DisNumber(0,2,Int_flag); // if(key_val<15&&(key_val>0|| key_val==0)) // [ // Nokia5110_DisNumber(0,0,key_val); // input[num2]=keyinput_val[key_val]; // ] // Int_flag=1; // num2++; // if(key_val==0x0F) // [ // num2=0; // Nokia5110_Dis6x8(0,0,input); // ] // ] // ] ] 上面的程序进入中断后,就在中断里面循环,出不来。不知到时怎么回事? 我看了一下硬件图发现WAKE引脚和按键硬件PF0连在一起,猜想是不是有影响 |
|
相关推荐
4 个讨论
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
618 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
583 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1035 浏览 1 评论
698 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
507 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
143浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
110浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
116浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
113浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
151浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 16:22 , Processed in 0.849637 second(s), Total 66, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号