单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

带启动和暂停按钮的单片机计数器仿真实验 附源码

[复制链接]
跳转到指定楼层
楼主
两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,蜂鸣器响一声,数码管回归0,重新计数。

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


单片机源程序如下:
  1. #include <reg51.h>
  2. sbit P2_7=P2^7;
  3. sbit P3_2=P3^2;
  4. sbit P3_3=P3^3;
  5. int count=0;
  6. int sign=0;
  7. int count1=0;       
  8. int count1_h=0;
  9. int count1_l=0;
  10. char count2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  11. void delay(long time)
  12. {
  13.         int i=0;
  14.         while(time--)
  15.         for(i=0;i<125;i++);
  16. }

  17. void delay1(long time)
  18. {
  19.         int i=0;
  20.         while(time--)
  21.         for(i=0;i<125;i++);
  22. }

  23. void buz_on()
  24. {
  25.         P2_7=1;
  26.         delay(100);
  27.         P2_7=0;
  28. }

  29. void clear()
  30. {
  31.         count=0;
  32.         buz_on();
  33. }

  34. void k1on() interrupt 0
  35. {
  36.         if(P3_2!=1)
  37.         {
  38.                 delay1(50);
  39.                 if(P3_2!=1)
  40.                 {
  41.                         TMOD=0x01;
  42.                         TH0=(65536-50000)/256;
  43.                         TL0=(65536-50000)%256;
  44.                         ET0=1;
  45.                         TR0=1;
  46.                 }
  47.         }
  48.         sign=1;
  49. }

  50. void k2on() interrupt 2
  51. {
  52.         TR0=0;
  53.         sign=0;
  54. }

  55. void timer0() interrupt 1
  56. {
  57.         TH0=(65536-50000)/256;
  58.         TL0=(65536-50000)%256;
  59.         count++;
  60. }

  61. void main()
  62. {
  63.         P2_7=0;
  64.         P3_2=1;
  65.         P3_3=1;
  66.         P1=0x3f;
  67.         P2=0x3f;
  68.         EA=1;
  69.         EX0=1;
  70.         EX1=1;
  71.         TCON=0x05;
  72.         while(1)
  73.         {
  74.                
  75.                 count1=count/20;
  76.                 count1_h=count1/10;
  77.                 count1_l=count1%10;
  78.                 P2=count2[count1_h];
  79.                 P1=count2[count1_l];
  80.                 if(count1>=60)
  81.                 {
  82.                         clear();
  83.                 }
  84.         }
  85. }
复制代码


所有资料51hei提供下载:
实验四.zip (54.68 KB, 下载次数: 2)


评分

参与人数 1黑币 +10 收起 理由
wyhnb + 10

查看全部评分

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

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51hei电子论坛2群 联系QQ:125739409;技术交流QQ群219535678

Powered by 单片机教程网

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