熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2022-11-9 21:04
正文摘要:啟動(dòng)條件,不自鎖開關(guān)1按下 燈1,2,3,4閃爍, 傳感器1,2,3,4觸發(fā),對(duì)應(yīng)燈1,2,3,4長(zhǎng)亮,未感應(yīng)到的繼續(xù)閃爍, 若4盞燈同時(shí)亮則結(jié)束程序等待下一次啟動(dòng)信號(hào) 在程序運(yùn)行過(guò)程中只要自鎖開關(guān)2按下程序全部停止, 自鎖 ... |
小菜苗 發(fā)表于 2022-11-11 12:06
|
小菜苗 發(fā)表于 2022-11-11 12:06 你把 if(Sensor2==0)Flash2 = 1; if(Sensor3==0)Flash3 = 1; if(Sensor4==0)Flash4 = 1; 一層一層套進(jìn)去不就好了嗎,只有1觸發(fā),燈1亮,1觸發(fā)的前提下,2再觸發(fā)燈2亮, |
lkc8210 發(fā)表于 2022-11-9 22:40 哈嘍,你可不可以幫我看一下,我的那個(gè)最后程序,現(xiàn)在傳感器2.3.4觸發(fā),燈234也會(huì)亮,我的設(shè)計(jì)初衷是只有1亮了,2才能亮,12亮了3才能亮,123亮了4才能亮,指導(dǎo)一下唄 |
#include<reg51.h> typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; sbit S1=P3^6; sbit S2=P3^7; sbit Sensor1 = P2^0; sbit Sensor2 = P2^1; sbit Sensor3 = P2^2; sbit Sensor4 = P2^3; sbit LED1=P1^0; sbit LED2=P1^1; sbit LED3=P1^2; sbit LED4=P1^3; void Delay1ms() { unsigned char i,j; i=2; j=239; do { while(--j); } while(--i); } void main(void) { u16 DelayCnt = 0; bit Flash1 = 0,Flash2 = 0, Flash3 = 0,Flash4 = 0, Start = 0; while(1) { if(S1==0) { Start = 1; Flash1 = 0; Flash2 = 0; Flash3 = 0; Flash4 = 0; } if(S2==0) { Start = 0; DelayCnt = 0; Flash1 = 0; Flash2 = 0; Flash3 = 0; Flash4 = 0; LED1=1; LED2=1; LED3=1; LED4=1; } if(Sensor1==0)Flash1 = 1; if(Sensor2==0)Flash2 = 1; if(Sensor3==0)Flash3 = 1; if(Sensor4==0)Flash4 = 1; if(Start) { if(DelayCnt++>=1000) { DelayCnt = 0; if(Flash1==0) LED1=!LED1; else LED1=0; if(Flash1==1) { DelayCnt = 0; if(Flash2==0) LED2=!LED2; else LED2=0; if(Flash2==1) { DelayCnt = 0; if(Flash3==0) LED3=!LED3; else LED3=0; if(Flash3==1) { DelayCnt = 0; if(Flash4==0) LED4=!LED4; else LED4=0; } } } } } Delay1ms(); } }感謝大佬們的不吝指導(dǎo),雖有艱難但也完成,感謝 ![]() |
小菜苗 發(fā)表于 2022-11-10 20:31 大佬是我自己搞錯(cuò)了定義的端口啦, |
lkc8210 發(fā)表于 2022-11-10 17:52 之前的代碼我感覺都不能實(shí)現(xiàn)功能 |
可以研究一下,謝謝樓主 |
Longan.Wang 發(fā)表于 2022-11-10 13:48 下面有要求更加全一些的,這是我自己想的,不是很全面,謝謝大哥提意見 |
Longan.Wang 發(fā)表于 2022-11-10 13:48 就是不曉得怎么去搞 |
這個(gè)方案可以使用定時(shí)器,在定時(shí)中斷程序里翻轉(zhuǎn)四根IO引腳產(chǎn)生四路閃爍信號(hào),使用外部中斷接收四個(gè)傳感器輸入信號(hào),在外部中斷程序里對(duì)相應(yīng)IO引腳是否翻轉(zhuǎn)置失能標(biāo)志,定時(shí)中斷程序里檢測(cè)到該標(biāo)志則停止翻轉(zhuǎn)相應(yīng)IO引腳,并置高電平。當(dāng)四個(gè)標(biāo)志都置位時(shí),停止定時(shí)器。當(dāng)再檢測(cè)到輸入信號(hào)時(shí),開啟定時(shí)器。 |
這個(gè)方案可以使用一個(gè)定時(shí)器根據(jù)指置時(shí)間間隔來(lái)翻轉(zhuǎn)四根引腳,產(chǎn)生四路閃爍信號(hào),使用四個(gè)外部中斷接入四個(gè)傳感器觸發(fā)信號(hào),在外部中斷程序里置對(duì)應(yīng)引腳停止翻轉(zhuǎn)標(biāo)志,定時(shí)中斷里根據(jù)停止翻轉(zhuǎn)標(biāo)志來(lái)停止翻轉(zhuǎn)引腳,并置相應(yīng)引腳高電平。當(dāng)四個(gè)停止翻轉(zhuǎn)標(biāo)志都置位時(shí),定時(shí)器停止運(yùn)行,再次檢測(cè)到啟動(dòng)信號(hào),再開啟定時(shí)器的運(yùn)行。 |
大漠落日 發(fā)表于 2022-11-10 12:20 對(duì)于你們大佬來(lái)說(shuō)簡(jiǎn)單,我們小白就難了呀,大佬能指導(dǎo)一下程序怎么改么 |
說(shuō)實(shí)話,你的需求都沒有表述清楚! 還有,你程序初始化部分都沒有。 |
這個(gè)一樣的,按照順序控制進(jìn)行,開關(guān)1觸發(fā)后,寫燈1標(biāo)志位,允許燈1進(jìn)入工作態(tài),用閃爍信號(hào)與傳感器觸發(fā)信號(hào)來(lái)控制燈1,燈1常亮標(biāo)志允許燈2進(jìn)入工作態(tài),依次類推,不是很難 |
lkc8210 發(fā)表于 2022-11-9 22:40 如果我是開關(guān)1按下,燈1閃爍,傳感器1觸發(fā)燈1常亮,燈1常亮以后燈2閃爍,傳感器2觸發(fā)燈2常亮,燈2常亮以后燈3閃爍,傳感器3觸發(fā)燈3常亮,燈3常亮以后燈4閃爍,傳感器4觸發(fā)燈4常亮。所有燈都常亮后停止運(yùn)行等待下一次啟動(dòng),開關(guān)2還是急停作用。這個(gè)應(yīng)該用什么方法去實(shí)現(xiàn)呢 |
這個(gè)方案應(yīng)該采用一個(gè)定時(shí)器產(chǎn)生閃爍信號(hào),按鍵由于只檢測(cè)觸發(fā),所以不用采用按鍵延時(shí)方法處理。檢測(cè)到按鍵后,產(chǎn)生一個(gè)標(biāo)志,再判斷標(biāo)志去檢測(cè)傳感器,傳感器信號(hào)置位一個(gè)標(biāo)志,該標(biāo)志與閃爍信號(hào)進(jìn)行位運(yùn)算產(chǎn)生最終位標(biāo)志,驅(qū)動(dòng)LED,當(dāng)四路傳感器標(biāo)志全為1時(shí),清除LED指示燈及傳感器標(biāo)志位,返回停止?fàn)顟B(tài) |
大佬們可不可以用if ... else if ...else if...來(lái)實(shí)現(xiàn)呀 |
小菜苗 發(fā)表于 2022-11-10 10:17 基于我的代碼加幾個(gè)中大括號(hào)就行了 自己想一下 |
Powered by 單片機(jī)教程網(wǎng)