⑴ 求单片机的主程序和子程序。
#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;
}
}