⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 秒表c51程序.txt

📁 秒表C51程序
💻 TXT
字号:
 秒表C51程序

//秒表C51程序

#include <stdio.h>
#include <REGX52.H>
//#include <AT89X51.H>
void initial(void);              
//初始化子程序
void delay(short i);   
//延时子程序
void display(unsigned char i,unsigned char num);
//显示子程序,其中变量i,num含义为在第i个数码管显示数
void xianshi(void);//时钟显示
unsigned char keyscan(void);
//键盘扫描子程序
void updatee(void);

unsigned char m1=0;
unsigned char m0=0;
unsigned char s1=0;
unsigned char s0=0;
unsigned char s01=0;
unsigned char s00=0;
int LEDData [] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60};

void main(void)
{
unsigned char status;
unsigned char keyword;
initial();
//键盘驱动信号,发光二极管,以及蜂鸣器都设在无效状态
for(;;)
{
  switch(status)
  {
  case 0:
   xianshi();
   keyword=keyscan();
   if(keyword==16)
   {
    delay(100);//精确定时一秒,时钟走的信号
    updatee();
   }
   else
    if(keyword==11)status=1; //0状态为计时状态,1状态为停止状态
    else 
    {
       
     delay(3);
                        //输入有错,蜂鸣器响 
    }
    break;
  case 1:
        xianshi();  
   keyword=keyscan();
   if(keyword==10)status=0; //开始计时,转到0状态;
   else if(keyword==12)status=2;//2状态为设置初值状态;
   else if(keyword==13)
   {
    s0=0;
    s1=0;
    m0=0;
    m1=0;
    s01=0;
    s00=0;
    P2=0;
    P0=0x28;

   }//清零
    else
    {
           delay(3);  //输入有错,蜂鸣器?
    }
   break;
  
  } 
}

}

void initial(void)
{
P1_4=1;
P1_5=1;
P1_6=1;
P1_7=1;  //键盘驱动信号都设为低,避免干扰。  

}


void delay(short i)
{
     int j=0;
  int k=0;
  k=i*1;
  while(j<k) 
  j++;

}

void display(unsigned char i,unsigned char num)
{
if(num >= 0 && num <=9)
  { 
  switch(i)
{ 
   case 0:P2=0X7c;P0=LEDData[num];       
       break;
   case 1:P2=0x7a;P0=LEDData[num];     
    break;
   case 2:P2=0x76;P0=LEDData[num];    
    break;
   case 3:P2=0x6f;P0=LEDData[num];   
    break;
   case 4:P2=0x5f;P0=LEDData[num];    
    break;
   case 5:P2=0x3f;P0=LEDData[num];            
    break;       
   default:
       break;
    }
  }
}
unsigned char keyscan(void)//键盘扫描
{
   P1_7=0;
   P1_6=1;
   P1_5=1;
   P1_4=1;
  if(P1_0==0)
   delay (13);
  if(P1_0==0)
  {delay (13);
  if(P1_0==0)
          return 0;}
  if(P1_1==0)  
   delay (13);
  if(P1_1==0)
   {delay (13);
  if(P1_1==0)
          return 1;}
  if(P1_2==0)
   delay (13);
  if(P1_2==0)
   {delay (13);
  if(P1_2==0)
          return 2;}
  if(P1_3==0)
   delay (13);
  if(P1_3==0)
   {delay (13);
  if(P1_3==0) 
           return 3;}
  delay (13);

  P1_7=1;
  P1_6=0;
  P1_5=1;
  P1_4=1;
  if(P1_0==0)
   delay (13);
  if(P1_0==0)
   {delay (13);
  if(P1_0==0) 
          return 4;}
  if(P1_1==0)  
   delay (13);
  if(P1_1==0)
  { delay (13);
  if(P1_1==0) 
          return 5;}
  if(P1_2==0)  
   delay (13);
  if(P1_2==0)
  { delay (3);
  if(P1_2==0)
           return 6;}
  if(P1_3==0)  
   delay (13);
  if(P1_3==0)
   {delay (3);
  if(P1_3==0)
          return 7;}
delay (13);

   P1_7=1;
   P1_6=1;
   P1_5=0;
   P1_4=1;
   if(P1_0==0)  
   delay (13);
  if(P1_0==0)
  { delay (13);
  if(P1_0==0)  
           return 8;}
   if(P1_1==0)  
   delay (13);
  if(P1_1==0)
   {delay (13);
  if(P1_1==0)  
           return 9; }
   if(P1_2==0)  
   delay (13);
  if(P1_2==0)
   {delay (13);
  if(P1_2==0)  
           return 10;}
   if(P1_3==0)  
   delay (13);
  if(P1_3==0)
   {delay (13);
  if(P1_3==0) 
           return 11;}
delay (13);

  P1_7=1;
  P1_6=1;
  P1_5=1;
  P1_4=0;
  if(P1_0==0)  
   delay (13);
  if(P1_0==0)
   {delay (13);
  if(P1_0==0)  
           return 12;}
  if(P1_1==0)  
   delay (13);
  if(P1_1==0)
   {delay (13);
  if(P1_1==0)  
           return 13;}
  if(P1_2==0)  
   delay (13);
  if(P1_2==0)
  { delay (13);
  if(P1_2==0)  
          return 14;}
if(P1_3==0)  
   delay (13);
  if(P1_3==0)
   {delay (13);
  if(P1_3==0)
          return 15;}
  P1_4=1;
delay (13);
   return 16;
}

void updatee()
{
if(s00==9) //如果10ms位需要进位,则进入语句
{
  s00=0;
  if(s01==9) //如果100ms位需要进位,则进入语句
  {
   s01=0;
   if(s0==9) //如果1sec位需要进位,则进入语句
   {
    s0=0;
    if(s1==5) //如果10sec位需要进位,则进入语句
    {
     s1=0;
     if(m0==9)
     {m0=0;
     if(m1==5)m1=0;
     else m1+=1;
     }
     else m0+=1;
    }
    else s1+=1;
   }
   else s0+=1;
  }
  else s01+=1;
}
else s00+=1;
xianshi();
}
void xianshi(void)
{
display(0,m1);
delay(30);
display(1,m0);
delay(30);
display(2,s1);
delay(30);
display(3,s0);
delay(30);
display(4,s01);
delay(30);
display(5,s00);
delay(30); //以上语句则在数码管上显示各个数字
}




----------------------------------------------
大家好,我是西安的一名电子专业的研究生,希望跟大家多多交流
我的主页:http://www.huoniu.ku.net
我的QQ:41877690
nyptg@163.com  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -