![]() |
發布時間: 2024-9-13 17:55
正文摘要:仿制了ID95809大俠制做的STC15計數器,數碼管可以正常顯示,但是按按鍵無法計數沒有反應,要把程序里的K3按鍵程刪除才能正常計數,各位大俠們幫忙看下程序是哪里的問題單片機源程序如下: #include < ... |
wl20020807 發表于 2024-9-21 18:59 程序這樣改了可以正常計數了 |
wl20020807 發表于 2024-9-21 19:09 各位大師幫忙看下這個蜂鳴器程序怎么改下讓計數器只是每計滿100的整數時蜂鳴器響一次 ,加減計數都一樣。 |
while(1) { display(); keyscan(); delay_ms(10); if(Num>=100) { FMQ=0; } if(Num>=101) { FMQ=1; } } } |
void keyscan() { if(K1==0) { if(flag_KEY==1)//?????1? { flag_KEY=0; {if(Num==9999)Num=0;} { Num++; } } } else if(K2==0) { if(flag_KEY==1)//?????1? { flag_KEY=0; {if(Num==0)Num=9999;} { Num--; } } } else if(K3==0) { if(flag_KEY==1)//?????1? { flag_KEY=0; { Num=0; } } } else//???? { flag_KEY=1; } } |
xiaobendan001 發表于 2024-9-19 06:54 加了也一樣,還是一樣沒有反應 |
wl20020807 發表于 2024-9-18 22:45 給他加個上拉電阻怎樣? |
老董 發表于 2024-9-17 17:19 大師你的stc15芯片的晶振設置的多少?我設置的11.0592MHZ |
老董 發表于 2024-9-17 17:19 大師有電路圖嗎?我也是用的stc15w408as搭載的板子但是它就是無法運行 |
xiaobendan001 發表于 2024-9-18 07:44 對 ,加了k3這段程序,k2 (減健)就是低壓平了, |
wl20020807 發表于 2024-9-17 18:48 你的意思是加了這段代碼,K2就等于一直按著了? |
lkc8210 發表于 2024-9-17 15:03 只要加了K3這段程序,K1(加鍵)為高電平,K2(減鍵)為低電平,KI K2按鍵都沒有反應,把K3這段程序刪了,K1 K2 都為高電平了,K1 K2按鍵都正常可以計數,不知程序是那里出錯了 |
不信邪的我用搭載stc15的板子測試也可以運行啊 你再查查硬件吧 |
wl20020807 發表于 2024-9-17 13:24 你可以嘗試在main開始的地方加上一個num = 50;然后運行看看實際上顯示多少,如果是0,說明你的key3的部分代碼是有作用的。 |
wl20020807 發表于 2024-9-17 13:34 量一下K3的電壓 |
除了改代碼,實際電路也要改到相應的端口上。 |
君工創 發表于 2024-9-17 12:35 大師這個是原代碼我直接貼出來的,實際我改了IO口的,把K1改在P3^4 K3還是在原來的P3^2 FMQ改在P3^7,因為蜂鳴器沒有用就隨便改了個IO口 |
xiaobendan001 發表于 2024-9-17 10:46 原程序K1和K3定義在一個IO口了,我把K1改在另外的IO口把K3這段程序刪了加減按鍵計數都是正常的,把K3的這段程序加入就不正常了,加減按鍵都沒有反應K3還是定義在原來的p3^2 |
不好意思,沒詳細看。按鍵加和復位鍵不能共用。重新定義這兩個鍵的其中一個到其它端口就不用改代碼。 |
把第三個按鍵這里改一下, if(Num>9999); { Num=0; } |
君工創 發表于 2024-9-17 08:41 這個K3是復位按鍵則斷程序不知要怎么該了,大師麻煩指點一下! |
老董 發表于 2024-9-16 23:16 檢查了沒有漏電,現在把單片機的引腳懸空都是一樣的結果 |
君工創 發表于 2024-9-17 08:41 人家前邊有條件的。 不過實際上這個復位按鍵就是清零按鍵。這個if是多此一舉的,直接num = 0;就好了嘛。 不過就算有if(num>0)這個脫褲子放屁的舉動,也不影響結果,軟件仿真是對的。 如12樓所說倒是有可能,但是有個問題,樓主剛開始是把K1和K3定義在一個IO上面了,這樣這個說法似乎就不成立了。 |
if(Num>0);{Num=0;} 這里就是要Num永遠等于0。 |
else if(K3==0) { if(flag_KEY==1)//按鍵只響應1次 { flag_KEY=0; if(Num>0) { Num=0; } } } 你的程序沒問題 檢查一下硬件 是不是這個按鍵漏電了 程序一直認為你是按住了K3 這樣flag_KEY==1的機會就沒有了 你可以用萬用表測一下K3的電壓和K1 K2是不是一樣 就可以判斷出來 |
xiaobendan001 發表于 2024-9-15 14:35 大師程序需要改那里?麻煩指點一下! |
xiaobendan001 發表于 2024-9-15 14:35 不刪除的話按k1和k2計數按鍵沒反應,要把k3按鍵這段程序刪除按k1和k2計數按鍵才能正常計數,k3按鍵原程序是復位按鍵 |
老董 發表于 2024-9-15 20:09 他包含的是STC15,默認好像就標準IO的吧 |
P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P3口沒設置 設置一下試試 |
#在 P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; 這里快速回復# |
軟件模擬了一下,不用刪除,也好用啊,話說你這都沒有消斗,是不是和按鍵抖動有關? |
wpppmlah 發表于 2024-9-14 08:18 改了還是一樣,要把k3的那段程序刪了才能計數,不刪的話按鍵沒反應 |
wpppmlah 發表于 2024-9-14 08:18 就算一樣,也只是只執行KEY1的部分吧。 |
key1 和 key3 都定義成了P32,是不是這個原因呢? |
要將這段程序刪了才能正常計數,麻煩大俠們幫忙改下 else if(K3==0) { if(flag_KEY==1)//按鍵只響應1次 { flag_KEY=0; if(Num>0) { Num=0; } } } |