![]() |
發布時間: 2019-3-14 09:59
正文摘要:我做一個根據液體壓力值進行電機相應的實驗。 當壓力小于8MPa時電機啟動,啟動3秒后壓力沒有上升就報警。 當壓力大于12MPa時電機停止。 暫時用一個指示燈來模擬電機。用可調電阻模擬壓力輸入。 程序如下: #i ... |
從圖上可以看出,你p2.7是高電平,你這樣怎么能點亮二極管呢?應該是p2.7是低電平才對. 好好再想一想,重敲一下代碼! |
wtm_lxy 發表于 2019-3-15 08:47 1.《每計數500(延時多少?)就顯示一個數字 》由于顯示程序被主程序調用,主循環周期基本固定,所以每計數500延時多少不確定,這只是看你的程序做的估計,實際調試時以數碼管不閃爍為準。一般在500us~2ms之間為宜。 2.邏輯與:&&,邏輯或:||,按位與:&、按位或:|。 P2&=0xf0; //P2=P2&0xf0; xxxx 0000 P2|=0xf7; //P2=P2|0xf7; xxxx 0111 |
wulin 發表于 2019-3-14 17:12 非常感謝您的回復。 意思大概看懂了。 每計數500(延時多少?)就顯示一個數字 4個數字顯示完后,再循環。 順便請教一下: P2&=0xf0; //P2=P2&0xf0; 邏輯與,高4位不變,低4位清零 P2|=0xf7; //P2=P2|0xf7; 邏輯或,相加,高4為置1,第4位為7 后面這句還是用邏輯與吧?保持高四位不變,只修改低4位的值 |
zhb2004xp 發表于 2019-3-14 16:23 1、不好意思,這個沖突應該是沒有的了。我修改了單片機中的程序引用目錄,忘記更新對應關系了,所以修改了程序實際上沒有生效。 2、定時器我試試看,還需要更努力的學習。 非常感謝您的回復。 |
/******************顯示采集的電壓**********************************/ //不影響P2高4位狀態的寫法 void Display_Result(uint d) { static uint count=0; static uchar i=0; if(++count>=500)//不影響其他程序運行的計數延時 { 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; } } } |
本帖最后由 wtm_lxy 于 2019-3-14 15:44 編輯 wc86110 發表于 2019-3-14 11:04 我把位選改成這樣了:L1=0;L2=1;L3=1;L4=1; //P2=0xf7; 但是D2還是 不常亮,不知道為什么? |
程序上 P2 端口設置與 LED2 有沖突,位顯用 4 個就行 |