找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机秒表程序(可暂停)

[复制链接]
跳转到指定楼层
楼主
ID:423520 发表于 2018-11-9 12:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //可实现计时功能,最大计时时间为99小时。
  2. //支持暂停功能,按键盘中左下角的S2键,可暂停计时;按下S3,可继续计时。
  3. //注意晶振需为11.0592M。
  4. //若为其他数值晶振,请改变TH0与TL0参数值,否则计时会有很大误差 。

  5. #include<reg51.h>

  6. #define uchar unsigned char

  7. sbit dula=P2^6;
  8. sbit wela=P2^7;
  9. sbit beep=P2^3;
  10. sbit S2=P3^0;
  11. sbit S3=P3^1;
  12. unsigned char halt,j,k,a1,a0,b1,b0,c1,c0,s,f,m,n=255;
  13. unsigned int pp;
  14. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  15.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  16. void delay(unsigned char i)
  17. {
  18.   for(j=i;j>0;j--)
  19.     for(k=125;k>0;k--);
  20. }

  21. void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
  22. {
  23.    dula=0;
  24.    P0=table[shi2];
  25.    dula=1;
  26.    dula=0;
  27.    
  28.    wela=0;
  29.    P0=0xfe;
  30.    wela=1;
  31.    wela=0;
  32.    delay(5);
  33.    
  34.    P0=table[shi1]|0x80;
  35.    dula=1;
  36.    dula=0;
  37.    
  38.    P0=0xfd;
  39.    wela=1;
  40.    wela=0;
  41.    delay(5);

  42.    P0=table[fen2];
  43.    dula=1;
  44.    dula=0;
  45.    
  46.    P0=0xfb;
  47.    wela=1;
  48.    wela=0;
  49.    delay(5);
  50.    
  51.    P0=table[fen1]|0x80;
  52.    dula=1;
  53.    dula=0;
  54.    
  55.    P0=0xf7;
  56.    wela=1;
  57.    wela=0;
  58.    delay(5);
  59.    
  60.    P0=table[miao2];
  61.    dula=1;
  62.    dula=0;
  63.    
  64.    P0=0xef;
  65.    wela=1;
  66.    wela=0;
  67.    delay(5);
  68.    
  69.    P0=table[miao1];
  70.    dula=1;
  71.    dula=0;
  72.    
  73.    P0=0xdf;
  74.    wela=1;
  75.    wela=0;
  76.    delay(5);
  77. }

  78. void keyscan()
  79. {
  80.         if(S2==0)
  81.         delay(10);
  82.         if(S2==0)
  83.         {
  84.                 halt=1;
  85.         }
  86.         if(S3==0)
  87.         halt=0;
  88. }

  89. void main()
  90. {
  91.         TMOD=0x01;
  92.         TR0=1;
  93.         TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
  94.         TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
  95.         ET0=1;
  96.         EA=1;
  97.         while(1)
  98.         {        keyscan();
  99.                 if(halt==0)
  100.                 {
  101.                 TR0=1;
  102.                 if(pp==20)
  103.                 {        pp=0;
  104.                         m++;
  105.                         n--;
  106.                         P1=n;//闪烁灯
  107.                         if(m==60)
  108.                         {
  109.                                 m=0;
  110.                                 f++;
  111.                                 if(f==60)
  112.                                 {
  113.                                         f=0;
  114.                                         s++;
  115.                                         if(s==99)
  116.                                         {
  117.                                                 s=0;
  118.                                         }
  119.                                 }
  120.                         }
  121.                 }
  122.                
  123.                 a0=s%10;
  124.                 a1=s/10;
  125.                 b0=f%10;
  126.                 b1=f/10;
  127.                 c0=m%10;
  128.                 c1=m/10;
  129.                 display(a1,a0,b1,b0,c1,c0);
  130.         }
  131.         else
  132.         TR0=0;
  133.         display(a1,a0,b1,b0,c1,c0);
  134.         }
  135. }

  136. void time0() interrupt 1
  137. {TH0=(65536-46080)/256;
  138.         TL0=(65536-46080)%256;
  139.         pp++;
复制代码

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

使用道具 举报

沙发
ID:1 发表于 2018-11-9 15:29 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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