編程通過只是說明你的程序沒有語法錯誤,至於你的功能是什麼,能不能實現,編譯器是管不了的。編譯器所保證的就是正確的解釋你的代碼,把你的代碼解釋成單片機使用的機器碼,然後生成燒寫文件,至於你想要的功能卻達不到,那肯定是你的問題。
首先檢查硬體,驅動方式有沒有問題,電流夠不夠大,延時合不合理?如果硬體不確定的的話,試一試用軟體模擬,你是直接驅動IO口,功能還是很簡單的,keil的軟體模擬能夠隔開你的硬體,程序單步執行,看埠輸出能不能達到設計要求,如果能,還是硬體的問題;不能,那就找程序的錯誤。
2. 單片機Led燈不亮
看你的板子,P1^0引腳上並沒有LED燈,那8個LED燈應該在P0口上吧,把程序的定義改一下。
sbitD1=P0^0;
另外寫主程序,要加一行while(1); 見下圖,兩個畫紅圈處的改法。
最後補充一點,普中的實驗板,用的是STC單片機,去STC官網下載正宗的燒錄軟體:STC-ISP。別用普中的燒錄軟體,不可靠,經常不能正常燒錄程序。
3. 51單片機LED點陣屏有燈不亮怎麼辦
可進入調試模式,在執行22句後,檢查595數據,看看其輸出是不是 0xaa,在執行23句後,檢查P0口數據,看看是不是 0x7f;
4. 單片機led為啥一直亮著而不是閃爍
改一下程序就可以了。
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint a,b,c;
uchar led=0xfe;
void main()
{
a=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1=led;
while(1)
{
if(a==20)
{
led=~led;
led|=0xfe;
P1=led;
a=0;
}
}
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}