完善资料让更多小伙伴认识你,还能领取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个回答
|
|
没有人回复一下么
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
436 浏览 1 评论
LabVIEW如何识别接线端是否有数据输入,不能通过判断默认值的方式
1140 浏览 2 评论
打开labview时很慢,在任务管理器里面看到,内存能有1000多M,重装也没用,各位大佬这是什么问题引起的,怎么解决
2114 浏览 3 评论
2606 浏览 2 评论
Labview生成的exe程序,源程序找不到了,有什么办法可以对exe程序的界面和菜单等进行调整和编辑
3620 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 06:08 , Processed in 0.909553 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号