|
題主剛剛休學(xué)兩年回來讀大三,有點(diǎn)笨基礎(chǔ)也薄弱,學(xué)校布置了一個(gè)帶救護(hù)車的交通燈實(shí)驗(yàn),自己又剛剛學(xué)習(xí)了數(shù)組和計(jì)時(shí)器,想先至少把無中斷的信號(hào)燈制作出來,學(xué)校為了學(xué)生方便計(jì)算規(guī)定的晶振是6MHz,這里是我自己設(shè)想的交通燈代碼,采用的是C語(yǔ)言,想法是通過計(jì)時(shí)器(比較偷懶的)控制燈的切換,延時(shí)就直接用數(shù)組里后續(xù)時(shí)刻相同的亮燈代替了,但是程序做出來之后,導(dǎo)入進(jìn)proteus做仿真,燈居然是全亮的,令我想不明白。我認(rèn)為應(yīng)當(dāng)是我自學(xué)的時(shí)候遺漏了關(guān)鍵的51電路知識(shí),但又不知從何找起,還請(qǐng)各路大神幫我看看到底是我編程問題還是我畫的電路出了大毛病,謝過各位大神了!
單片機(jī)源程序如下:
#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;
}
}
}
}
}
簡(jiǎn)化后單獨(dú)的交通燈
|
|