c语言秒表
‘壹’ C语言怎么写一个简易秒表
用到time.h文件
里面有个clock();函数,返回一个clock_t类型的数字,表示从程序运行开始,CPU的"滴答"数
而在time.h里有个常量CLOCKS_PER_SEC表示每秒钟有多少个"滴答".
这样,(((float)clock())/CLOCKS_PER_SEC)*1000这样的表达式就能得到从程序运行开始到现在的经过的时间.
程序的大致思路是这样的,程序按下1的时候记下当时的程序运行时间.
从这时起,每时刻捡取程序运行时间,然后减去先前的值,就可以得到已经计时的时间了.
只要让用户按下0结束计时就好了
在conio.h文件里,有个函数kbhit()是个非阻塞函数,用来检查键盘缓冲里有没有按键按下,若有,则返回1,若没有,则返回0,以此来作为判断,若返回1,则捡取按键,测试它是不是0或者1,若返回0,则表示用户没有动作,继续原来的工作,即继续计时或等待命令.
‘贰’ 用51单片机C语言版设计秒表倒计时
K1 EQU P1.0
K2 EQU P1.1
K3 EQU P1.2
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB TR0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#99
CLR 00H
CLR 01H
LOOP:
JB K1,LP01
JNB K1,$
CLR 01H
INC R3
CJNE R3,#100,LOOP0
MOV R3,#0
SJMP LOOP0
LP01:
JB K2,LP02
JNB K2,$
CLR 01H
CJNE R3,#0,LP011
MOV R3,#99
SJMP LOOP0
LP011:
DEC R3
SJMP LOOP0
LP02:
JB K3,LOOP
JNB K3,$
SETB 01H
SJMP LOOP
LOOP0:
MOV A,R3
MOV B,#10
DIV AB
MOV R0,B
MOV R1,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
MOV DPTR,#TABLE
T0C:
CPL 00H
JB 00H,T001
MOV P3,#0FDH
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
T002:
JNB 01H,T0E
INC R2
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR 01H
MOV R4,#16
T005:
CPL P0.0
LCALL DELAY
DJNZ R4,T005
RETI
DELAY:
MOV R6,#200
DLY:
MOV R7,#250
DJNZ R7,$
DJNZ R6,DLY
RET
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END
‘叁’ 51单片机的4位数码管做简易秒表C语言程序
我写了个六位数码管的程序,放到这里让你参考一下,希望对你有用!
/*******************************************************************
             数码管时钟秒表篇
  功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节
时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一
个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为
调节秒钟状态),key4键为秒表功能键。
实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成
数码管时钟调节功能;第三步:完成数码管秒表显示功能。
  
  操作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键
为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。
********************************************************************
********************************************************************/
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3;
sbit la=P2^6;
sbit wela=P2^7;
uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选编码
uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
             0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
      0x79,0x71,0x00};
uchar temp;    //temp为按键变量
int light,flag;     //flag用来控制数码管显示的状态(显示时钟或者显示秒表),light用来控制时钟和秒表的led显示
uchar shi2,ge2,shi1,ge1;  //这四个变量用来分离出实参的十位和个位
uchar num,num1,num2,num3;  //num,num1用来计数,num2用来控制调节的时分秒,num3用来改变秒表状态下的显示状态
int miao,fen,shi;    //时钟变量
uchar mfen,mmiao,mmmiao;  //秒表变量
void delay(uint z)
{
 uint i,j;
 for(i=0;i<z;i++)
  for(j=0;j<110;j++); 
}
void timeinit()
{
 TMOD=0x11;
 TH0=(65536-46080)/256;
 TL0=(65536-46080)%256;
 TH1=(65536-4608)/256;
 TL1=(65536-4608)%256;
 EA=1;
 ET0=1;
 ET1=1;
 TR0=1;
 TR1=0; 
}
void timedisplay0() interrupt 1
{
 TH0=(65536-46080)/256;
 TL0=(65536-46080)%256;
 num++;
 if(num==20)
 {
  num=0;
  miao++;     //开启时钟功能
  if(miao==60)
  {
   miao=0;
   fen++;
   if(fen==60)
   {
    fen=0;
    shi++;
    if(shi==24)
     shi=0;
   }
  }
 }
}
void timedisplay1() interrupt 3
{
 TH1=(65536-4608)/256;
 TL1=(65536-4608)%256; 
 num1++;
 if(num1==2)
 {
  num1=0;
  mmmiao++;
  if(mmmiao==100)   //开启秒表功能
  {
   mmmiao=0;
   mmiao++;
   if(mmiao==60)
   {
    mmiao=0;
    mfen++;
    if(mfen==60)
     mfen=0;
   }
  }
 }
}
void display(uchar add,uchar date)  //数码管显示信息函数(带有小数点)
{
 shi2=date/10;
 ge2=date%10;
P0=0xff;     
 wela=1;
 P0=table1[add];
 wela=0; 
 P0=0;
 la=1;
 P0=table2[shi2];
 la=0;
 delay(1);
P0=0xff;
 wela=1;
 P0=table1[add+1];
 wela=0;
 P0=0;
 la=1;
 P0=table2[ge2]|0x80;
 la=0;
 delay(1);
}
void display1(uchar add,uchar date)   //数码管显示数据(不带有小数点)
{
 shi1=date/10;
 ge1=date%10;
 
 P0=0xff;
 wela=1;
 P0=table1[add];
 wela=0;
 P0=0;
 la=1;
 P0=table2[shi1];
 la=0;
 delay(1);
P0=0xff;
 wela=1;
 P0=table1[add+1];
 wela=0;
 P0=0;
 la=1;
 P0=table2[ge1];
 la=0;
 delay(1);
}
void keyscan()
{
 P3=0xfd;
 temp=P3;      //第二行功能键
 if(temp!=0xfd)
 {
  delay(5);
  if(temp!=0xfd)
  {
   beep=0;
   switch(temp)
   {
    case 0xed: num2++;   //第一个按键用来控制调节时,分,秒
       TR0=0;
       light=1;
       if(num2==4)
       {
        num2=0;
        light=0;
        TR0=1;
       }        
       break;
    case 0xdd:  if(num2==1)  //第二键用来增加数据
       {
        shi++;
        if(shi==24)
         shi=0;
       }
       if(num2==2)
       {
        fen++;
        if(fen==60)
         fen=0;
       }
       if(num2==3)
       {
        miao++;
        if(miao==60)
         miao=0;
       }
       break;
    case 0xbd:  if(num2==1)   //第三个键用来减小数据
       {
        shi--;
        if(shi==-1)
         shi=23;
       }
       if(num2==2)
       {
        fen--;
        if(fen==-1)
         fen=59;
       }
       if(num2==3)
       {
        miao--;
        if(miao==-1)
         miao=59;
       }
       break;
    case 0x7d: flag=1;    //第四个键用来开启秒表
       num3++;
       TR1=1;
       if(num3==1)
        mfen=mmiao=mmiao=0;  //清除上次残留数据
       if(num3==2)
        TR1=0;    //暂停秒表
       if(num3==3)
       {
        mfen=mmiao=mmmiao=0;  //秒表清零
        TR1=0;
       }
       if(num3==4)    //重新开启秒表
        TR1=1;
       if(num3==5)    //暂停秒表
        TR1=0;
       if(num3==6)   //切换为显示时钟状态
       {
        flag=0;
        num3=0;
       }
       break;
   }
   while(temp!=0xfd)
   {
    temp=P3;
   }
   beep=1;
  }
 }
}
int main()
{
 timeinit();
 beep=1;
 while(1)
 {
  keyscan();
  if(light==0)
  {
   if(miao%2==0)  //当数码管显示时钟状态时,八个led将以亮一秒灭一秒的状态循环下去  
    P1=0;
   else
    P1=0xff;
  }
  else
  {
   if(num2==1)
    P1=0xfe;
   if(num2==2)
    P1=0xfd;
   if(num2==3)
    P1=0xfb;
  }
  if(flag==0)     //显示时钟
  {
   display(1,shi);   
   display(3,fen);
   display1(5,miao);
  }
  else      //显示秒表
  {
   display(1,mfen);
   display(3,mmiao);
   display1(5,mmmiao);
  }
  }
 return 0;
}
‘肆’ 51单片机C语言秒表程序报错误和警告(程序如下)
你把这个second的数据类型改成unsigned char second; 
本身second最大计数直到60 定义成int太浪费空间
你本身定的数据TAB[]是unsigned char 类型的 放进去int类型可能会报错 
你试下
