題主剛剛休學兩年回來讀大三,有點笨基礎也薄弱,學校布置了一個帶救護車的交通燈實驗,自己又剛剛學習了數組和計時器,想先至少把無中斷的信號燈制作出來,學校為了學生方便計算規定的晶振是6MHz,這里是我自己設想的交通燈代碼,采用的是C語言,想法是通過計時器(比較偷懶的)控制燈的切換,延時就直接用數組里后續時刻相同的亮燈代替了,但是程序做出來之后,導入進proteus做仿真,燈居然是全亮的,令我想不明白。我認為應當是我自學的時候遺漏了關鍵的51電路知識,但又不知從何找起,還請各路大神幫我看看到底是我編程問題還是我畫的電路出了大毛病,謝過各位大神了!
單片機源程序如下:
#include<reg52.h>
unsigned char code Ledchar[]={
0x81,0x81,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
0x01,0x01,0x41,0x41,0x01,0x01,0x41,0x41,0x01,0x01,0x41,0x41,0x01,0x01,0x41,0x41,
0x01,0x01,0x41,0x41,0x81,0x81,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
0x80,0x80,0x82,0x82,0x80,0x80,0x82,0x82,0x80,0x80,0x82,0x82,0x80,0x80,0x82,0x82,
0x80,0x80,0x82,0x82};
void mian()
{
unsigned char cnt = 0;
unsigned char sec = 0;
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0xB0;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
if(TF0 == 1)
{
TF0 = 0;
TH0 = 0x3C;
TL0 = 0xB0;
cnt++;P0 = Ledchar[sec];
if(cnt>=10)
{
cnt = 0;
sec++;
if(sec>=64)
{
sec = 0;
}
}
}
}
}
簡化后單獨的交通燈
|