![]() |
發(fā)布時間: 2024-5-14 15:48
正文摘要:led燈點亮后,k1鍵按下,k2k3不按,延時10s后關閉led燈,但是超過了幾分鐘也沒有關閉,delay函數(shù)也用過兩個for循環(huán)寫也不起作用,有木有大佬看一下 單片機源程序如下: include <STC15.h> #include <intri ... |
qq475878026 發(fā)表于 2024-5-16 13:53 嗷嗷好的 沒開看門狗 那是要打開嗎 還有一個問題想請教一下 這個stc芯片之前燒兩次程序就燒不進去了 好幾個都是這樣 后來換了一個原裝的燒錄器 也只燒了十幾次就燒不進去了 圖片我放到帖子里 |
Dokkis 發(fā)表于 2024-5-16 09:18 uint 在不同平臺上代表的數(shù)據(jù)長度不一樣的,在STC15中uint最大就是65535,但是燈不滅可能還有其他原因,看下燒錄時硬件看門狗開了嗎 |
lkc8210 發(fā)表于 2024-5-14 17:32 嗷嗷是的,當時沒理好邏輯,但是改了之后也還是不行 |
yzwzfyz 發(fā)表于 2024-5-14 20:07 嗯嗯好的,只有剛開始畫了個流程圖,以后會注意的 |
qq475878026 發(fā)表于 2024-5-15 18:21 k1是撥碼開關,是一直按下的,是只有s1按下才會進中斷,s1是總開關,控制led亮滅的,k1只是用來延時的 |
本帖最后由 Dokkis 于 2024-5-16 10:56 編輯 xiaobendan001 發(fā)表于 2024-5-15 18:23 晶振設的是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是啥意思?一個uint最大65535,你這12004*10也溢出了。 驗證有效性可以把時間弄短一些試試嘛。 |
沙發(fā)說的對,而且要K1一直按才能進入delay1s,不知道你開的是不是低電平中斷,是的話就一直進中斷,LED就一直翻轉(zhuǎn) |
xiaobendan001 發(fā)表于 2024-5-14 18:51 按這樣改了,但是還是不滅 ![]() |
初學者常范的毛病是:直接寫程序! 記。合壤砬暹壿嬯P系!例如: 畫出邏輯流程,自己先走走,走退了再按程序程寫程序。 至少用個EXCEL表,列出個12345……,再按12345寫程序。 |
![]() 每次循環(huán)I都被重新賦值,然后再減一,永遠都減不完啊,即使減到0了,也沒有任何動作啊,只有等待seyFlag==1之后才能跳出循環(huán)。 把i=12004*t;挪到while前邊。然后在 if(seyFlag==1)的括弧里面增加||i==0再試試 |
你這Delay K1按下才跳出啊~
![]() |
Powered by 單片機教程網(wǎng)