完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前一段时间 写了一个按键程序,单片机是PIC16F1936 ,由于板子布局问题,所以按键输入口选用的是RA1 、RA3、RA5、RB2、RB4、RC5、RC7 对应输出:RA0 、RA2、RA4、RB3、RB5、RC4、RB1. 输出端 输出低电平是 接在输出端的三极管导通这个程序我想简化一下,但是有时在想不到其他的该怎么写,就是想把判断的部分简化一下,不需要像现在的程序 每次都要扫一次,判断一次
本来是想照着下面这个程序改的,但是输入口不统一,所以不好命名PINB void KeyRead( void ) { unsigned char ReadData = PINB^0x7f; Trg = ReadData & (ReadData ^ Cont); Cont = ReadData; } 求大神 指点一下,怎么将下面按键程序修改的精粹一些。 按键部分程序如下: void keyscan() { if(RA1==1) { RA1_flag=1;//标志位 按键未按下 } if((RA1==0)&&(RA1_flag==1)) { RA1_flag=0; RA1_num++; if(RA1_num==1)//第一次按下按键 输出端 输出低电平 RA0=0; else if(RA1_num==2)第二次按下按键 输出端 输出高电平 { RA0=1; RA1_num=0; } } if(RA3==1) { RA3_flag=1; } if((RA3==0)&&(RA3_flag==1)) { RA3_flag=0; RA3_num++; if(RA3_num==1) RA2=0; else if(RA3_num==2) { RA2=1; RA3_num=0; } } if(RA5==1) { RA5_flag=1; } if((RA5==0)&&(RA5_flag==1)) { RA5_flag=0; RA5_num++; if(RA5_num==1) RA4=0; else if(RA5_num==2) { RA4=1; RA5_num=0; } } if(RB2==1) { RB2_flag=1; } if((RB2==0)&&(RB2_flag==1)) { RB2_flag=0; RB2_num++; if(RB2_num==1) RB3=0; else if(RB2_num==2) { RB3=1; RB2_num=0; } } if(RB4==1) { RB4_flag=1; } if((RB4==0)&&(RB4_flag==1)) { RB4_flag=0; RB4_num++; if(RB4_num==1) RB5=0; else if(RB4_num==2) { RB5=1; RB4_num=0; } } if(RC5==1) { RC5_flag=1; } if((RC5==0)&&(RC5_flag==1)) { RC5_flag=0; RC5_num++; if(RC5_num==1) RC4=0; else if(RC5_num==2) { RC4=1; RC5_num=0; } } |
|
相关推荐
1个回答
|
|
没有人回复一下么
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
452 浏览 1 评论
NI Vision有个图片打不开其他图都能打开(用NI Vision Assistant也打开不了)
915 浏览 1 评论
labview2015使用Excel报表程序打包生成后打开程序要选一个vi才能使用,否则软件就会报错,这是什么问题?
1496 浏览 2 评论
LabVIEW与单片机无法串口通信 提示串口打开错误 端口设置有问题吗?
1428 浏览 3 评论
1707 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 02:27 , Processed in 0.642045 second(s), Total 75, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号