欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
以ARDUINO為核心的微電腦時控開關程序和Proteus仿真(v1)
[打印本頁]
作者:
With_commands
時間:
2019-6-14 20:18
標題:
以ARDUINO為核心的微電腦時控開關程序和Proteus仿真(v1)
上一帖:
http://www.raoushi.com/bbs/dpj-162303-1.html
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(39.57 KB, 下載次數: 100)
下載附件
2019-6-14 22:53 上傳
0.png
(6.54 KB, 下載次數: 110)
下載附件
2019-6-14 22:54 上傳
單片機源程序如下:
#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <DS1302.h>
LiquidCrystal lcd(2,3,4,5,6,7); //LCD定義
DS1302 rtc(A3,A2,A1); //DS1302定義
typedef unsigned char uchar;
//數據存儲位置
#define switch_on_hour 0x00
#define switch_on_min 0x01
#define switch_off_hour 0x02
#define switch_off_min 0x03
//按鍵
#define t_set 8
#define io_set 9
#define up 10
#define down 11
uchar switch_on_hour_tmp,switch_on_min_tmp,
switch_off_hour_tmp,switch_off_min_tmp;Time t; //定義數據存儲位置臨時區
#define relay A0
//開/關字符
const uchar switch_on_char[]={
B01000,
B01100,
B01000,
B01000,
B01000,
B01000,
B01000,
B00000
};
const uchar switch_off_char[]={
B01000,
B01000,
B00100,
B00010,
B00000,
B01000,
B01000,
B00000
};
void timeset()
{
uchar hour_tmp,min_tmp,sec_tmp;
t=rtc.getTime();
hour_tmp=t.hour;
min_tmp=t.min;
sec_tmp=t.sec;
lcd.clear();
while(1){
lcd.setCursor(0,0);
lcd.print("Time Hour");
lcd.setCursor(0,1);
lcd.print(hour_tmp%100/10,DEC);
lcd.print(hour_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++hour_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--hour_tmp;
}
}
if(hour_tmp==255)hour_tmp=23;
if(hour_tmp==24)hour_tmp=0;
if(digitalRead(t_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(t_set)==0){
while(!digitalRead(t_set));
while(1){
lcd.setCursor(0,0);
lcd.print("Time Minute");
lcd.setCursor(0,1);
lcd.print(min_tmp%100/10,DEC);
lcd.print(min_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++min_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--min_tmp;
}
}
if(min_tmp==255)min_tmp=59;
if(min_tmp==60)min_tmp=0;
if(digitalRead(t_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(t_set)==0){
while(!digitalRead(t_set));
while(1){
lcd.setCursor(0,0);
lcd.print("Time Second");
lcd.setCursor(0,1);
lcd.print(sec_tmp%100/10,DEC);
lcd.print(sec_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++sec_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--sec_tmp;
}
}
if(sec_tmp==255)sec_tmp=59;
if(sec_tmp==60)sec_tmp=0;
if(digitalRead(t_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(t_set)==0){
while(!digitalRead(t_set));
rtc.setTime(hour_tmp,min_tmp,sec_tmp);
lcd.clear();
return;
}
}
}
}
}
}
}
}
}
}
void ioset()
{
onset();
offset();
}
void onset()
{
uchar hour_tmp,min_tmp;
hour_tmp=EEPROM.read(switch_on_hour);
min_tmp=EEPROM.read(switch_on_min);
lcd.clear();
while(1){
lcd.setCursor(0,0);
lcd.print("SwitchOn Hour");
lcd.setCursor(0,1);
lcd.print(hour_tmp%100/10,DEC);
lcd.print(hour_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++hour_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--hour_tmp;
}
}
if(hour_tmp==255)hour_tmp=23;
if(hour_tmp==24)hour_tmp=0;
if(digitalRead(io_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(io_set)==0){
while(!digitalRead(io_set));
while(1){
lcd.setCursor(0,0);
lcd.print("SwitchOn Minute");
lcd.setCursor(0,1);
lcd.print(min_tmp%100/10,DEC);
lcd.print(min_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++min_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--min_tmp;
}
}
if(min_tmp==255)min_tmp=59;
if(min_tmp==60)min_tmp=0;
if(digitalRead(io_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(io_set)==0){
while(!digitalRead(io_set));
EEPROM.write(switch_on_hour,hour_tmp);
EEPROM.write(switch_on_min,min_tmp);
lcd.clear();
return;
}
}
}
}
}
}
}
void offset()
{
uchar hour_tmp,min_tmp;
hour_tmp=EEPROM.read(switch_off_hour);
min_tmp=EEPROM.read(switch_off_min);
lcd.clear();
while(1){
lcd.setCursor(0,0);
lcd.print("SwitchOff Hour");
lcd.setCursor(0,1);
lcd.print(hour_tmp%100/10,DEC);
lcd.print(hour_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++hour_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--hour_tmp;
}
}
if(hour_tmp==255)hour_tmp=23;
if(hour_tmp==24)hour_tmp=0;
if(digitalRead(io_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(io_set)==0){
while(!digitalRead(io_set));
while(1){
lcd.setCursor(0,0);
lcd.print("SwitchOff Minute");
lcd.setCursor(0,1);
lcd.print(min_tmp%100/10,DEC);
lcd.print(min_tmp%10,DEC);
if(digitalRead(up)==0){
delayMicroseconds(10); //消抖
if(digitalRead(up)==0){
while(!digitalRead(up));
++min_tmp;
}
}
if(digitalRead(down)==0){
delayMicroseconds(10); //消抖
if(digitalRead(down)==0){
while(!digitalRead(down));
--min_tmp;
}
}
if(min_tmp==255)min_tmp=59;
if(min_tmp==60)min_tmp=0;
if(digitalRead(io_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(io_set)==0){
while(!digitalRead(io_set));
EEPROM.write(switch_off_hour,hour_tmp);
EEPROM.write(switch_off_min,min_tmp);
lcd.clear();
return;
}
}
}
}
}
}
}
void setup() //初始化并顯示字符
{
rtc.halt(false);
rtc.writeProtect(false);
lcd.begin(16,2);
lcd.createChar(0,switch_on_char);
lcd.createChar(1,switch_off_char);
pinMode(t_set,INPUT_PULLUP);
pinMode(io_set,INPUT_PULLUP);
pinMode(up,INPUT_PULLUP);
pinMode(down,INPUT_PULLUP);
pinMode(relay,OUTPUT);
digitalWrite(relay,HIGH);
lcd.setCursor(0,0);
lcd.print("The With");
lcd.setCursor(0,1);
lcd.print("Commands");
delay(2000);
lcd.clear();
lcd.print("Enjoy");
lcd.setCursor(0,1);
lcd.print("Program Life");
delay(2000);
lcd.clear();
}
void loop()
{
t=rtc.getTime();
lcd.setCursor(4,0);
lcd.print(rtc.getTimeStr());
switch_on_hour_tmp=EEPROM.read(switch_on_hour);
switch_on_min_tmp=EEPROM.read(switch_on_min);
switch_off_hour_tmp=EEPROM.read(switch_off_hour);
switch_off_min_tmp=EEPROM.read(switch_off_min);
lcd.setCursor(1,1);
lcd.write((uchar)0);
lcd.print(":");
lcd.print(switch_on_hour_tmp%100/10,DEC);
lcd.print(switch_on_hour_tmp%10,DEC);
lcd.print(":");
lcd.print(switch_on_min_tmp%100/10,DEC);
lcd.print(switch_on_min_tmp%10,DEC);
lcd.write((uchar)1);
lcd.print(":");
lcd.print(switch_off_hour_tmp%100/10,DEC);
lcd.print(switch_off_hour_tmp%10,DEC);
lcd.print(":");
lcd.print(switch_off_min_tmp%100/10,DEC);
lcd.print(switch_off_min_tmp%10,DEC);
if(digitalRead(t_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(t_set)==0){
while(!digitalRead(t_set));
timeset();
}
}
if(digitalRead(io_set)==0){
delayMicroseconds(10); //消抖
if(digitalRead(io_set)==0){
while(!digitalRead(io_set));
ioset();
}
}
if(t.hour==switch_on_hour_tmp){
if(t.min==switch_on_min_tmp){
digitalWrite(relay,LOW);
}
}
if(t.hour==switch_off_hour_tmp){
if(t.min==switch_off_min_tmp){
digitalWrite(relay,HIGH);
}
}
}
復制代碼
所有資料51hei提供下載:
TimeSwitch.zip
(64.44 KB, 下載次數: 28)
2019-6-14 20:18 上傳
點擊文件名下載附件
程序文件
下載積分: 黑幣 -5
作者:
With_commands
時間:
2019-6-15 15:03
視頻演示:
https://v.youku.com/v_show/id_XNDIyODg0MjE5Ng==.html?spm=a2hzp.8253876.0.0&f=52203768
作者:
xiaotian426
時間:
2020-2-20 16:46
"DS1302.h "從哪里能下載?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1