找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2865|回复: 0
打印 上一主题 下一主题
收起左侧

基于89c52单片机的秒表程序与电路制作

[复制链接]
跳转到指定楼层
楼主
原理图。仿真。都有。仿真需要用到8.6版本。实物亲测可用。就是仿真因为刷新速度太快一直显示8888,更改一下延时就行了。可以实现倒计时。到了报警。可以正计时。记录过了多久时间。用12mhz晶振。时钟比较准确。



仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit s1=P1^0;
  5. sbit s2=P1^1;
  6. sbit s3=P1^2;
  7. sbit s4=P1^3;


  8. sbit key1=P3^4;
  9. sbit key2=P3^3;
  10. sbit key3=P3^2;


  11. sbit buzz=P1^4;


  12. uint time=6,time10ms;
  13. unsigned char  table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
  14. uchar flag;


  15. /*----------------------------
  16. 软件延时
  17. ----------------------------*/
  18. void Delay(int n)                  //延时函数
  19. {
  20.     int x;

  21.     while (n--)
  22.     {
  23.         x = 50;
  24.         while (x--);
  25.     }
  26. }


  27. void InitTimer0(void)//        10ms
  28. {
  29.     TMOD = 0x01;
  30.     TH0 = 0x0D8;
  31.     TL0 = 0x0F0;
  32.     EA = 1;
  33.     ET0 = 1;
  34.     TR0 = 1;
  35. }


  36. void Timer0Interrupt(void) interrupt 1
  37. {
  38.     TH0 = 0x0D8;
  39.     TL0 = 0x0F0;
  40.    time10ms++;
  41.   if(time10ms>=100)
  42.   {  if(flag==2&&time>0)         //开始倒计时
  43.     {  time--;
  44.           if(time<=0)
  45.            time=0;
  46.           }
  47.         if(flag==4&&flag<=999)         //开始正计时
  48.            time++;        
  49.                
  50.          time10ms=0;
  51.         
  52.         }

  53.    
  54. }

  55. void display(int hh)//        int型函数只能取整数,不能取小数。
  56. {

  57.   s1=0;//因为是共阳数码管,就是正极连在一起。所以高电平就可以点亮他。 但是用的PNP三极管。低电平导通。所以是低电平。
  58.   P2=table[hh/100];         //        假如是821,821/100=8.21,取整数部分就为8
  59.   Delay(5);
  60.   s1=1;
  61.   P2=0xff;
  62.   
  63.   
  64.    
  65. s2=0;
  66.   P2=table[hh%100/10]; //%号是取余数的意思        821除以100的余数等于21,21除以10的整数部分为2
  67.   Delay(5);
  68.   s2=1;
  69.   P2=0xff;         


  70.   s3=0;
  71.   P2=table[hh%100%10];        //
  72.   Delay(5);
  73.   s3=1;
  74.   P2=0xff;

  75.   
  76. if(flag==0||flag==2)          //表示倒计时开始
  77. {  s4=0;
  78.   P2=table[14];
  79.   Delay(5);
  80.   s4=1;
  81.   P2=0xff;         }

  82.   else

  83.   {  
  84.   
  85.   if(flag==1)          //这里设置倒计时时间
  86.   {s4=0;
  87.   P2=table[10];
  88.   Delay(5);
  89.   s4=1;
  90.   P2=0xff;         }

  91.    if(flag==3)                //
  92.         {
  93.         s4=0;        //在进行温度上限设置的时候。最后一位就显示B,表示在正计时
  94.     P2=table[12];
  95.     Delay(5);
  96.     s4=1;
  97.     P2=0xff;        
  98.         
  99.         
  100.         
  101.         }
  102.   
  103.   
  104.   }


  105. }


  106. void keycan()
  107. {  


  108.    if(key1==0&&flag==1)
  109.   {  Delay(100);
  110.     if(key1==0&&flag==1)
  111.          { time++;}
  112.   }

  113.   
  114.    if(key2==0)
  115.   {  Delay(100);
  116.     if(key2==0)
  117.           flag++;        
  118.           if(flag==3)
  119.           {time=0;buzz=1;           }
  120.            
  121.          

  122.           if(flag>4)
  123.           {flag=0;        
  124.            time=6;
  125.                             }
  126.   }

  127.    if(key3==0&&flag==1)
  128.   {  Delay(100);
  129.     if(key3==0&&flag==1)
  130.           time--;        
  131.   }
  132.   
  133.   
  134.   }






  135. main()
  136. {
  137. InitTimer0();
  138. ……………………

  139. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
秒表.rar (1.15 MB, 下载次数: 15)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表