熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2024-5-14 15:48
正文摘要:led燈點(diǎn)亮后,k1鍵按下,k2k3不按,延時(shí)10s后關(guān)閉led燈,但是超過了幾分鐘也沒有關(guān)閉,delay函數(shù)也用過兩個(gè)for循環(huán)寫也不起作用,有木有大佬看一下 單片機(jī)源程序如下: include <STC15.h> #include <intri ... |
qq475878026 發(fā)表于 2024-5-16 13:53 嗷嗷好的 沒開看門狗 那是要打開嗎 還有一個(gè)問題想請(qǐng)教一下 這個(gè)stc芯片之前燒兩次程序就燒不進(jìn)去了 好幾個(gè)都是這樣 后來?yè)Q了一個(gè)原裝的燒錄器 也只燒了十幾次就燒不進(jìn)去了 圖片我放到帖子里 |
Dokkis 發(fā)表于 2024-5-16 09:18 uint 在不同平臺(tái)上代表的數(shù)據(jù)長(zhǎng)度不一樣的,在STC15中uint最大就是65535,但是燈不滅可能還有其他原因,看下燒錄時(shí)硬件看門狗開了嗎 |
lkc8210 發(fā)表于 2024-5-14 17:32 嗷嗷是的,當(dāng)時(shí)沒理好邏輯,但是改了之后也還是不行 |
yzwzfyz 發(fā)表于 2024-5-14 20:07 嗯嗯好的,只有剛開始畫了個(gè)流程圖,以后會(huì)注意的 |
qq475878026 發(fā)表于 2024-5-15 18:21 k1是撥碼開關(guān),是一直按下的,是只有s1按下才會(huì)進(jìn)中斷,s1是總開關(guān),控制led亮滅的,k1只是用來延時(shí)的 |
本帖最后由 Dokkis 于 2024-5-16 10:56 編輯 xiaobendan001 發(fā)表于 2024-5-15 18:23 晶振設(shè)的是12,12004就是1s吧,uint我查了百度范圍不是0~4294967295嗎,我試過200的,k1鍵撥下,按s1它就是完全不亮了 #include <STC15.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit s1 = P3^3; sbit k1 = P3^2; sbit k2 = P3^1; sbit k3 = P3^0; sbit led = P3^5; bit seyFlag=0; void Delay1s(int t) { uint i; i=12004*t; while(1) { i--; if(seyFlag==1||i==0) {return;} } } void Int1_Routine(void) interrupt 2 { led = !led; seyFlag=1; } void main() { IT1 = 1; EX1 = 1; EA = 1; while(1) { if(seyFlag == 1) { seyFlag=0; if(led == 1) { if(k1==0&&k2==1&&k3==1) { Delay1s(10); led=0; } } } } } |
Dokkis 發(fā)表于 2024-5-15 17:43 咋改的,貼出來看看啊 還有你那12004是啥意思?一個(gè)uint最大65535,你這12004*10也溢出了。 驗(yàn)證有效性可以把時(shí)間弄短一些試試嘛。 |
沙發(fā)說的對(duì),而且要K1一直按才能進(jìn)入delay1s,不知道你開的是不是低電平中斷,是的話就一直進(jìn)中斷,LED就一直翻轉(zhuǎn) |
xiaobendan001 發(fā)表于 2024-5-14 18:51 按這樣改了,但是還是不滅 ![]() |
初學(xué)者常范的毛病是:直接寫程序! 記。合壤砬暹壿嬯P(guān)系!例如: 畫出邏輯流程,自己先走走,走退了再按程序程寫程序。 至少用個(gè)EXCEL表,列出個(gè)12345……,再按12345寫程序。 |
![]() 每次循環(huán)I都被重新賦值,然后再減一,永遠(yuǎn)都減不完啊,即使減到0了,也沒有任何動(dòng)作啊,只有等待seyFlag==1之后才能跳出循環(huán)。 把i=12004*t;挪到while前邊。然后在 if(seyFlag==1)的括弧里面增加||i==0再試試 |
你這Delay K1按下才跳出啊~
![]() |
Powered by 單片機(jī)教程網(wǎng)