#include”pic.h”<br />#include”pic1687x.h”<br />#include”math.h”<br /><br />Unsigned char s0,s1,s2,s3;<br />Unsigned char s[4]; <br />Unsigned char data;<br />Unsigned char sreg; //定义一个变量 sreg ,中断次数变量。<br /><br />Void FZinitial()<br />{<br />S0=s1=s2=s3=0;<br />S[0]=s0;<br />S[1]=s1;<br />S[2]=s2;<br />S[3]=s3; <br /><br />Sreg=0;<br />}<br /><br />Void T0initial()<br />{<br />INTCON=0XFF;<br />T0CS=1;<br />T0SE=1;<br />T0IF=0;<br />T0IE=1; //没有发生中断标志,初始化时候允许发生定时器0的中断操作。<br />PSA=1;<br />}<br /><br />Void SPIinitial()<br />{<br />PIR=0; //必须将涉及到的相关寄存器都初始化一便。 外围中断标志 寄存器。<br />SSPCON=0X30;<br />SSPCON=0XC0;<br /><br />TRISA5=0;<br />TRISC3=0;<br />TRISC5=0;<br />}<br /><br />Void interrupt DEAL(void)<br />{<br />TMR0=0X13;<br />T0IF=0;<br />CLRWDT();<br />Sreg=sreg+1; //定时器T0中断次数递增,到40次才发生一次数据处理过程。<br /><br />If(sreg==40)<br /> {<br /> Sreg=0;<br /> S0=s0+1;<br /> If(s0==10)<br /> {<br /> S1=s1+1;<br /> S0=0;<br /> If(s1==10)<br /> {<br /> S2=s2+1;<br /> S1=0;<br /> If(s2==10)<br /> {<br /> S3=s3+1;<br /> S2=0;<br /> If(s3==10)<br /> S3=0;<br /> }<br /> }<br /> }<br /><br /> }// If(sreg==40)<br /> s[0]=s0;<br /> s[1]=s1;<br /> s[2]=s2;<br /> s[3]=s3;<br /><br />} Void interrupt DEAL(void)<br /><br />void KEYSCAN()<br />{<br />while(1){ <br />while(1)<br /> {<br /> dispaly(); <br /> if ((RB5==0)||(RB4==0)) break; <br /> }<br /> DELAY(); <br /> if ((RB5==0)||(RB4==0)) break;//若还有键按下,则终止循环扫描,返回<br /> }<br />}<br />void keyrelax()<br />{<br />while(1){<br /> dispaly(); <br /> if ((RB5==1)&&(RB4==1)) break;<br /> } //为防止按键过于灵敏,每次等键松开才返回<br />}<br /><br />Void main()<br />{<br /> SYSinitial();<br /> T0initial();<br /> SPIinitial();<br /> GIE=1;<br /> PEIE=1;<br />While(1)<br /> {<br /> FZinitial();<br /> KEYSCAN();<br /> keyrelax();<br /> GIE=1; //开始键1<br /><br /> KEYSCAN();<br /> keyrelax();<br /> GIE=0; //停止键0<br /><br /> KEYSCAN();<br /> keyrelax();<br /> }<br /><br />} <br /> |
|