找回密码
 立即注册

QQ登录

只需一步,快速开始

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

8位秒表单片机设计 可以随时暂停,继续开始 复位操作 附带程序

[复制链接]
ID:449830 发表于 2018-12-19 19:16 | 显示全部楼层 |阅读模式
8位秒表设计
支持 1 ;复位       2 ;暂停        3 ;继续


16号引脚 接的晶振button   按下开始计时     再次按下停止计时  在次按下接着上次计时
15号引脚 接的晶振button   按下结束计时  再次按下复位
    下边是整体效果图↓↓↓↓↓↓↓↓↓↓↓①
1111.jpg
      89c51单片机引脚接线图如下↓↓↓↓↓↓↓↓↓②
222222.jpg



   数码管显示器↓↓↓↓↓↓↓↓↓↓③
333.jpg



       keil写的程序  C语言编写的   自己生成  .hex格式文件

     [size=13.3333px] [size=13.3333px]感谢大家的支持
  1. #include <reg51.h>

  2. #define uchar unsigned char

  3. sbit start=P3^6;

  4. sbit stop=P3^5;

  5. uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,

  6. 0x6d,0x7d,0x07,0x7f,0x6f,0x40};

  7. uchar code welatab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位控制字

  8. uchar msec,sec,min;

  9. void delay(uchar time)

  10. {

  11. uchar i,j;

  12. for(i=0;i<time;i++)

  13. {

  14. for(j=0;j<110;j++)

  15. ;

  16. }

  17. }

  18. void writeled(uchar num,uchar addr)

  19. {
  20. P2=0xff;
  21. P0=dulatab[num];
  22. P2=welatab[addr];

  23. delay(4);

  24. }

  25. void display(uchar msec,uchar sec,uchar min)

  26. {

  27. uchar msech,msecl,sech,secl,minh,minl;

  28. msech=msec/10;

  29. msecl=msec%10;

  30. sech=sec/10;

  31. secl=sec%10;

  32. minh=min/10;

  33. minl=min%10;

  34. writeled(minh,0);

  35. writeled(minl,1);

  36. writeled(10,2);

  37. writeled(sech,3);

  38. writeled(secl,4);

  39. writeled(10,5);

  40. writeled(msech,6);

  41. writeled(msecl,7);

  42. }

  43. void init()

  44. {

  45. TMOD=0x10;

  46. TH1=0xd8;

  47. TL1=0xf0;

  48. // TR1=1;

  49. EA=1;

  50. ET1=1;

  51. }

  52. void keyscan()

  53. {

  54. if(start==0)

  55. {

  56. delay(2);

  57. if(start==0)

  58. {

  59. TR1=~TR1;

  60. while(start==0)

  61. {

  62. display(msec,sec,min);

  63. }

  64. }

  65. }

  66. if(stop==0&&TR1==0)

  67. {

  68. delay(2);

  69. if(stop==0)

  70. {

  71. msec=0;

  72. sec=0;

  73. min=0;

  74. while(stop==0)

  75. {

  76. display(msec,sec,min);

  77. }

  78. }

  79. }

  80. }

  81. void main()

  82. {

  83. init();

  84. while(1)

  85. {

  86. display(msec,sec,min);

  87. keyscan();

  88. }

  89. }

  90. void timer1() interrupt 3

  91. {

  92. TH1=0xd8;

  93. TL1=0xf0;

  94. msec++;

  95. if(msec==100)

  96. {

  97. msec=0;

  98. sec++;

  99. if(sec==60)

  100. {

  101. sec=0;

  102. min++;

  103. if(min==60)

  104. {

  105. min=0;

  106. }

  107. }

  108. }

  109. }
复制代码


评分

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

查看全部评分

回复

使用道具 举报

ID:1010812 发表于 2022-3-17 10:56 | 显示全部楼层
楼主,改成时分秒怎么改呢
回复

使用道具 举报

ID:268524 发表于 2022-4-12 11:00 | 显示全部楼层
设计很简洁,挺好的,很棒呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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