完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是我们的代码 ,但目前状况就是按下[color=rgb(68, 68, 68) !important]开发板上1.1口按键可以触发中断开始键盘扫描,但是按4乘4按键后再按下开发板上2.2口的按键确认输入完毕,但一直获取不到键值在数码管上显示,哭哭,求助,希望大家能帮忙看下代码帮我们找找原因,谢谢啦!~
#include unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管字码表0~9 unsigned int a,b=0; void init(void) { P3DIR = 0XFF;//P3 segment port P6DIR = 0X0e;//P6.1~6.3 digit ports P4DIR = 0X06;//P4.2 P4.1 latch enable of HC573,P4.2 位选锁存,P4.1段选锁存 return; } void digsel(unsigned char dig)//位选信号,P6.1~P6.3对应dig=0~2 { P4OUT |= BIT2; P6OUT = (~(BIT1 << dig)) & P6OUT; P4OUT ^= BIT2; return; } void hscan_init() { //行输入 上拉 P2DIR&=~(BIT0+BIT2+BIT3); P2OUT |= BIT0+BIT2+BIT3; P2REN |= BIT0+BIT2+BIT3; //列输出 P2DIR |= BIT4+BIT5+BIT6+BIT7; P2OUT &=~(BIT4+BIT5+BIT6+BIT7); } void lscan_init() { //列输入 上拉 P2DIR &=~(BIT4+BIT5+BIT6+BIT7); P2OUT |= BIT4+BIT5+BIT6+BIT7; P2REN |= BIT4+BIT5+BIT6+BIT7; //行输出 P2DIR |= BIT0+BIT2+BIT3; P2OUT &=~(BIT0+BIT2+BIT3); } void keyscan() { unsigned char H,L; H=0;L=0; hscan_init(); H=P2IN&(BIT0+BIT2+BIT3); lscan_init(); L=P2IN&(BIT4+BIT5+BIT6+BIT7); switch(H) { case 12:H=0; break; //00001100 第0行 case 9:H=1; break; //00001001第1行 case 5:H=2; break; //00000101第2行 default: H=16;break; //00001111 } switch(L) { case 224:L=0; break;//11100000 第0列 case 208:L=1; break;//11010000 第1列 case 176:L=2; break; //10110000 第2列 case 112:L=3; break; //01110000 第3列 default: L=16;break; } if(H!=16&&L!=16) a=H*4+L; } void display(unsigned int number) //能否改成循环程序??? { digsel(2); P3OUT = 0;//display shadow dispel P4OUT |= BIT1; P3OUT = seg[b%1000/100]; //百位 P4OUT ^= BIT1; P6OUT ^= BIT3; __delay_cycles(3900); digsel(1); P3OUT = 0;//display shadow dispel P4OUT |= BIT1; P3OUT = seg[b%100/10]; //个位 P4OUT ^= BIT1; P6OUT ^= BIT2; __delay_cycles(3900); digsel(0); P3OUT = 0;//display shadow dispel P4OUT |= BIT1; P3OUT = seg[b%10]; //小数位 P4OUT ^= BIT1; P6OUT ^= BIT1; __delay_cycles(3900); } int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer init(); P8DIR|=BIT1; P2REN|=BIT1; P2OUT|=BIT1; P1REN|=BIT1; P1OUT|=BIT1; P1IES|=BIT1; P1IFG&=~BIT1; P1IE|=BIT1; __bis_SR_register(LPM4_bits+GIE); } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { while(1) { if(P2IN&BIT1!=0) { keyscan(); P8OUT|=BIT1; b=a+b*10; } else { __delay_cycles(10000); //延时10ms,按键去抖 if((P2IN & BIT1) == 0) //按键真正按下 { while((P2IN & BIT1) == 0); //等待按键抬起 { P8OUT&=~BIT1; display(b); } } } P1IFG&=~BIT1; } } |
|
相关推荐
1个回答
|
|
求助。如果有会的麻烦帮帮忙呗
|
|
|
|
只有小组成员才能发言,加入小组>>
3010个成员聚集在这个小组
加入小组2845 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3401 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2322 浏览 1 评论
4777 浏览 1 评论
2555 浏览 1 评论
1291浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3402浏览 2评论
2846浏览 1评论
1445浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-7 15:24 , Processed in 1.149567 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号