找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机10秒的秒表计数仿真与源码

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


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void key1();
  6. void key2();
  7. void key3();
  8. uchar keyflay;
  9. uchar seconds =00;
  10. uchar gw = 0;
  11. uchar dw = 0;
  12. uint c = 0;
  13. sbit key = P3^0;
  14.        
  15. uchar code distab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴段码,无小数点

  16. void DelayMS(uint x)
  17. {
  18.         uchar i;
  19.         while(x--) for(i=0; i<240; i++);
  20. }

  21. void xs()
  22. {
  23.         seconds =seconds %100;
  24.         gw=seconds/10;
  25.         dw=seconds%10;

  26.         P0=distab[gw];
  27.         P2=0x01;
  28.         DelayMS(2);
  29.         P0=0x00;
  30.         P2=0x01;
  31.         DelayMS(2);
  32.        
  33.         P0=distab[dw];
  34.         P2=0x02;
  35.         DelayMS(2);
  36.         P0=0x00;
  37.         P2=0x02;
  38.         DelayMS(2);
  39. }

  40. void KeyScan()
  41. {
  42.         keyflay = keyflay% 3;
  43.         switch(keyflay)
  44.         {
  45.                 case 0:                key1(); break;
  46.                 case 1:                key2(); break;
  47.                 case 2:                key3();
  48.         }
  49.         keyflay++;
  50. }

  51. void key1()
  52. {
  53.         TR0=1;
  54. }
  55. void key2()
  56. {
  57.         TR0=0;
  58. }
  59. void key3()
  60. {
  61.         seconds=0;
  62. }
  63. void  b()interrupt 1
  64. {
  65.         if(++c==500)
  66.         {
  67.                 seconds++;
  68.                 c=0;
  69.         }
  70. }
  71. int main()
  72. {       
  73.         uchar d = 1;
  74.         keyflay = 0;
  75.         key = 1;
  76.        
  77.         TMOD=0x02;
  78.         TH0=256-200;
  79.         TL0=256-200;
  80.         IE=0x82;
  81.         TR0=0;
  82.        
  83.         while(1)
  84.         {
  85.                 xs();
  86.                 if(key != d)
  87.                 {
  88.                         d=key;
  89.                         DelayMS(30);                //防抖处理
  90.                         if(key == 0)                //判断键是否按下
  91.                         {
  92.                                 KeyScan();                //键处理程序
  93.                         }
  94.                 }
  95.         }
  96. }
  97.        
  98.        
复制代码

所有资料51hei提供下载:
10秒的秒表.zip (105.2 KB, 下载次数: 30)


评分

参与人数 3黑币 +60 收起 理由
shen998227 + 5 绝世好帖!
15005858438 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:427713 发表于 2018-11-16 14:47 | 只看该作者
帮到我
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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