宿州学院本科生毕业设计 基于单片机AT89C51的交通灯控制器的设计
{
uchar i;
while(ms--) {
{}
for(i=0;i<200;i++)
}
}
/*中断0处理程序*/
void int0(void) interrupt 0 {
EA=0;/*CPU禁止响应一切中断*/
P1=0xF6,P0=duanma[0];/*东西南北方向均红灯亮,P0口输出0*/
{
P2=weima[0],P0=duanma[(SN_G+Y)];/*南北方向数码管显示可通行 while(1)/*无条件循环*/
时间的个位*/
delayms(10); /*延时*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向数码管显示可通行 delayms(10); /*延时*/
时间的十位*/
P2=weima[2],P0=duanma[(WE_G+Y)];/*东西方向数码管显示可通行时间的个位*/
delayms(10); /*延时*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];/*东西方向数码管显示可通行时间的十位*/
/*设置南北方向通行时间*/ if(K0==0) /*P3^7=0*/ {
delayms(10); /*延时*/
17
宿州学院本科生毕业设计 基于单片机AT89C51的交通灯控制器的设计
delayms(20);/*延时,把抖动的时间抛掉*/ if(K0==0) */
{ }
SN_G++;/*南北方向绿灯时间+1*/
if(SN_G==100)
SN_G=0;/*由于使用的是两位数码管,当南北方向绿灯时间加到100后清零*/ }
}
/*设置东西方向通行时间*/ if(K1==0) /*P3^6=0*/ {
{
while(K0==0)/*当松开K0开关时,跳出空循环,执行后面的程序
delayms(20);/*延时,把抖动的时间抛掉*/ if(K1==0)
{
while(K1==0)/*当松开K1开关时,跳出空循环,执行后面的程序*/
{ }
WE_G++;/*东西方向绿灯时间+1*/
if(WE_G==100)
WE_G=0;/*由于使用的是两位数码管,当东西方向绿灯时间加到100后清零*/ }
} /*返回*/
if(K3==0) /*P3^5=0*/
delayms(20);/*延时,把抖动的时间抛掉*/
if(K3==0) {
{
18
宿州学院本科生毕业设计 基于单片机AT89C51的交通灯控制器的设计
while(K3==0)/*当松开K3开关时,跳出空循环,执行后面的程
{ }
count=0;/*清零*/
k=0;/*南北方向通车,东西方向不通车*/
SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行
序*/
时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/ light();/*调用交通灯函数*/
led(); /*调用数码管函数*/ EA=1; /*CPU开放总中断*/
break;/*跳出*/
}
} } }
/*中断1处理程序*/ {
P1=0xF6,P0=duanma[0];/*东西南北方向均红灯亮,P0口输出0*/ TR0=!TR0;/*计数器停止工作*/ {/*数码管扫描程序,*/
P2=weima[0];/*显示南北方向个位*/ delayms(10);/*延时*/ delayms(10);/*延时*/
P2=weima[2];/*显示东西方向个位*/ delayms(10);/*延时*/
P2=weima[3];/*显示东西方向十位*/ delayms(10);/*延时*/ /*返回*/
EA=0;/*CPU禁止响应一切中断*/ while(1)/*无条件循环*/
void int1(void) interrupt 2
P2=weima[1];/*显示南北方向十位*/
if(K3==0) /*P3^5=0*/ {
19
宿州学院本科生毕业设计 基于单片机AT89C51的交通灯控制器的设计
delayms(20);/*延时,把抖动的时间抛掉*/
if(K3==0) {
while(K3==0)/*当松开K3开关时,跳出空循环,执行后面的程序*/
{ }
TR0=!TR0;/*启动计数器*/
EA=1;/*CPU开放总中断*/
break;/*跳出*/
}
} } }
/*键盘程序*/ void key() {
/*南北有车而东西无车*/ if(K0==0) /*K0=0*/ {
delayms(20);/*延时,把抖动的时间抛掉*/ if(K0==0) {
while(K0==0)/*当松开K0开关时,跳出循环,执行后面的程序*/ {
light();/*调用交通灯函数*/
led(); /*调用数码管函数*/
}
count=0;/*清零*/
k=0;/*南北方向通车,东西方向不通车*/
SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/ light();/*调用交通灯函数*/
led(); /*调用数码管函数*/
} }
20
宿州学院本科生毕业设计 基于单片机AT89C51的交通灯控制器的设计
/*南北无车而东西有车*/ if(K1==0) /*K1=0*/ {
delayms(20);/*延时,把抖动的时间抛掉*/ if(K1==0) {
while(K1==0)/*当松开K1开关时,跳出循环,执行后面的程序*/ {
light();/*调用交通灯函数*/
led(); /*调用数码管函数*/
}
count=0;/*清零*/
k=1;/*南北方向不通车,东西方向通车*/
SN=WE_G+Y,WE=WE_G;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/ light();/*调用交通灯函数*/ }
/*定时函数*/
void time1(void) interrupt 1 {
TH0=0x3c;
TL0=0xb0;/*计50000个数,用时50ms*/ count++; /*自增运算*/
if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/ {
SN--;/*自减运算*/ WE--;/*自减运算*/ count=0;/*清零*/
if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/ { }
led(); /*调用数码管函数*/ }
k++;/*自增运算*/
if(k>3)/*当k>3时,执行程序*/
21