找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于arduino+TM1637的计时器程序(包含倒计时、暂停功能)Proteus仿真

[复制链接]
跳转到指定楼层
楼主
基于arduino的计时器(包涵倒计时、暂停、重置),在proteus8中仿真通过。用了两组1673的时钟芯片。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


Arduino代码如下:

  1. #include <SevenSegmentTM1637.h>
  2. #include <SevenSegmentExtended.h>

  3. volatile int minute;
  4. volatile int second;
  5. volatile int order;
  6. volatile int full;
  7. volatile int empty;
  8. volatile int setvalue;
  9. volatile int topvalue;
  10. boolean  timerState=LOW;
  11. SevenSegmentExtended  display(8,9);

  12. void setup(){
  13. pinMode(2, INPUT);
  14.   minute = 0;
  15.   second = 0;
  16.   order = 0;
  17.   full = 0;
  18.   empty = 0;
  19.   setvalue = 5;
  20.   topvalue = 0;
  21.   display.begin();
  22.   order = 0;
  23.   // 倒计时时sencond与minute从full开始计时,顺计时从empty开始计时
  24.   if (order == 0) {
  25.     empty = 0;
  26.     full = 59;
  27.     minute = setvalue;
  28.     second = 0;
  29.     topvalue = 0;

  30.   } else {
  31.     empty = 59;
  32.     full = 0;
  33.     minute = 0;
  34.     // 设置为x分钟,加上秒钟走59,实际多走了一分钟,所以减一
  35.     topvalue = setvalue - 1;

  36.   }
  37.   attachInterrupt(digitalPinToInterrupt(2),interruptFun,LOW);
  38. }


  39. void loop(){
  40.   // 决定顺计时倒计时0为倒计时,1为顺计时
  41.   // 设置计时的最大数值
  42.   // 倒计时时topvalue=0时minute重置为setvalue
  43.   // 顺计时topvalue=setvalue值时被重置
  44.   // minute=0
  45. if(timerState)
  46. {
  47.   display.printTime(minute,second,true);
  48.   delayMicroseconds(1);
  49.   if (second == empty && minute == topvalue) {
  50.     if (order == 0) {
  51.       // 当minute达到设定的值则
  52.       minute = setvalue;
  53.       second = empty;

  54.     } else {
  55.       // 当minute达到设定的值则
  56.       minute = full;
  57.       second = full;

  58.     }

  59.   } else if (second == empty) {
  60.     if (order == 0) {
  61.       second = 59;
  62.       minute = minute - 1;

  63.     } else {
  64.       second = 0;
  65.       minute = minute + 1;

  66.     }
  67.   } else {
  68.     if (order == 0) {
  69.       second = second - 1;

  70.     } else {
  71.       second = second + 1;

  72.     }

  73.   }
  74. }
  75. }

  76. void interruptFun()
  77. {
  78. timerState=!timerState;
  79.     digitalWrite(5,timerState);
  80.     // Inside the attached function, delay() won't work and the value returned by millis() will not increment.
  81.   //  delay(5000);                          
  82.       
  83. }
复制代码

Proteus8.8版本的仿真图下载:
countDowntimer.zip (31.11 KB, 下载次数: 47)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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