久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3874|回復: 2
打印 上一主題 下一主題
收起左側

以ARDUINO為核心的微電腦時控開關程序和Proteus仿真(v1)

[復制鏈接]
跳轉到指定樓層
樓主
上一帖:
http://www.zg4o1577.cn/bbs/dpj-162303-1.html

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


單片機源程序如下:
  1. #include <EEPROM.h>
  2. #include <LiquidCrystal.h>
  3. #include <DS1302.h>
  4. LiquidCrystal lcd(2,3,4,5,6,7); //LCD定義
  5. DS1302 rtc(A3,A2,A1); //DS1302定義

  6. typedef unsigned char uchar;

  7. //數據存儲位置
  8. #define switch_on_hour 0x00
  9. #define switch_on_min 0x01
  10. #define switch_off_hour 0x02
  11. #define switch_off_min 0x03

  12. //按鍵
  13. #define t_set 8
  14. #define io_set 9
  15. #define up 10
  16. #define down 11

  17. uchar switch_on_hour_tmp,switch_on_min_tmp,
  18. switch_off_hour_tmp,switch_off_min_tmp;Time t;  //定義數據存儲位置臨時區

  19. #define relay A0

  20. //開/關字符
  21. const uchar switch_on_char[]={
  22.   B01000,
  23.   B01100,
  24.   B01000,
  25.   B01000,
  26.   B01000,
  27.   B01000,
  28.   B01000,
  29.   B00000
  30. };
  31. const uchar switch_off_char[]={
  32.   B01000,
  33.   B01000,
  34.   B00100,
  35.   B00010,
  36.   B00000,
  37.   B01000,
  38.   B01000,
  39.   B00000
  40. };

  41. void timeset()
  42. {
  43.   uchar hour_tmp,min_tmp,sec_tmp;
  44.   t=rtc.getTime();
  45.   hour_tmp=t.hour;
  46.   min_tmp=t.min;
  47.   sec_tmp=t.sec;
  48.   lcd.clear();
  49.   while(1){
  50.     lcd.setCursor(0,0);
  51.     lcd.print("Time Hour");
  52.     lcd.setCursor(0,1);
  53.     lcd.print(hour_tmp%100/10,DEC);
  54.     lcd.print(hour_tmp%10,DEC);
  55.     if(digitalRead(up)==0){
  56.       delayMicroseconds(10); //消抖
  57.       if(digitalRead(up)==0){
  58.         while(!digitalRead(up));
  59.         ++hour_tmp;
  60.       }
  61.     }
  62.     if(digitalRead(down)==0){
  63.       delayMicroseconds(10); //消抖
  64.       if(digitalRead(down)==0){
  65.         while(!digitalRead(down));
  66.         --hour_tmp;
  67.       }
  68.     }
  69.     if(hour_tmp==255)hour_tmp=23;
  70.     if(hour_tmp==24)hour_tmp=0;
  71.     if(digitalRead(t_set)==0){
  72.       delayMicroseconds(10); //消抖
  73.       if(digitalRead(t_set)==0){
  74.         while(!digitalRead(t_set));
  75.         while(1){
  76.           lcd.setCursor(0,0);
  77.           lcd.print("Time Minute");
  78.           lcd.setCursor(0,1);
  79.           lcd.print(min_tmp%100/10,DEC);
  80.           lcd.print(min_tmp%10,DEC);
  81.           if(digitalRead(up)==0){
  82.             delayMicroseconds(10); //消抖
  83.             if(digitalRead(up)==0){
  84.               while(!digitalRead(up));
  85.               ++min_tmp;
  86.             }
  87.           }
  88.           if(digitalRead(down)==0){
  89.             delayMicroseconds(10); //消抖
  90.             if(digitalRead(down)==0){
  91.               while(!digitalRead(down));
  92.               --min_tmp;
  93.             }
  94.           }
  95.           if(min_tmp==255)min_tmp=59;
  96.           if(min_tmp==60)min_tmp=0;
  97.           if(digitalRead(t_set)==0){
  98.             delayMicroseconds(10); //消抖
  99.             if(digitalRead(t_set)==0){
  100.               while(!digitalRead(t_set));
  101.               while(1){
  102.                 lcd.setCursor(0,0);
  103.                 lcd.print("Time Second");
  104.                 lcd.setCursor(0,1);
  105.                 lcd.print(sec_tmp%100/10,DEC);
  106.                 lcd.print(sec_tmp%10,DEC);
  107.                 if(digitalRead(up)==0){
  108.                   delayMicroseconds(10); //消抖
  109.                   if(digitalRead(up)==0){
  110.                     while(!digitalRead(up));
  111.                     ++sec_tmp;
  112.                   }
  113.                 }
  114.                 if(digitalRead(down)==0){
  115.                   delayMicroseconds(10); //消抖
  116.                   if(digitalRead(down)==0){
  117.                     while(!digitalRead(down));
  118.                     --sec_tmp;
  119.                   }
  120.                 }
  121.                 if(sec_tmp==255)sec_tmp=59;
  122.                 if(sec_tmp==60)sec_tmp=0;
  123.                 if(digitalRead(t_set)==0){
  124.                   delayMicroseconds(10); //消抖
  125.                   if(digitalRead(t_set)==0){
  126.                     while(!digitalRead(t_set));
  127.                     rtc.setTime(hour_tmp,min_tmp,sec_tmp);
  128.                     lcd.clear();
  129.                     return;
  130.                   }
  131.                 }
  132.               }
  133.             }
  134.           }
  135.         }
  136.       }
  137.     }
  138.   }
  139. }


  140. void ioset()
  141. {
  142.   onset();
  143.   offset();
  144. }
  145. void onset()
  146. {
  147.   uchar hour_tmp,min_tmp;
  148.   hour_tmp=EEPROM.read(switch_on_hour);
  149.   min_tmp=EEPROM.read(switch_on_min);
  150.   lcd.clear();
  151.   while(1){
  152.     lcd.setCursor(0,0);
  153.     lcd.print("SwitchOn Hour");
  154.     lcd.setCursor(0,1);
  155.     lcd.print(hour_tmp%100/10,DEC);
  156.     lcd.print(hour_tmp%10,DEC);
  157.     if(digitalRead(up)==0){
  158.       delayMicroseconds(10); //消抖
  159.       if(digitalRead(up)==0){
  160.         while(!digitalRead(up));
  161.         ++hour_tmp;
  162.       }
  163.     }
  164.     if(digitalRead(down)==0){
  165.       delayMicroseconds(10); //消抖
  166.       if(digitalRead(down)==0){
  167.         while(!digitalRead(down));
  168.         --hour_tmp;
  169.       }
  170.     }
  171.     if(hour_tmp==255)hour_tmp=23;
  172.     if(hour_tmp==24)hour_tmp=0;
  173.     if(digitalRead(io_set)==0){
  174.       delayMicroseconds(10); //消抖
  175.       if(digitalRead(io_set)==0){
  176.         while(!digitalRead(io_set));
  177.         while(1){
  178.           lcd.setCursor(0,0);
  179.           lcd.print("SwitchOn Minute");
  180.           lcd.setCursor(0,1);
  181.           lcd.print(min_tmp%100/10,DEC);
  182.           lcd.print(min_tmp%10,DEC);
  183.           if(digitalRead(up)==0){
  184.             delayMicroseconds(10); //消抖
  185.             if(digitalRead(up)==0){
  186.               while(!digitalRead(up));
  187.               ++min_tmp;
  188.             }
  189.           }
  190.           if(digitalRead(down)==0){
  191.             delayMicroseconds(10); //消抖
  192.             if(digitalRead(down)==0){
  193.               while(!digitalRead(down));
  194.               --min_tmp;
  195.             }
  196.           }
  197.           if(min_tmp==255)min_tmp=59;
  198.           if(min_tmp==60)min_tmp=0;
  199.           if(digitalRead(io_set)==0){
  200.             delayMicroseconds(10); //消抖
  201.             if(digitalRead(io_set)==0){
  202.               while(!digitalRead(io_set));
  203.               EEPROM.write(switch_on_hour,hour_tmp);
  204.               EEPROM.write(switch_on_min,min_tmp);
  205.               lcd.clear();
  206.               return;
  207.             }
  208.           }
  209.         }
  210.       }
  211.     }
  212.   }
  213. }
  214. void offset()
  215. {
  216.   uchar hour_tmp,min_tmp;
  217.   hour_tmp=EEPROM.read(switch_off_hour);
  218.   min_tmp=EEPROM.read(switch_off_min);
  219.   lcd.clear();
  220.   while(1){
  221.     lcd.setCursor(0,0);
  222.     lcd.print("SwitchOff Hour");
  223.     lcd.setCursor(0,1);
  224.     lcd.print(hour_tmp%100/10,DEC);
  225.     lcd.print(hour_tmp%10,DEC);
  226.     if(digitalRead(up)==0){
  227.       delayMicroseconds(10); //消抖
  228.       if(digitalRead(up)==0){
  229.         while(!digitalRead(up));
  230.         ++hour_tmp;
  231.       }
  232.     }
  233.     if(digitalRead(down)==0){
  234.       delayMicroseconds(10); //消抖
  235.       if(digitalRead(down)==0){
  236.         while(!digitalRead(down));
  237.         --hour_tmp;
  238.       }
  239.     }
  240.     if(hour_tmp==255)hour_tmp=23;
  241.     if(hour_tmp==24)hour_tmp=0;
  242.     if(digitalRead(io_set)==0){
  243.       delayMicroseconds(10); //消抖
  244.       if(digitalRead(io_set)==0){
  245.         while(!digitalRead(io_set));
  246.         while(1){
  247.           lcd.setCursor(0,0);
  248.           lcd.print("SwitchOff Minute");
  249.           lcd.setCursor(0,1);
  250.           lcd.print(min_tmp%100/10,DEC);
  251.           lcd.print(min_tmp%10,DEC);
  252.           if(digitalRead(up)==0){
  253.             delayMicroseconds(10); //消抖
  254.             if(digitalRead(up)==0){
  255.               while(!digitalRead(up));
  256.               ++min_tmp;
  257.             }
  258.           }
  259.           if(digitalRead(down)==0){
  260.             delayMicroseconds(10); //消抖
  261.             if(digitalRead(down)==0){
  262.               while(!digitalRead(down));
  263.               --min_tmp;
  264.             }
  265.           }
  266.           if(min_tmp==255)min_tmp=59;
  267.           if(min_tmp==60)min_tmp=0;
  268.           if(digitalRead(io_set)==0){
  269.             delayMicroseconds(10); //消抖
  270.             if(digitalRead(io_set)==0){
  271.               while(!digitalRead(io_set));
  272.               EEPROM.write(switch_off_hour,hour_tmp);
  273.               EEPROM.write(switch_off_min,min_tmp);
  274.               lcd.clear();
  275.               return;
  276.             }
  277.           }
  278.         }
  279.       }
  280.     }
  281.   }
  282. }

  283. void setup() //初始化并顯示字符
  284. {
  285.   rtc.halt(false);
  286.   rtc.writeProtect(false);
  287.   lcd.begin(16,2);
  288.   lcd.createChar(0,switch_on_char);
  289.   lcd.createChar(1,switch_off_char);
  290.   pinMode(t_set,INPUT_PULLUP);
  291.   pinMode(io_set,INPUT_PULLUP);
  292.   pinMode(up,INPUT_PULLUP);
  293.   pinMode(down,INPUT_PULLUP);
  294.   pinMode(relay,OUTPUT);
  295.   digitalWrite(relay,HIGH);
  296.   lcd.setCursor(0,0);
  297.   lcd.print("The With");
  298.   lcd.setCursor(0,1);
  299.   lcd.print("Commands");
  300.   delay(2000);
  301.   lcd.clear();
  302.   lcd.print("Enjoy");
  303.   lcd.setCursor(0,1);
  304.   lcd.print("Program Life");
  305.   delay(2000);
  306.   lcd.clear();
  307. }

  308. void loop()
  309. {
  310.   t=rtc.getTime();
  311.   lcd.setCursor(4,0);
  312.   lcd.print(rtc.getTimeStr());
  313.   switch_on_hour_tmp=EEPROM.read(switch_on_hour);
  314.   switch_on_min_tmp=EEPROM.read(switch_on_min);
  315.   switch_off_hour_tmp=EEPROM.read(switch_off_hour);
  316.   switch_off_min_tmp=EEPROM.read(switch_off_min);
  317.   lcd.setCursor(1,1);
  318.   lcd.write((uchar)0);
  319.   lcd.print(":");
  320.   lcd.print(switch_on_hour_tmp%100/10,DEC);
  321.   lcd.print(switch_on_hour_tmp%10,DEC);
  322.   lcd.print(":");
  323.   lcd.print(switch_on_min_tmp%100/10,DEC);
  324.   lcd.print(switch_on_min_tmp%10,DEC);
  325.   lcd.write((uchar)1);
  326.   lcd.print(":");
  327.   lcd.print(switch_off_hour_tmp%100/10,DEC);
  328.   lcd.print(switch_off_hour_tmp%10,DEC);
  329.   lcd.print(":");
  330.   lcd.print(switch_off_min_tmp%100/10,DEC);
  331.   lcd.print(switch_off_min_tmp%10,DEC);
  332.   if(digitalRead(t_set)==0){
  333.     delayMicroseconds(10); //消抖
  334.     if(digitalRead(t_set)==0){
  335.       while(!digitalRead(t_set));
  336.       timeset();
  337.     }
  338.   }
  339.   if(digitalRead(io_set)==0){
  340.     delayMicroseconds(10); //消抖
  341.     if(digitalRead(io_set)==0){
  342.       while(!digitalRead(io_set));
  343.       ioset();
  344.     }
  345.   }
  346.   if(t.hour==switch_on_hour_tmp){
  347.     if(t.min==switch_on_min_tmp){
  348.       digitalWrite(relay,LOW);
  349.     }
  350.   }
  351.   if(t.hour==switch_off_hour_tmp){
  352.     if(t.min==switch_off_min_tmp){
  353.       digitalWrite(relay,HIGH);
  354.     }
  355.   }
  356. }
復制代碼

所有資料51hei提供下載:
TimeSwitch.zip (64.44 KB, 下載次數: 28)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:218023 發表于 2019-6-15 15:03 | 只看該作者
回復

使用道具 舉報

板凳
ID:570410 發表于 2020-2-20 16:46 | 只看該作者
"DS1302.h "從哪里能下載?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人精品 | xxx.在线观看 | 中文精品一区二区 | 国产激情网 | 久久久久久免费毛片精品 | 三级高清 | 天天操网 | 一区二区亚洲 | 久久国产精品一区 | 精品欧美一区二区三区久久久 | 久久久久国产 | 亚洲日韩中文字幕一区 | www.亚洲成人网 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产精品久久99 | 亚洲人人 | 国产精品区二区三区日本 | 99re视频这里只有精品 | 日韩久久久久久 | 青青草中文字幕 | 天天草天天干 | 免费簧片视频 | 日韩高清中文字幕 | 91精品国产综合久久福利软件 | 91精品国产91久久久久久不卞 | 亚洲视频在线观看 | 欧美专区在线 | 中文字幕 在线观看 | 在线国产一区二区三区 | 美女爽到呻吟久久久久 | 91文字幕巨乱亚洲香蕉 | 亚洲视频在线看 | 成人伊人 | 91精品国产乱码久久久久久久 | av在线播放网址 | www.国产精| 91精品国产91久久久久久丝袜 | 国产高清一区二区三区 | 国产不卡在线观看 | 国产午夜精品理论片a大结局 | 中文字幕欧美日韩 |