熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2024-5-2 17:59
正文摘要:雖然定時(shí)插座很便宜 但diy是一種樂(lè)趣 現(xiàn)在的手機(jī)都是快充 很快充滿 適合睡覺(jué)用 也適合電車用 最大可以設(shè)置12小時(shí)定時(shí) 5個(gè)LED燈組合顯示時(shí)間 如程序圖所示 帶記憶功能 為了減少不必要的刷寫 長(zhǎng)按按鍵 ... |
lkc8210 發(fā)表于 2024-8-26 11:35 else執(zhí)行一條與執(zhí)行多條的區(qū)別 就一條else(xxx;)毛病 |
ouco123 發(fā)表于 2024-8-25 10:30 正確寫法是else {nj_num=1;} |
ouco123 發(fā)表于 2024-8-25 10:30 這句和 nj_num++; if(nj_num>8)nj_num=1; 一樣 循環(huán)一周又從1開句 而不是從0開始 |
請(qǐng)問(wèn)樓主:這里代碼正確嗎? 紅筆標(biāo)記的。 |
zmc419 發(fā)表于 2024-5-18 18:57 晚上睡覺(jué)用的 太耀眼了不好 |
1860774xxxx 發(fā)表于 2024-5-3 15:55 四個(gè)燈用不同顏色更好 |
黑色蜂鳥 發(fā)表于 2024-5-3 14:22 可以啊 現(xiàn)在也是二進(jìn)制 有空間的話 有多的IO口 上12個(gè)也夠 自己喜歡貝 |
bd5fna 發(fā)表于 2024-5-3 13:49 哦 是哦 我都沒(méi)注意看 |
| 直接4個(gè)指示燈,按二進(jìn)制編碼 |
|
原理圖和程序?qū)Σ簧希存I和繼電器畫錯(cuò)了。 #include <STC8G.H> //此文件中定義了單片機(jī)的一些特殊功能寄存器 #include "STC8G_EEPROM.h" //STC8G內(nèi)部EEPROM驅(qū)動(dòng) sbit anjian1=P1^7; //按鍵引腳定義 sbit jidianqi=P1^0; //繼電器引腳定義 typedef unsigned char u8; //無(wú)符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u8 所占位數(shù)8位 范圍0~255 typedef unsigned int u16; //無(wú)符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱u16 所占位數(shù)16位 范圍0~65535 u8 fen,miao; //分 秒 變量 bit ajyxzz1,EP_num; //條件允許終止 用于每次操作只允許執(zhí)行一次 防止重復(fù)執(zhí)行 u16 weimiao; /*1T 12M晶振 延時(shí)函數(shù) Delay_ms(1)時(shí)大約1ms*/ void Delay_ms(u16 ms) { u8 i,j; while(ms--) { for(i=0; i<7; i++) for(j=0; j<99; j++); } } /*io端口配置*/ void STCIO_in() { P1M0 = 0x00; P1M1 = 0x00; //配置P1為準(zhǔn)雙向輸出輸入 P3M0 = 0x00; P3M1 = 0x00; //配置P3為準(zhǔn)雙向輸出輸入 //P5M0 = 0x00; //P5M1 = 0x00; //配置P5為準(zhǔn)雙向輸出輸入 } /*定時(shí)計(jì)數(shù)器配置*/ void Timer0_Init(void) //1毫秒@12.000MHz 16位自動(dòng)重裝 { AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式 TMOD &= 0xF0; //設(shè)置定時(shí)器模式 TL0 = 0x20; //設(shè)置定時(shí)初始值 TH0 = 0xD1; //設(shè)置定時(shí)初始值 TF0 = 0; //清除TF0標(biāo)志 //TR0 = 1; //定時(shí)器0開始計(jì)時(shí) ET0 = 1; //使能定時(shí)器0中斷 EA=1; //定時(shí)器總開關(guān) } /*主函數(shù)*/ void main() { u8 nj_num; //按鍵累計(jì)變量 u16 cn_num; //按鍵長(zhǎng)短按累計(jì)變量 u16 fne_num; //分鐘累計(jì)變量 STCIO_in(); //io端口初始化 jidianqi=1; //關(guān)閉繼電器 此時(shí)斷電 P3=0x00; //開機(jī)LED全撿 開 Delay_ms(1000); //延時(shí)約1秒 P3=0xff; //開機(jī)LED全撿 關(guān) Timer0_Init(); //定時(shí)計(jì)數(shù)器初始化 while(1) { if(anjian1==0)//判斷時(shí)加按鍵是否按下 { Delay_ms(5); //延時(shí)消抖 if(anjian1==0) //再次判斷時(shí)加按鍵是否按下 { ajyxzz1=0; //按鍵條件復(fù)位 等待下一次按鍵操作 cn_num++; //長(zhǎng)按累計(jì)器開始計(jì)數(shù) if(cn_num>1000) //長(zhǎng)按操作 約3秒 { P3=0xff; if(EP_num==0) //這里添加一個(gè)條件允許終止 不能它一直重復(fù)擦除寫數(shù)據(jù) { IapErase(0x0400); //擦除EEPROM IapProgram(0x0400, nj_num); //寫數(shù)據(jù)到EEPROM EP_num=1; //數(shù)據(jù)寫好了 馬上終止 防止程序循環(huán)重復(fù)執(zhí)行 } Delay_ms(200); } } } else { if(cn_num>0&&cn_num<500&&ajyxzz1==0) //短按操作 { if(nj_num==0) { nj_num = IapRead(0x0400); //讀EEPROM nj_num = nj_num-1; } if(nj_num<12)nj_num=nj_num+1; else(nj_num=1); miao=0; //清零秒 fen=0; //清零分 jidianqi=0; //啟動(dòng)繼電器 此時(shí)開始通電 TR0 = 1; //定時(shí)器開始計(jì)數(shù) ajyxzz1=1; //執(zhí)行完畢 條件終止 防止重復(fù)執(zhí)行 } cn_num=0; //按鍵長(zhǎng)短按累計(jì)變量復(fù)位 等待下一次執(zhí)行 EP_num=0; //EEPROM條件允許終止復(fù)位 等待下一次執(zhí)行 } if(nj_num>0) { switch(nj_num) //顯示LED燈與時(shí)長(zhǎng)選擇 { case 1:P3=0x7f;fne_num=60;break; //0111 1111 1小時(shí) case 2:P3=0xbf;fne_num=120;break; //1011 1111 2小時(shí) case 3:P3=0xdf;fne_num=180;break; //1101 1111 3小時(shí) case 4:P3=0xef;fne_num=240;break; //1110 1111 4小時(shí) case 5:P3=0xf7;fne_num=300;break; //1111 0111 5小時(shí) case 6:P3=0x77;fne_num=360;break; //0111 0111 6小時(shí) 5+1 case 7:P3=0xb7;fne_num=420;break; //1011 0111 7小時(shí) 5+2 case 8:P3=0xd7;fne_num=480;break; //1101 0111 8小時(shí) 5+3 case 9:P3=0xe7;fne_num=540;break; //1110 0111 9小時(shí) 5+4 case 10:P3=0x67;fne_num=600;break; //0110 0111 10小時(shí) 5+4+1 case 11:P3=0xa7;fne_num=660;break; //1010 0111 11小時(shí) 5+4+2 case 12:P3=0xc7;fne_num=720;break; //1100 0111 12小時(shí) 5+4+3 } if(fen==fne_num) //判斷時(shí)間是否到了 { TR0 = 0; //關(guān)閉定時(shí)器 P3 = 0xff; //關(guān)閉所有LED燈 jidianqi=1; //關(guān)閉繼電器 此時(shí)斷電 weimiao = 0; //毫秒清零 miao = 0; //清零秒 fen = 0; //清零分 nj_num = 0; //按鍵累計(jì)變量清零 } } } } /*定時(shí)器0*/ void Timer0_Isr(void) interrupt 1 { weimiao++; if(weimiao==1000) //1000毫秒=1秒 { miao++; //秒 weimiao=0; //毫秒清零 if(miao==60) //60秒=1分鐘 { fen++; //分 miao=0; //分清零 } } } |
| 昨晚用了一次 晚上LED有限刺眼 LED限流電阻已換成5K 這個(gè)可以跟據(jù)自己須求改動(dòng) |
Powered by 單片機(jī)教程網(wǎng)