打印

四位秒表LED显示,求高人指教 精简程序的方**

[复制链接]
1968|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dream2010|  楼主 | 2008-10-24 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include”pic.h”
#include”pic1687x.h”
#include”math.h”

Unsigned char s0,s1,s2,s3;
Unsigned char s[4];                
Unsigned char data;
Unsigned char sreg;  //定义一个变量  sreg ,中断次数变量。

Void FZinitial()
{
S0=s1=s2=s3=0;
S[0]=s0;
S[1]=s1;
S[2]=s2;
S[3]=s3; 

Sreg=0;
}

Void T0initial()
{
INTCON=0XFF;
T0CS=1;
T0SE=1;
T0IF=0;
T0IE=1;    //没有发生中断标志,初始化时候允许发生定时器0的中断操作。
PSA=1;
}

Void SPIinitial()
{
PIR=0;            //必须将涉及到的相关寄存器都初始化一便。  外围中断标志 寄存器。
SSPCON=0X30;
SSPCON=0XC0;

TRISA5=0;
TRISC3=0;
TRISC5=0;
}

Void interrupt  DEAL(void)
{
TMR0=0X13;
T0IF=0;
CLRWDT();
Sreg=sreg+1;            //定时器T0中断次数递增,到40次才发生一次数据处理过程。

If(sreg==40)
  {
   Sreg=0;
   S0=s0+1;
   If(s0==10)
     {
       S1=s1+1;
       S0=0;
       If(s1==10)
         {
          S2=s2+1;
          S1=0;
            If(s2==10)
              {
                S3=s3+1;
                S2=0;
                If(s3==10)
                  S3=0;
              }
         }
     }

  }// If(sreg==40)
    s[0]=s0;
    s[1]=s1;
    s[2]=s2;
    s[3]=s3;

} Void interrupt  DEAL(void)

void        KEYSCAN()
{
while(1){    
while(1)
        {
        dispaly();    
        if ((RB5==0)||(RB4==0))    break; 
         }
        DELAY();            
        if ((RB5==0)||(RB4==0))    break;//若还有键按下,则终止循环扫描,返回
      }
}
void        keyrelax()
{
while(1){
    dispaly();            
    if ((RB5==1)&&(RB4==1))    break;
    }                        //为防止按键过于灵敏,每次等键松开才返回
}

Void main()
{
  SYSinitial();
  T0initial();
  SPIinitial();
  GIE=1;
  PEIE=1;
While(1)
  {
    FZinitial();
         KEYSCAN();
         keyrelax();
         GIE=1;            //开始键1

         KEYSCAN();
         keyrelax();
         GIE=0;      //停止键0

         KEYSCAN();
         keyrelax();
  }


发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

26

帖子

0

粉丝