找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机多功能秒表2位共阴数码管Proteus仿真程序 减时间 加时间按钮

[复制链接]
跳转到指定楼层
楼主
多功能秒表仿真和程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^5;
  5. sbit w1=P2^0;
  6. sbit w2=P2^1;

  7. sbit s2=P3^3;
  8. sbit s3=P3^4;
  9. sbit s4=P3^5;
  10. sbit s5=P3^6;
  11. sbit s6=P3^7;
  12. sbit buzz=P1^0;
  13. uchar N=00;           //定义时间,可自由更改为0-99;
  14. uchar miao;
  15. bit flag=0;
  16. unsigned int pp;
  17. uchar j,k;
  18. uchar nn=0;
  19. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  20.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

  21. void delay(unsigned char i)
  22. {
  23.   for(j=i;j>0;j--)
  24.     for(k=125;k>0;k--);
  25. }
  26. void display(uchar n)
  27. {
  28.    uchar c,d;
  29.    c=n/10;
  30.    d=n%10;
  31.    P0=0x00;
  32.    dula=0;
  33.    P0=table[c];
  34.    dula=1;
  35.    w1=0,w2=1;
  36.    delay(5);

  37.    P0=0x00;
  38.    dula=0;
  39.    P0=table[d];
  40.    dula=1;
  41.    w2=0,w1=1;
  42.    delay(5);
  43. }
  44. void scankeys()
  45. {


  46.   if(s2==0 && TR0==0)          //--
  47.         {
  48.          delay(5);
  49.          if(s2==0)
  50.          {
  51.          if(N>0)
  52.           N--;
  53.           miao=N;
  54.          }
  55.          while(!s2);
  56.         }
  57. if(s3==0&& TR0==0)           //++
  58.         {
  59.          delay(5);
  60.          if(s3==0)
  61.          {
  62.          if(N<100)
  63.           N++;
  64.           miao=N;
  65.          }
  66.          while(!s3);
  67.         }
  68. if(s4==0)
  69. {
  70. TR0=1;                  //启动
  71. }
  72. if(s5==0)
  73. {
  74. TR0=0;                  //暂停
  75. }
  76. if(s6==0)
  77. {
  78. TR0=1,miao=N=0,pp=0;                  //清零
  79. }
  80. }
  81. void main()
  82. {
  83.         TMOD=0x01;
  84.         TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
  85.         TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
  86.         ET0=1;    //        开定时器0中断
  87.         TR0=0;         
  88.         EA=1;
  89.         miao=N;
  90.         while(1)
  91.         {
  92.         display(miao);
  93.         scankeys();
  94.         if(miao==99)
  95.         {
  96.         buzz=0;
  97.         }
  98.         else
  99.         {
  100.         buzz=1;
  101.         }
  102.     }
  103. }

  104. void time0() interrupt 1
  105. {        TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
  106.         TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
  107.         pp++;
  108.         if(pp==20)
  109.         {
  110.             pp=0;
  111.                 if(miao<99)
  112.                 miao++;        
  113.         
  114.         }

  115. }
复制代码
Keil代码与Proteus仿真下载:
秒表2位共阴数码管.zip (96.77 KB, 下载次数: 30)

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

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

使用道具 举报

沙发
ID:1060196 发表于 2023-1-3 21:25 | 只看该作者
向大佬致敬,向大佬学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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