找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3234|回复: 2
收起左侧

单片机秒表计时器Proteus仿真+程序 已成功

[复制链接]
ID:316613 发表于 2021-7-2 21:14 | 显示全部楼层 |阅读模式
秒表计时器,仿真+程序已成功
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char        //无符号字符型宏定义
  3. #define   MS   2000
  4. uchar code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不带小数点数码管段码
  5. uchar code led2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点数码管段码
  6. uchar n=0,m=0,j=0,k=0;//四位要显示数据
  7. uchar keyln=0; //按键值
  8. sbit key=P3^3; //按键接口
  9. sbit key2=P3^2;
  10. sbit key1=P3^1;
  11. sbit key4=P3^4;
  12. uchar bit_;
  13. uchar num;
  14. uchar z,x,c,v;
  15. uchar h;
  16. uchar flag=0;
  17. uchar val[5][5];
  18. char val_index;
  19. uchar bc[4];
  20. uchar bc2[4];
  21. void Display2(void)        ;
  22. void Display3(void)        ;          //显示函数;
  23. void Delay_ms(uchar s);//延时函数声明
  24. void Display(void);         //显示函数声明

  25. void disp_1();
  26. void disp_2();
  27. void disp_3();
  28. void disp_4();
  29. void main(void)        // 主函数
  30. {
  31.           TMOD=0X01;          //定时器0方式1
  32.         TH0=(65536-8000)/256;  //预设初值高位
  33.         TL0=(65536-8000)%256;  //预设初值低位
  34.         ET0=1;         //开定时器0中断
  35.         EA=1;          //开总中断
  36.         TR0=0;          //定时器关
  37.         z=x=c=v=0;
  38.         while(1)   //主函数循环
  39.         {               

  40.                
  41. if(key==0)          //判断按键是否按下
  42.         {
  43.                 Delay_ms(50);  //延时,软件消抖
  44.                 if(key==0)          //再次判断按键是否一直被按下
  45.                 {
  46.                                 TR0=!TR0;
  47.                         while(!key); //等待按键弹起
  48.                 }
  49.         }
  50. if(key4==0)          //判断按键是否按下
  51.         {
  52.                 Delay_ms(50);  //延时,软件消抖
  53.                 if(key4==0)          //再次判断按键是否一直被按下
  54.                 {
  55.                                 n=m=j=k=0;
  56.                         while(!key4); //等待按键弹起
  57.                 }
  58.         }


  59.         Display();//正常模式下数据

  60. }
  61. }

  62. void timer0(void) interrupt 1           //定时器0中断服务子程序
  63. {
  64.           TH0=(65536-8000)/256;                   //重赋初值高位
  65.         TL0=(65536-8000)%256;                   //重赋初值低位
  66.         //num++;
  67.        
  68.         n++;                                                   //秒表最低位+1
  69.         if(n==10)                                           //如果最低位=10
  70.         {
  71.           n=0;                                                   //则最低位清0
  72.           m++;                                                   //前一位+1
  73.           if(m==10)                                          //以下如此推理
  74.           {
  75.             m=0;
  76.                   j++;
  77.                 if(j==10)
  78.                 {
  79.                     j=0;
  80.                     k++;
  81.                if(k==6)                           //当最高位为10时,全部清零
  82.                   {
  83.                         n=0;
  84.                         m=0;
  85.                         j=0;
  86.                         k=0;
  87.                   }
  88.                 }
  89.           }
  90.         }
  91. }
  92. void Delay_ms(uchar s)          //延时函数
  93. {
  94.     uchar i;
  95.         for(i=0;i<s;i++);
  96. }




  97. void Display(void)                  //显示函数
  98. {

  99.           P2=0XF7;                          //最低位
  100.           P1=led1[n];
  101.           Delay_ms(MS);
  102.           P2=0XFF;

  103.           P2=0XFB;                         //第三位
  104.           P1=led1[m];
  105.           Delay_ms(MS);
  106.           P2=0XFF;

  107.           P2=0XFD;                        //第二位
  108.           P1=led2[j];
  109.           Delay_ms(MS);
  110.           P2=0XFF;
  111.        
  112.           P2=0XFE;                         //第一位
  113.           P1=led1[k];
  114.           Delay_ms(MS);
  115.           P2=0XFF;               
  116. }                       



  117. void Display2(void)                  //显示函数
  118. {
  119.                   P2=0XF7;                          //最低位
  120.                   P1=led1[bc[0]];
  121.                   Delay_ms(MS);
  122.                   P2=0XFF;

  123.                   P2=0XFB;                         //第三位
  124.                   P1=led1[bc[1]];
  125.                   Delay_ms(MS);
  126.                   P2=0XFF;

  127.                   P2=0XFD;                        //第二位
  128.                   P1=led2[bc[2]];
  129.                   Delay_ms(MS);
  130.                   P2=0XFF;

  131.                
  132.                   P2=0XFE;                         //第一位
  133.                   P1=led1[bc[3]];
  134.                   Delay_ms(MS);
  135.                   P2=0XFF;       
  136. }       

  137. void Display3(void)                  //显示函数
  138. {
  139.               P2=0XF7;                          //最低位
  140.                   P1=led1[bc2[0]];
  141.                   Delay_ms(MS);
  142.                   P2=0XFF;

  143.                   P2=0XFB;                         //第三位
  144.                   P1=led1[bc2[1]];
  145.                   Delay_ms(MS);
  146.                   P2=0XFF;

  147.                   P2=0XFD;                        //第二位
  148.                   P1=led2[bc2[2]];
  149.                   Delay_ms(MS);
  150.                   P2=0XFF;

  151.                
  152.                   P2=0XFE;                         //第一位
  153.                   P1=led1[bc2[3]];
  154.                   Delay_ms(MS);
  155.                   P2=0XFF;       
  156.        
  157. }       
复制代码
51hei.png
所有资料51hei提供下载(Proteus是7.5版本的工程,不要用高版本打开):
秒表基础版.rar (73.07 KB, 下载次数: 126)

评分

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

查看全部评分

回复

使用道具 举报

ID:885725 发表于 2021-7-6 09:35 | 显示全部楼层
谢谢楼主。请问仿真软件是Proteus,制图用什么软件呢?
回复

使用道具 举报

ID:1056233 发表于 2022-12-19 14:20 | 显示全部楼层
能问问怎么把量程设置成99.99吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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