; ******************************************; **民意调查 - 民意调查按钮开关**; ****************************************** pollswitch bcf fswp;清除按压标志BCF FSWR;清除释放标志BCF FSWPR;清除和释放标志BCF FSWWP;清除和保持标志BCF FSWRP;清除按下并重复标志BCF FSWDC;每次8ms MOVF SWDTIMER,f,1;双击计时器运行?SKPZ DECF SWDTIMER,F,1;是的,更新它CLRC;预清载BTFSS按钮;开关按下?setc;是的,设置携带rlcf swhist,w,1;旋转到历史和lw b'1111';只保留4个测试Movwf Swhist,1;保存历史Bz pswup; z标志设置如果Swithc为历史XORLW B'1111'。测试全历史BZ PSWDN; Z如果关闭历史记录;从上次通过PSWTRAN BBC FSWST,PSWSUP的位置;切换仍在上升(释放)BRA PSWSDN;切换仍然下降(按下);在当前通行证中切换PSWUP BBC FSWST,PSWSUP;切换仍然;切换刚转换到上升(释放的)位置BCF FSWST;清除开关电流状态BSF FSWR;表示开关已发布的MOVF SWHTimer,F,1;键压力时间运行skpz; z如果不是bsf fswpr;是的,表示按和释放(否则,按下并按住)CLRF SWHTimer,1;清除开关按住定时器CLRF SWRTimer,1;清除开关按下并重复定时器返回;完成(没有计时器到过程);切换仍然释放(自上次通过以来没有变化)PSWSUP返回;无所事事;在当前通过PSWDN BBS FSWST,PSWSDN的位置下;切换仍然下降;切换刚刚跨越(按下的位置)BSF FSWST;设置切换电流状态BSF FSWP;表示开关只按下BSF FSWRP;第一脉冲重复,也是MOVLFB SWHTimer,CSWHT;设置按下并保持定时器MOVF SWDTimer,F,1;双击计时器运行? skpz bsf fswdc ;yes, signal double click movlfb swdtimer,cswdct+1 ;and reset double-click timer return ;and get out ;switch is still pressed (no change since last pass) pswsdn movf swhtimer,f,1 ;is hold timer already zero? bz pswrpt ;yes, process repeat timer decfsz swhtimer,f,1 ;decrement hold timer return ;nothing to do if not expired bsf fswph ;indicate switch pressed and held bsf fswrp ;and second pulse of repeat bra pswsrpt ;go set repeat timer pswrpt decfsz swrtimer,f,1 ;decrement repeat timer return ;nothing to do if not expired bsf fswrp ;nth pulse of repeat pswsrpt movlfb swrtimer,cswprt ;reload press & repeat timer return
Unsigned char key_tst(Unsigned char k){if(k==0){if(!(v_leds&0x04))k++;返回(k);}如果(k = = 1){如果(v_leds&0x04) k + +;返回(k);}}
线程启动 | 类似的线程 | 论坛 | 回复 | 日期 |
---|---|---|---|---|
嵌入式软件设计流程 | 编程和语言 | 4 | ||
一个 | Linux EDA软件绘制矢量,并将其保存为PNG | PCB布局,EDA和仿真 | 3. | |
D | 斥责软件 | 编程和语言 | 0 | |
R | 软件消除抖动 | 微控制器 | 32 | |
使用PIC16F72在软件中调试开关 | 软件& ide | 11 |