找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机4位秒表代码与Proteus仿真图 启动停止清零3个按钮

[复制链接]
跳转到指定楼层
楼主
采用80c52单片机,制作4位秒表,精确到0.01s。有启动、暂停、清零按键。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)






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

  4. sbit k1=P1^0;
  5. sbit k2=P1^1;
  6. sbit k3=P1^2;

  7. uint num;
  8. uint sec=0;
  9. uint ms=0;
  10. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
  11.                     0x92,0x82,0xf8, 0x80,0x90};


  12. void delay(uint a)
  13. {
  14.    uint i,j;
  15.         for(i=0;i<a;i++)
  16.         for(j=0;j<120;j++);
  17.         
  18. }

  19. void Scankey()
  20. {
  21.         if(k1==0)
  22.         {
  23.          delay(5);
  24.                 if(k1==0)
  25.                 {
  26.                          TR0=1;
  27.                 }
  28.         }
  29.         else if(k2==0)
  30.         {
  31.          delay(5);
  32.                 if(k2==0)
  33.                 {
  34.                          TR0=0;
  35.                 }
  36.         }
  37.                 else if(k3==0)
  38.         {
  39.          delay(5);
  40.                 if(k3==0)
  41.                 {
  42.                          sec=0;ms=0;
  43.                 }
  44.         }

  45. }
  46. void Display()
  47. {
  48.                 P2=0x01;
  49.                 P0=table[sec/10];
  50.           delay(1);
  51.                 P2=0x02;
  52.                 P0=table[sec%10]&0x7f;        
  53.           delay(1);
  54.         
  55.                 P2=0x04;
  56.                 P0=table[ms/10];
  57.           delay(1);
  58.                 P2=0x08;
  59.                 P0=table[ms%10];        
  60.           delay(1);

  61. }



  62. void Time0()
  63. {
  64. TMOD=0x01;
  65. TH0=(65535-10000)/256;
  66. TL0=(65535-10000)%256;
  67. ET0=1;
  68. EA=1;        
  69. TR0=0;
  70. }

  71. /**************
  72. 四位数码管显示
  73. 00.00-99.99
  74. 1s=1000ms,定时10ms++
  75. **************/


  76. void main()
  77. {
  78. Time0();
  79. while(1)
  80. {
  81.                
  82. Display();
  83. Scankey();
  84. }
  85.         
  86. }

  87. void zd() interrupt 1
  88. {
  89. TH0=(65535-10000)/256;
  90. TL0=(65535-10000)%256;
  91.         ms++;
  92.         if(ms>=100)
  93.         {
  94.           ms=0;
  95.           sec++;
  96.   if(sec>=99)
  97.    {
  98.    sec=0;
  99.    }
  100. }
  101. }

复制代码
Keil代码与Proteus8.13仿真下载: 4位秒表.zip (75.13 KB, 下载次数: 61)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:863362 发表于 2022-11-26 11:10 | 只看该作者
从98直接跳到00
回复

使用道具 举报

板凳
ID:863362 发表于 2022-11-26 11:30 | 只看该作者

第110行改成 if(sec>=100)即可。
回复

使用道具 举报

地板
ID:1053359 发表于 2022-11-28 14:41 | 只看该作者
就喜欢这种初级的程序,,,,
回复

使用道具 举报

5#
ID:1054541 发表于 2022-11-29 09:01 来自手机 | 只看该作者
sonique0371 发表于 2022-11-26 11:10
从98直接跳到00

这个应该可以改的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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