![]() |
發(fā)布時間: 2019-3-14 09:59
正文摘要:我做一個根據(jù)液體壓力值進行電機相應的實驗。 當壓力小于8MPa時電機啟動,啟動3秒后壓力沒有上升就報警。 當壓力大于12MPa時電機停止。 暫時用一個指示燈來模擬電機。用可調(diào)電阻模擬壓力輸入。 程序如下: #i ... |
從圖上可以看出,你p2.7是高電平,你這樣怎么能點亮二極管呢?應該是p2.7是低電平才對. 好好再想一想,重敲一下代碼! |
wtm_lxy 發(fā)表于 2019-3-15 08:47 1.《每計數(shù)500(延時多少?)就顯示一個數(shù)字 》由于顯示程序被主程序調(diào)用,主循環(huán)周期基本固定,所以每計數(shù)500延時多少不確定,這只是看你的程序做的估計,實際調(diào)試時以數(shù)碼管不閃爍為準。一般在500us~2ms之間為宜。 2.邏輯與:&&,邏輯或:||,按位與:&、按位或:|。 P2&=0xf0; //P2=P2&0xf0; xxxx 0000 P2|=0xf7; //P2=P2|0xf7; xxxx 0111 |
wulin 發(fā)表于 2019-3-14 17:12 非常感謝您的回復。 意思大概看懂了。 每計數(shù)500(延時多少?)就顯示一個數(shù)字 4個數(shù)字顯示完后,再循環(huán)。 順便請教一下: P2&=0xf0; //P2=P2&0xf0; 邏輯與,高4位不變,低4位清零 P2|=0xf7; //P2=P2|0xf7; 邏輯或,相加,高4為置1,第4位為7 后面這句還是用邏輯與吧?保持高四位不變,只修改低4位的值 |
zhb2004xp 發(fā)表于 2019-3-14 16:23 1、不好意思,這個沖突應該是沒有的了。我修改了單片機中的程序引用目錄,忘記更新對應關系了,所以修改了程序?qū)嶋H上沒有生效。 2、定時器我試試看,還需要更努力的學習。 非常感謝您的回復。 |
/******************顯示采集的電壓**********************************/ //不影響P2高4位狀態(tài)的寫法 void Display_Result(uint d) { static uint count=0; static uchar i=0; if(++count>=500)//不影響其他程序運行的計數(shù)延時 { count=0; P0=0x00;//消隱 switch(i) { case 0: P2&=0xf0;P2|=0xf7;P0=DSY_CODE[d%10];i++; break; case 1: P2&=0xf0;P2|=0xfb;P0=DSY_CODE[d%100/10];i++; break; case 2: P2&=0xf0;P2|=0xfd;P0=DSY_CODE[d%1000/100]|0x80;i++; break; case 3: P2&=0xf0;P2|=0xfe;P0=DSY_CODE[d/1000];i=0; break; } } } |
1、你設置了兩個LED,分別是P17和P27,沖突時自己造成的,和數(shù)碼管的位選沒有關系,因為你的位選是單獨設置的L1\L2\L3\L4而不是直接對P2的操作,所以P2的其他幾個IO口是可以正常使用的; 2、使用定時器中斷是最好的選擇,主函數(shù)中設置定時器中斷(暫不啟動)--循環(huán)檢測到壓力小于8MPa時電機啟動,同時啟動定時器開始計時--計時達到3秒且壓力沒有上升,則報警并停止中斷(累加計時變量清零) 。這樣的程序最好自己先畫一個流程圖,然后按照流程圖進行程序的設計。 |
參與人數(shù) 1 | 黑幣 +50 | 收起 理由 |
---|---|---|
![]() | + 50 | 回帖助人的獎勵! |
本帖最后由 wtm_lxy 于 2019-3-14 15:44 編輯 wc86110 發(fā)表于 2019-3-14 11:04 我把位選改成這樣了:L1=0;L2=1;L3=1;L4=1; //P2=0xf7; 但是D2還是 不常亮,不知道為什么? |
程序上 P2 端口設置與 LED2 有沖突,位顯用 4 個就行 |
Powered by 單片機教程網(wǎng)