单片机 秒表_单片机秒表设计 - CSDN
  • 1、通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到电路搭建焊接,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,...
  • 实现秒表计数功能,使用定时器和外部中断实现。8号按键代表计时开始/结束,C号按键代表重置为0,为了演示方便,这里上限定为15秒。 代码中有详细的注释: #include sbit WEI=P2^7; sbit DUAN=P2^6; sbit L1=P3^...

    实现秒表计数功能,使用定时器和外部中断实现。8号按键代表计时开始/结束,C号按键代表重置为0,为了演示方便,这里上限定为15秒。

    代码中有详细的注释:

    #include <reg52.h>
    
    
    sbit WEI=P2^7;
    sbit DUAN=P2^6;
    sbit L1=P3^4;
    
    unsigned char code dofly_DuanMa[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};// 显示段码值0~9
    unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    
    void delay(int t)
    {
       while(t--);
    }
      
    //第一个参数i代表控制第几个数码管,n代表要显示的数字
    void Screen(int i,int n)
    {
    
         P0=0;
         DUAN=1;
    	 DUAN=0;
         
         P0=dofly_WeiMa[i];
         WEI=1;
    	 WEI=0;
        
         P0=dofly_DuanMa[n]; 
         DUAN=1;  
         DUAN=0;
    
    }
    
    
    
    int sec;
    int num;
    int i;
    int flag;
    
    
    
    int main()
    {
        flag=1;
        i=0;
        num=0;
    	sec=0;
      	WEI=0;
      	DUAN=0;
    
       //开中断	 
     	EX0=1;         
     	IT0=1;         
      	EX1=1;         
     	IT1=1;         
      
        //定时器初始化
        TMOD |= 0x01;	  		     
        EA=1;           
        ET0=1;          
        TR0=1;
       
    
       L1=0;
    
    
     
       while(1)
       {
             
         
         if(num>=10)
    	 Screen(3,num/10);
    
    	 Screen(4,num%10);
         delay(10);
         Screen(5,10);
    
    	 Screen(6,sec/10);
         Screen(7,sec%10);
    		
    	}
       
          return 0;
    }
    
    void Timer_0() interrupt 1 using 1
    {
       
       
       TH0=(65536-10000)/256;
       TL0=(65535-10000)%256;
       if(flag==1)
       {
         i++;
    
    	    sec++;
    		if(sec==100) //0.1ms
    		sec=0;
    
         if(i==101)//1s
         {
            i=0;
    	    num++;
    	    if(num==15)
    	    num=0;
         }
       }
    }
    
    void ACTION1() interrupt 0 
    {
        flag=!flag;
    
    }
    
    
    void ACTION2() interrupt 2 
    {
       
    	  if(flag==0)
    	  {
    	    Screen(7,0);
    	    num=0;
    		sec=0;
    	  }
    }
    
    
    


    展开全文
  • 51 单片机 秒表

    千次阅读 2020-06-28 08:23:05
    博客首发链接 :https://mhuig.github.io/posts/129a9db5.html
    展开全文
  • 单片机秒表程序与原理图
  • 3个特点,可停止中断,中断消抖(巧借数码显示消抖),按钮操作不影响数码显示.https://ask.csdn.net/questions/757899 #include "reg52.h" #include "math.h" sbit QiTin = P3^0;//启停按键 sbit duan = P2^6;...

     

    3个特点,可停止中断,中断消抖(巧借数码显示消抖),按钮操作不影响数码显示.https://ask.csdn.net/questions/757899

    #include "reg52.h"
    #include "math.h"
    sbit QiTin = P3^0;//启停按键
    sbit duan = P2^6;//数码段
    sbit wei = P2^7;//数码位
    bit k=0;//标记
    unsigned char code ShuMaGuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0X80};//0~9隐.小数点
    unsigned char code WeiXuanBiao[] = { 0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };
    unsigned char Js=0;//中断计时
    unsigned char Hm=0;//毫秒
    unsigned char Mo=0;//秒
    void ShuMaXianShi(unsigned char s,unsigned char w,unsigned char d)
    {
    	unsigned char YanShi=255;
    	P0=WeiXuanBiao[w];
    	wei=1;
    	wei=0;
    	P0=ShuMaGuan[s]|ShuMaGuan[d];//d显示小数点11,10关闭
    	duan=1;
    	while(YanShi--);
    	P0=ShuMaGuan[10];//清除段信息为下次显示消除影响
    	duan=0;
    }
    void ZhongDuanSheZhi()
    {
    	TH0+=0X4c;/*定时器赋初值,定时50ms触发中断,自动补偿方式*/
    	TL0+=0X00; 
    	TMOD=0X01;
    	TR0=1; 
    	ET0=1; //开启定时器
    	EA=1; //全局中断开关
    }
    void JiShi(/*时间计算*/)
    {
    	if(!K)
    	{
    		if(Js%2) if(++Hm>=10) Hm=0;
    		if(Js>=20)
    		{
    			Js=0;
    			++Mo;
    		}			
    		if(Mo>=60) Mo=0;
    	}
    }
    void XianShi()
    {
    	ShuMaXianShi(Hm,3,10);
    	ShuMaXianShi(Mo%10,2,11);
    	ShuMaXianShi(Mo/10,1,10);
    	ShuMaXianShi(10,4,10);
    	ShuMaXianShi(10,5,10);
    	ShuMaXianShi(10,6,10);
    	ShuMaXianShi(10,7,10);
    	ShuMaXianShi(10,8,10);
    	JiShi();	
    }
    void ZhongDuanAnNiu()
    {
    	if(!QiTin)
    	{
    		//XianShi(/*巧借8个数码显示消抖*/);
    		unsigned char Yan_Shi=Js;
    		if(!TR0)TR0=k=1;//重启中断
    		while(Js==Yan_Shi);//中断消抖
    		if(!QiTin)if(!k)TR0=k; else k=0;//关闭中断,消抖后清除标记
    		while(!QiTin) XianShi(/*按下期间显示*/);
    	}
    }
    void main()
    {
    	ZhongDuanSheZhi();
    	while(1)
    	{
    		XianShi();
    		ZhongDuanAnNiu();
    	}
    }
    void ZhongDuan() interrupt 1
    {
    	++Js;
    	TH0+=0X4c;
    	TL0+=0X00;        
    }

    展开全文
  • 单片机汇编语言设计秒表,实现以下功能:要求其实现的功能如下(其中秒定时要求采取中断方式): 1、用6位数码管显示秒表时间,最左边2位显示分,中间2位显示秒,最右边2位显示秒的小数位(0.00~0.99秒),秒与...
  • 51单片机入门程序——秒表程序示例

    万次阅读 2018-06-14 23:37:59
    下午自学了一下单片机的前几章的知识,理解了数码管的显示原理以及静态显示和动态扫描的编程方法。...上周单片机实验课的内容是编一个秒表,在4位数码管中分别显示分和秒还有分秒,即最多可显示“9:59.9”。这里我...

    下午自学了一下单片机的前几章的知识,理解了数码管的显示原理以及静态显示和动态扫描的编程方法。其中,比较重要的几个概念有:数码管公共端类型(共阴极、共阳极)、位选(决定多位数码管中哪一位显示)、段选(决定数码管显示的数字),另外还有锁存器(教材P36,可通过控制锁存端来改变数据输出的状态)。

    上周单片机实验课的内容是编一个秒表,在4位数码管中分别显示分和秒还有分秒,即最多可显示“9:59.9”。这里我用两个键实现了秒表的启动/暂停和清零功能,代码如下:

    1. #include <reg51.h>  
    2. #define uint unsigned int  
    3. #define uchar unsigned char  
    4. sbit S1 = P1^3;  
    5. sbit S2 = P1^1;  
    6. sbit S3 = P1^2;  
    7. sbit S4 = P1^0;  
    8. sbit beep = P2^7;  
    9. sbit a = P0^0;  
    10. sbit b = P0^1;  
    11. sbit c = P0^2;  
    12. sbit d = P0^3;  
    13. sbit e = P0^4;  
    14. sbit f = P0^5;  
    15. sbit g = P0^6;  
    16. sbit p = P0^7;  
    17. sbit key1 = P1^4;  
    18. sbit key2 = P1^5;  
    19. sbit key3 = P3^6;  
    20. sbit key4 = P3^7;  
    21. uchar num,kms,sec,min;  
    22. uchar code N[10] = {0xc0, 0xf9 ,0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //0, 1, 2, 3, ...8, 9  
    23. uchar code Z[10] = {0x40, 0x79 ,0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //0., 1., 2., ... 8., 9.  
    24.   
    25. void delayms(uint xms)  
    26. {  
    27.     uint i,j;  
    28.     for(i = xms; i > 0; i--)  
    29.         for(j = 110; j > 0; j--);  
    30. }  
    31.   
    32. void init()  
    33. {  
    34.     TMOD = 0x01;  
    35.     TH0 = 0x3c;  
    36.     TL0 = 0xb0;  
    37.     S3 = 1;  
    38.     S1 = S2 = S4 = 0;  
    39.     P0 = N[0];  
    40.     delayms(5);  
    41.   
    42.     S3 = 0;  
    43.     S1 = S2 = S4 = 1;  
    44.     P0 = Z[0];  
    45.     delayms(5);  
    46.   
    47.     EA = 1;  
    48.     TR0 = 0;  
    49.     ET0 = 1;      
    50.     kms = sec = min = 0;  
    51. }  
    52.   
    53. void display()  
    54. {  
    55.     uchar shi, ge;  
    56.     if(kms >= 0)  
    57.     {  
    58.         S4 = 0;  
    59.         S1 = S2 = S3 = 1;  
    60.         P0 = N[kms];  
    61.     }  
    62.     delayms(5);  
    63.     if(sec >= 0)  
    64.     {  
    65.         shi = sec/10;  
    66.         ge = sec%10;  
    67.   
    68.         S3 = 0;  
    69.         S1 = S2 = S4 = 1;  
    70.         P0 = Z[ge];  
    71.         delayms(5);  
    72.   
    73.         S2 = 0;  
    74.         S1 = S3 = S4 = 1;  
    75.         P0 = N[shi];  
    76.     }  
    77.     delayms(5);  
    78.     if(min >= 0)  
    79.     {  
    80.         S1 = 0;  
    81.         S2 = S3 = S4 = 1;  
    82.         P0 = N[min];  
    83.     }  
    84.     delayms(5);  
    85. }  
    86.   
    87. void keyscan()  
    88. {  
    89.     if(key1 == 0)  
    90.     {  
    91.         delayms(10);  
    92.         if(key1 == 0)  
    93.         {  
    94.             while(!key1);  
    95.             TR0 = ~TR0;  
    96.         }  
    97.     }  
    98.     if(key2 == 0)  
    99.     {  
    100.         delayms(10);  
    101.         if(key2 == 0)  
    102.         {  
    103.             min = sec = kms = 0;  
    104.             while(!key1);  
    105.         }  
    106.     }  
    107. }  
    108.   
    109. main()  
    110. {  
    111.     init();  
    112.     while(1)  
    113.     {  
    114.         keyscan();  
    115.         display();        
    116.     }  
    117. }  
    118.   
    119. void T0_time() interrupt 1  
    120. {  
    121.     TH0 = 0x3c;  
    122.     TL0 = 0xb0;  
    123.         num++;  
    124.     if(num == 2)  
    125.     {  
    126.         num = 0;  
    127.         kms++;  
    128.         if(kms == 10)  
    129.         {  
    130.             kms = 0;  
    131.             sec++;  
    132.             if(sec == 60)  
    133.             {  
    134.                 sec = 0;  
    135.                 min++;  
    136.                 if(min == 10)  
    137.                 {  
    138.                     TR0 = 0;  
    139.                     min = 9;  
    140.                     sec = 59;  
    141.                     kms = 9;  
    142.                 }  
    143.             }  
    144.         }  
    145.     }  
    146. }   

    程序通过“Keil uVision4”调试,大家也可以在板子上运行一下试试。

    注意:需要根据板子的端口定义相关变量,不要不分青红皂白就直接使用我的程序哈。

    最后上个图,第一次做单片机,希望以后还有时间可以做更深入的更好玩的东西。


    展开全文
  • 利用51单片机制作一个秒表的详细过程

    万次阅读 多人点赞 2017-07-25 19:08:35
    利用51单片机制作一个秒表的详细过程 前面的话: 和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家...
  • 51单片机秒表PROTEUS仿真图
  • 单片机c语言编写的秒表程序,精确到1ms
  • 单片机秒表设计,8位秒表,非延时秒表。也是单片机时钟设计。包括源代码以及仿真图,支持protues8.6仿真。
  • MSP430单片机秒表程序(完整),自己编写的,好用,精确到10ms,最大还可以计到24小时的。感谢下载~~~~~~~
  • 基于51单片机秒表设计与实现-课程设计答辩PPT模板。基于51单片机秒表设计与实现-课程设计答辩PPT模板。基于51单片机秒表设计与实现-课程设计答辩PPT模板。
  • 51单片机秒表程序

    2020-07-30 23:33:36
    秒表,基于51单片机秒表程序。。。。。。。。。。。。。
  • 基于51单片机秒表设计,独立按键实现启动、复位、暂停功能 功能说明: 按键 功能 K1 开始 K2 暂停 K3 复位 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned ...
  • /* 秒表计数函数,每隔10ms调用一次进行秒表计数累加 */ void StopwatchCount() { if (StopwatchRunning) //当处于运行状态时递增计数值 { DecimalPart++; //小数部分+1 if (DecimalPart >= 100) //小数部分计到...
  • 单片机秒表,仿真按下暂停后,只能显示毫秒,打开暂停就请零了![图片说明](https://img-ask.csdn.net/upload/201904/21/1555849363_798333.png)![图片说明]...
  • 单片机秒表计时器

    千次阅读 多人点赞 2012-08-21 10:42:03
    用51单片机的定时器0的方式1计时,结果用4位数码管显示,分别为秒十位,秒个位,毫秒百位,毫秒十位。所以总共最大计时为1分钟,精确到了0.01s。同时,加上3个独立按键,分别控制秒表的清零,暂停和开始功能。  ...
  • 单片机秒表小白代码

    千次阅读 2020-03-26 00:05:58
    单片机小白的秒表代码 作为一个单片机小白,这是我学习单片机的两周来打的第一个秒表程序。 这个程序是在看过另外一个大佬的明白后,才打出来, 我写出来主要是留下个记录,万一以后变动厉害了,也回忆一下, 在这...
  • 用数码管显示的 基于单片机 秒表设计的源代码
1 2 3 4 5 ... 20
收藏数 758
精华内容 303
关键字:

单片机 秒表