找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9452|回复: 23
收起左侧

智能秒表的设计与制作

  [复制链接]
ID:94489 发表于 2015-12-19 13:40 | 显示全部楼层 |阅读模式
之前的账号忘记了,只能重新注册和上传,智能秒表的设计与制作包含论文和程序非常全
0.png
  1. /*******************************/
  2. /*     智能秒表(完美版)      */
  3. /*******************************/
  4. #include<reg52.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. sbit key1=P2^0;                //定义"启动/暂停"按钮
  8. sbit key2=P2^1;                //定义"复位"按钮
  9. sbit key3=P2^2;                                 //定义"模式"按钮
  10. sbit key4=P2^3;                                 //定义"查看"按钮
  11. sbit wei1=P2^4;                //定义位选
  12. sbit wei2=P2^5;
  13. sbit wei3=P2^6;               
  14. sbit wei4=P2^7;
  15. bit flag_start,flag_mode,flag_5sec;
  16. uchar temp,temp1,aa,aa1,shi,ge,shifen,baifen,num,i,j;
  17. uchar time_data1[11],time_data2[11];
  18. uchar code table[]={
  19. 0x3f,0x06,0x5b,0x4f,
  20. 0x66,0x6d,0x7d,0x07,
  21. 0x7f,0x6f,0x77,0x7c,
  22. 0x39,0x5e,0x79,0x71};          //不带小数点共阴极数码管编码
  23. uchar code tabledp[]={
  24. 0xbf,0x86,0xdb,0xcf,
  25. 0xe6,0xed,0xfd,0x87,
  26. 0xff,0xef,0xf7,0xfc,
  27. 0xb9,0xde,0xf9,0xf1};        //带小数点共阴极数码管编码
  28. void display(uchar shi,uchar ge,uchar shifen,uchar baifen);  //声明显示子函数
  29. void delay(uint z);            //声明延时子函数
  30. void init();                  //声明初始化函数
  31. void key();                                   //声明键扫描函数
  32. void display_process();                   //声明显示处理函数

  33. void main()
  34. {       
  35.         init();                                //调用初始化子程序
  36.         while(1)
  37.         {                      
  38.           key();
  39.           display_process();       
  40.           display(shi,ge,shifen,baifen);        //调用显示子函数
  41.         }
  42. }

  43. void delay(uint z)                       //延时子函数
  44. {
  45.         uint x,y;
  46.         for(x=z;x>0;x--)
  47.                 for(y=110;y>0;y--);
  48. }

  49. void display(uchar shi,uchar ge,uchar shifen,uchar baifen)   //显示子程序
  50. {       
  51.                 P0=table[shi];        //使用动态扫描的方法实现数码管显示
  52.                 wei1=0;
  53.                 delay(1);
  54.                 wei1=1;

  55.                 P0=tabledp[ge];
  56.                 wei2=0;
  57.                 delay(1);            
  58.                 wei2=1;
  59.    
  60.     P0=table[shifen];//使用动态扫描的方法实现数码管显示
  61.                 wei3=0;
  62.                 delay(1);
  63.                 wei3=1;

  64.                 P0=table[baifen];
  65.                 wei4=0;
  66.                 delay(1);            
  67.                 wei4=1;       
  68. }

  69. void init()                     //初始化子程序
  70. {       
  71.         temp=0;
  72.         TMOD=0x01;             //使用定时器T0的方式1
  73.         TH0=(65536-10000)/256;
  74.         TL0=(65536-10000)%256;   //定时50ms中断一次
  75.         EA=1;                   //中断总允许
  76.         ET0=1;                  //允许定时器T0中断       
  77. }

  78. void key()
  79. {
  80.         if(key1==0)           //检测"启动"按钮是否按下
  81.          {
  82.                 delay(5);         //延时去抖动
  83.                 if(key1==0)       //再次检测"启动"按钮是否按下
  84.                  {       
  85.            while(!key1);           //松手检测
  86.                    flag_start=~flag_start;
  87.                    if(flag_mode==0)
  88.                     {
  89.                       if(flag_start==1)
  90.                             TR0=1;              //启动定时器开始工作
  91.                       else
  92.                             TR0=0;
  93.                         }
  94.                    else
  95.                         {
  96.                           if(flag_start==1)
  97.                             TR0=1;
  98.                           else
  99.                             TR0=0;
  100.                         }
  101.                  }
  102.          }
  103.                 if(key2==0)                 //检测"停止"按钮是否按下   
  104.                 {
  105.                         delay(5);         
  106.                         if(key2==0)      
  107.                         {       
  108.                                 while(!key2);
  109.                                 if(flag_mode==0||i!=0)
  110.                                  {  
  111.                                   shi=0;              //关闭定时器
  112.                                   ge=0;
  113.                                   shifen=0;
  114.                                   baifen=0;
  115.                                   aa=0;
  116.                                   temp=0;
  117.                                   TR0=0;
  118.                                   i=0;
  119.                                   num=0;
  120.                                   for(j=0;j<=10;j++)
  121.                                   {
  122.                                     time_data1[j]=0;
  123.                                     time_data2[j]=0;
  124.                                   }
  125.                                  }
  126.                             else
  127.                              {
  128.                                    num++;
  129.                                    if(num==11)
  130.                                      num=1;
  131.                                    aa1=aa;
  132.                                    temp1=temp;
  133.                                    time_data1[num]=aa1;
  134.                                    time_data2[num]=temp1;
  135.                                    flag_5sec=0;
  136.                                  }
  137.                         }
  138.                 }
  139.                 if(key3==0)
  140.                 {
  141.                   delay(5);
  142.                   if(key3==0)
  143.                    {
  144.                      while(!key3);
  145.                          flag_mode=~flag_mode;
  146.                    }
  147.                 }
  148.            if(key4==0)
  149.                 {
  150.                   delay(5);
  151.                   if(key4==0)
  152.                    {
  153.                      while(!key4);
  154.                          i++;
  155.                          TR0=0;
  156.                          if(i==11)
  157.                           i=1;
  158.                    }
  159.                 }
  160. }               

  161. void display_process()
  162. {
  163.   shifen=aa%100/10;
  164.   baifen=aa%10;
  165.   shi=temp%100/10;
  166.   ge=temp%10;
  167.   if(flag_mode==1&&num!=0&&flag_5sec==0)
  168.    {
  169.          shi=time_data2[num]/10;
  170.      ge=time_data2[num]%10;
  171.          shifen=time_data1[num]/10;
  172.          baifen=time_data1[num]%10;
  173.          if(temp-time_data2[num]==2)
  174.            flag_5sec=~flag_5sec;
  175.    }
  176.   if(i!=0)
  177.         {
  178.           shi=time_data2[i]/10;
  179.           ge=time_data2[i]%10;
  180.           shifen=time_data1[i]/10;
  181.           baifen=time_data1[i]%10;
  182.     }
  183. }

  184. void timer0() interrupt 1
  185. {
  186.         TH0=(65536-10000)/256;  //重新赋初值
  187.         TL0=(65536-10000)%256;
  188.         aa++;                   //中断一次变量aa的值加1
  189.         if(aa==100)             //中断100次后,定时时间为100*10ms=1000ms=1s,将变量temp的值加1
  190.         {
  191.           aa=0;
  192.           temp++;
  193.           if(temp==100)       //秒表到达100s后回零
  194.                 temp=0;
  195.         }       
  196. }
复制代码


智能秒表的设计与制作.zip

506.92 KB, 下载次数: 265, 下载积分: 黑币 -5

评分

参与人数 3黑币 +53 收起 理由
fu123456 + 1 很给力!
lilifly + 2 共享资料的黑币奖励!
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:107352 发表于 2016-6-26 13:59 | 显示全部楼层
学习了这个做的真的非常不错
回复

使用道具 举报

ID:126065 发表于 2016-6-30 21:58 | 显示全部楼层
多谢   受用了
回复

使用道具 举报

ID:146409 发表于 2016-11-15 12:37 | 显示全部楼层
里面有没有仿真图    我想参考下
回复

使用道具 举报

ID:155756 发表于 2016-12-19 12:51 | 显示全部楼层
请问,这个秒表能实现什么功能?
回复

使用道具 举报

ID:156881 发表于 2016-12-23 11:54 | 显示全部楼层
没仿真?
回复

使用道具 举报

ID:156881 发表于 2016-12-23 11:54 | 显示全部楼层
有仿真吗大神
回复

使用道具 举报

ID:77498 发表于 2017-5-7 07:42 | 显示全部楼层
多谢   受用了
回复

使用道具 举报

ID:194701 发表于 2017-5-7 07:43 | 显示全部楼层
学习了这个做的真的非常不错
回复

使用道具 举报

ID:264008 发表于 2017-12-19 22:48 | 显示全部楼层
谢谢啦,正好需要
回复

使用道具 举报

ID:275368 发表于 2018-1-13 19:44 | 显示全部楼层
谢谢!!!!
回复

使用道具 举报

ID:304425 发表于 2018-4-12 18:45 来自手机 | 显示全部楼层
我刚为了pcb layout下载了…结果也没有啊…有谁有pcb吗
回复

使用道具 举报

ID:350373 发表于 2018-6-12 17:02 | 显示全部楼层
谢谢,可以下载吗
回复

使用道具 举报

ID:351076 发表于 2018-6-13 14:11 | 显示全部楼层
学习
回复

使用道具 举报

ID:299041 发表于 2018-6-14 10:14 | 显示全部楼层
我想下载看看
回复

使用道具 举报

ID:354070 发表于 2018-6-19 10:07 | 显示全部楼层

我想下载看看
回复

使用道具 举报

ID:354970 发表于 2018-6-20 10:35 | 显示全部楼层
好货.......
回复

使用道具 举报

ID:204450 发表于 2018-7-30 09:40 | 显示全部楼层
好东西   谢谢分享
回复

使用道具 举报

ID:443945 发表于 2018-12-11 11:56 | 显示全部楼层
复制了代码运行不了...
回复

使用道具 举报

ID:404878 发表于 2018-12-12 19:34 | 显示全部楼层
再有仿真的话就完美了
回复

使用道具 举报

ID:481652 发表于 2019-4-16 22:31 | 显示全部楼层
多谢,很好用
回复

使用道具 举报

ID:738156 发表于 2020-4-26 14:42 | 显示全部楼层
很给力!
回复

使用道具 举报

ID:843474 发表于 2020-11-14 14:29 | 显示全部楼层
用了真的非常不错
回复

使用道具 举报

ID:863872 发表于 2020-12-20 12:59 | 显示全部楼层
有硬件的pcb图吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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