⑴ 求單片機的主程序和子程序。
#include"reg51.h"
unsignedintcnt=0;
//引腳自己改
sbitled__nb_g=p1^0;//南北綠色
sbitled__nb_r=p1^1;//南北紅色
sbitled__nb_y =p1^2;//南北黃色
sbitled__dx_g=p1^3;//東西綠色
sbitled__dx_r=p1^4;//東西紅色
sbitled__dx_y=p1^5;//東西黃色
voidmain()
{
TMOD=0x01;
TH0=(65536-10000)/256; //定時10ms//晶振:12MHZ
TL0=(65536-10000)%256;
ET0=1;
TR0=1;
EA=1;
led__nb_g=0;//南北綠色
led__nb_r=0;//南北紅色
led__nb_y =0;//南北黃色
led__dx_g=0;//東西綠色
led__dx_r=0;//東西紅色
led__dx_y=0;//東西黃色
while(1)
{
if(cnt<500){ led__dx_r=0;led__dx_y=0;led__dx_g=1;}//綠燈5
elseif(cnt<550){ led__dx_g=0;}//閃爍
elseif(cnt<600){ led__dx_g=1;}//閃爍
elseif(cnt<650){ led__dx_g=0;}//閃爍
elseif(cnt<700){ led__dx_g=1;}//閃爍2
elseif(cnt<800){ led__dx_g=0;led__dx_y=1;}//黃燈1
elseif(cnt<1400){ led__dx_y=0;led__dx_r=1;}//紅的6
elseif(cnt<1450){ led__dx_r=0;}//閃爍
elseif(cnt<1500){ led__dx_r=1;}//閃爍
elseif(cnt<1550){ led__dx_r=0;}//閃爍
elseif(cnt<1600){ led__dx_r=1;}//閃爍2
if(cnt<600){ led__nb_r=1;led__nb_y=0;led__nb_g=0;}//紅6
elseif(cnt<650){ led__nb_r=0;}//閃爍
elseif(cnt<700){ led__nb_r=1;}//閃爍
elseif(cnt<750){ led__nb_r=0;}//閃爍
elseif(cnt<800){ led__nb_r=1;}//閃爍
elseif(cnt<1400){ led__nb_r=0;led__nb_g=1;}//綠6s
elseif(cnt<1600){ led__nb_g=0;led__nb_r=1;}//黃2
}
}
voidTimer0_IRQ(void)interrupt1
{
TH0=(655365-100000)/256;//1M/10000=0.01s
TL0=(655365-100000)%256;
cnt++;//0.01s加一次cnt==100為1s
if(cnt>=1600)//整個過程是16s:5+2+1+6+2=16
{
cnt=0;
}
}