找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机两位电子秒表源码+仿真

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


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit K1 = P3^7;
  5. uchar i,s=0,Key_Flag_Idx=0,shi=0,ge=0;
  6. bit Key_State;
  7. uchar DSY_CODE[]=
  8. {
  9.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
  10. };

  11. void DelayMS(uint ms)
  12. {
  13.         uchar t;
  14.         while(ms--)
  15.         {
  16.                  for(t=0;t<120;t++);
  17.         }
  18. }
  19. void qidong()
  20. {
  21.   for(i=1;i<=10;i++)
  22.   {DelayMS(100);
  23.    if(Key_State != K1)
  24.     {
  25.           DelayMS(10);
  26.           Key_State = K1;
  27.           if(Key_State == 0)
  28.             {
  29.               Key_Flag_Idx=(Key_Flag_Idx+1)%3;
  30.                   return;
  31.                 }
  32.         }
  33.    }                   
  34.          ge=(ge+1)%10;
  35.          if(ge==0)shi=shi+1;
  36.          if(shi==6)shi=0;
  37.                 
  38. }

  39. void zhanting()
  40. {
  41.   while(Key_Flag_Idx==2)
  42.   {if(Key_State != K1)
  43.     {
  44.           DelayMS(10);
  45.           Key_State = K1;
  46.           if(Key_State == 0)
  47.             {
  48.               Key_Flag_Idx=(Key_Flag_Idx+1)%3;return;
  49.                 }
  50.     }
  51.    }
  52. }
  53. void main()
  54. {
  55.         P0 = 0x3f;
  56.         P2 = 0x3f;        
  57.         Key_State = 1;        //P3.7引脚的初始状态为1
  58.        
  59.         while(1)
  60.         {
  61.                  if(Key_State != K1)//若P3.7引脚值有变化,其中K1为P3.7引脚值
  62.                 {
  63.                          DelayMS(10);//消抖
  64.                         Key_State = K1;        //将当前P3.7值赋给Key_State变量
  65.                   if(Key_State == 0) //若当前P3.7值为0,即若有按键按下
  66.               {
  67.                     Key_Flag_Idx=(Key_Flag_Idx+1)%3; //按键按下次数为...
  68.                    }
  69.                  }
  70.                       switch(Key_Flag_Idx)
  71.                       {
  72.                              case 1:qidong();break;
  73.                             case 2:zhanting();break;
  74.                             case 0:shi=0;ge=0;
  75.                       }                    
  76.        
  77.             P0 = DSY_CODE[shi];
  78.                 P2 = DSY_CODE[ge];
  79.    }

  80.   }
复制代码

所有资料51hei提供下载:
秒表.zip (57.24 KB, 下载次数: 23)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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