交通灯C语言程序清单
交通灯控制c语言程序绝对正确

if(++Flash_Count!=6) return; //闪烁
Flash_Count=0;
Operation_Type=1;
break;
}
}
//主程序
void main()
{
TMOD=0x11; //T0方式1
EA=1;
ET0=1; //定时器0 中断允许位
TL1=0X00;
if(++count1==200) //10S(50MS*200=10000MS)
{
TR0=1;
count1=0;
}
}
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P1^5; //东西向指示灯
sbit YELLOW_A=P1^4;
sbit GREEN_A=P1^3;
sbit RED_B=P1^2; //南北向指示灯
if(++Time_Count!=20) return; // 1s(50*20=1000ms)
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_B=1;
RED_B=1;
if(++Flash_Count!=6) return; //闪烁次数
Flash_Count=0;
Operation_Type=3;
break;
case 3: //东西向红灯与南北向绿灯亮5s
RED_A=1;YELLOW_A=1;GREEN_A=0;
红绿灯C语言程序

红绿灯C语言程序(P0口接数码管,平口接发光二极管)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar i=0,c=0,s=1;//m_flag=1;////////////////////////////////////////void dxlv1_nbh1(void) //{P1=0x5a;}void dx0_nbh1(void) //{P1=0x0a;}void dxh1_nbl1(void) //{P1=0xa5;}void dxh1_nb0(void) //{P1=0xa0;}void nbs(void) // 南北灯闪{if(m_flag==1){dxh1_nb0();}else {dxh1_nbl1();}}void dxs(void){ // 东西灯闪if(m_flag==1){dx0_nbh1();}else {dxlv1_nbh1();}}//////主程序//////////////////void main(){TMOD=0x01;//定时器0工作在方式1TH0=-5000/256;//50msTL0=-5000%256;//20msIE=0x82;///允许定时器0中断TR0=1;///启动定时器0while(1){//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6fif(s==10){P0=0x3f;} // 东西绿灯亮,南北红灯亮倒计时开始if(s==9)P0=0x06;if(s==8)P0=0x5b;if(s==7)P0=0x4f;if(s==6)P0=0x66;if(s==5)P0=0x6d;if(s==4)P0=0x7d;if(s==3)P0=0x07;if(s==2)P0=0x7f;if(s==1){P0=0x6f;P1=0x5a;}if(s>9&&s<13){dxs();} //10秒结束南北红灯继续,东西绿灯一秒一闪闪三次if(s==13){dxh1_nbl1(); P0=0x6f; }//东西红灯亮,南北绿灯亮倒计时开始if(s==22){P0=0x3f;}if(s==21)P0=0x06;if(s==20)P0=0x5b;if(s==19)P0=0x4f;if(s==18)P0=0x66;if(s==17)P0=0x6d;if(s==16)P0=0x7d;if(s==15)P0=0x07;if(s==14)P0=0x7f;if(s>21&&s<25){nbs();} //10秒结束东西向红灯亮继续,南北绿灯一秒一闪三次if(s==25){s=1; }// s归位}}/////T0中断子程序////////////void T0_INT()interrupt 1{TH0=-50000/256;//50msTL0=-50000%256;if(c==10)m_flag=0;c++;if(c==20)//50ms*20=1s{m_flag=1;c=0;s++;//s清零}}。
用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。
采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。
下面介绍一种用单片机控制交通灯的方法。
一、硬件硬件电路如附图。
AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。
二、软件交通灯有红、黄、绿三种。
红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。
红灯亮60秒,绿灯亮55秒,黄灯亮5秒。
每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。
另外,为了简化电路,红、黄、绿灯采用低电平点亮。
源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
交通信号灯C语言源程序

disp_ew = set_value[1];
EW_LED_GREEN=1;
EW_LED_YELLOW =0;
sign[1]=1;
sign[0]=0;
}
if(disp_ew == 0 && sign[1] ==1)
{
disp_ew = set_value[2] + set_value[3];
disp_sn = set_value[2];
disp_ew = set_value[0];
P1 = 0xf3;
falsh_sign = 0;
ET1 = 1;
TR1 = 1;
}
}
void scan_key()
{
while(P3^0 && P3^2 && P3^3);
delay_ms(15);
if(!P3^0)
{
set_process();
}
if(!P3^2)
if(set_value[2] < 0)
{
set_value[2] = set_value[2] + 100;
}
disp_sn = set_value[2];
}
if(key == 4)
{
set_value[3]--;
if(set_value[3] < 0)
{
set_value[3] = 9;
}
disp_sn = set_value[3];
}
delay_ms(1200);
}
}ቤተ መጻሕፍቲ ባይዱ
else
{
while(!P3^3);
if(key == 1)
交通灯代码

void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main(void) //主函数
{
IP=0x01; //外中断0优先级定义为TR控制的方式1,16位定时器
TMOD=0x01; //定义T0为定时中断INT0为下降沿触发
dispbuf[1]=16;
dispbuf[6]=16;
dispbuf[7]=16;
}
}
}
void into(void)interrupt 0 using 1 //外中断0
{
delay10ms();
IE0=0;
flag3=1;
}
{
P1=0xdb;
P3_0=0;
P3_1=1;
P3_3=1;
P3_7=0;
}
}
}
void t0(void)interrupt 1 using 0 //定时/计数器0
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
P2=dispcode[dispbuf[count]]; //P2端口接动态数码管的字型码笔段
if(tempcount==60) //南北方向黄灯亮了5s后,南北方向红灯亮,东西方向绿灯亮
{
tempcount=0;
temp=29;
flag2=0;
if(flag3==0)
flag=1;
}
else if(flag3==0) //黄灯亮时,如果警车或急救车到来时显示时间否者不显示时间
51单片机用C语言实现交通灯_红绿灯_源程序

c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;
51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级: xxxxxxxxxxxxxx姓名: xx xx学号: xxxxxxxxxxx指导老师: xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。
交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。
本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。
关键词:交通灯 AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。
(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。
(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。
二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
简易交通灯c语言程序

uchar duanma[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码unchar weima [4]={0x01,0x02,0x04,0x08}; //位码unchar nanbei [3]={40,35,4}; //南北方向三组倒记时对应红,绿,黄灯unchar dongxi [3]={35,4,40}; //东西方向三组倒计时对应绿,黄,红灯unchar nbdeng [3]={0x01,0x04,0x02}; //南北方向三组灯的状态红绿黄unchar dxdeng [3]={0x8x,0x40,0x20} //东西方向三组灯的状态绿黄红unchar jishu1,jishu2,dxjishu,nbjishu,dxmiao,nbmiao,nbmiao; //定义变量unchar xianshi [4]={0,0,0,0}; //显示缓存器void yanshi10ms (void) //延时10ms函数{Unchar i,j;for (i=20;i>0;i--)for (j=250;j.0;j--);}Void chushihua (void) //初始化函数{TMOD=0x01; //定时器T0方式1THO=(65536-10000)/256 //10ms 定时高八位初值TLO=(65536-10000)%256; //10ms 定时低八位初值EA=1;ETO=1;EXO=1;ITO=1TRO=1;//CPU,T0,INTO允许中断,外部中断下降沿触发,启动定时器}void main(void) //主函数{dxmiao=dongxi [0] //东西倒计时赋初值nbmiao=nanbei [0] //南北倒计时赋初值chushihua (); //调试初始化函数while (1); //无限循环,踏步}Void anjian (void) interrupt 0 //外部中断 INTO 中断服务函数{yanshi10ms (); //延时去抖动if (INTO==0); //二次判断{If ((dxmiao<=50) && (nbmiao<=50)); //东西,南北当前显示值不大于50 {dxmiao+=10; //东西显示值+10nbmiao+=10 //南北显示着+10}//******************************************************************* }}void daojishi (void) interrupt 1 //定时器T0中断服务函数{THO=(65536-10000)/256; //高八位初值重装TLO=(65536-10000)/256; //低八位初值重装xiaoshi[0]=duanma [nbmiao/10]; //分离南北方向秒的十位xiaoshi[1]=duanma [nbmiao%10]; //分离南北方向秒的个位xiaoshi[2]=duanma [nbmiao/10]; //分离东西方向秒的十位xiaoshi[3]=duanma [nbmiao/10]; //分离东西方向秒的个位//**********************动态扫描*********************************** jishu1 ++; //指向扫描的下一位if (jishu1==4) jishu1=0; //完成四位扫描后计数归0P0=weima [jishu1]; //送位码P1=xiaoshi [jishu1]; //送段码//********************控制灯的状态********************************* P2=dxdeng [dxjishu] | nbdeng [nbjishu]; //送灯的状态码//东西方向状态和南北方向状态组合输出//********************产生1秒记时及处理程序*********************** jishu2++; //10ms 计数if (jishu2==100) //计够100次为1秒{jishu2=0; //计够1秒后,计数归0dxmiao --; nbmiao --; //东西,南北秒各减1,实现倒计时if (dxmiao==0xff) //东西方向是否减到0{dxjishu ++ ; //是,指东西方向交通灯的下一个状态if (dxjishu==3) dxjishu==0; //完成三个状态后再重新开始dxmiao=dongxi [dxjishu]; //送东西方向数码显示的初值}if (nanbei==0xff) //南北方向是否减到0}nbjishu++; //是,指向南北方向交通灯的下一个状态if (nbjishu==3) nbjishu=0; //完成三个状态后再重新开始nbmiao==nanbei[nbjishu]; //送南北方向数码显示的初值 }}}。
51单片机控制交通灯原理图及C语言程序

Proteus仿真原理图:Keil C源程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_DONGXI = P1^0;//南北方向红灯亮sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮sbit RED_NANBEI = P1^3;//东西方向红灯亮sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮sbit DXweixuan1 = P1^6;//南北方向数码管位选1sbit DXweixuan2 = P1^7;//南北方向数码管位选2sbit NBweixuan1 = P3^0;//东西方向数码管位选1sbit NBweixuan2 = P3^1;//东西方向数码管位选2sbit L1=P3^5;sbit L2=P3^6;sbit L3=P3^7;uint aa, bai,shi,ge,bb;uint shi1,ge1,shi2,ge2;uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};void delay(uint z);void init(uint a);void display(uint shi1,uint ge1,uint shi2,uint ge2);void xtimer0();void init1();void init2();void init3();void init4();void init5();void xint1();void xint0();void LED_ON();void LED_OFF();void main(){P0=0xFF;P1=0xFF;P2=0x00;P3=0xFF;EA=1;EX0=1;IT0=0;init1();while(1){init2();//第2个状态init3(); //第3个状态init4(); //第4个状态init5();//第5个状态}}void init1()//第一个状态:东西、南北方向均亮红灯5S {uint temp;temp=5;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0; //第一个状态东西、南北均亮红灯5SRED_NANBEI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;YELLOW_DONGXI=1;YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;}shi1=shi2=temp/10;ge1=ge2=temp%10;if(temp==0){temp=5;break;}display(ge1,shi1,ge2,shi2);}}void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=1;RED_NANBEI=0;GREEN_DONGXI=0;GREEN_NANBEI=1;YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;shi1=(temp+5)/10;ge1=(temp+5)%10;shi2=temp/10;ge2=temp%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=0;GREEN_DONGXI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;YELLOW_DONGXI=~YELLOW_DONGXI;shi1=temp/10;shi2=shi1;ge1=temp%10;ge2=ge1;}if(temp==0){temp=6;break;}display(ge1,shi1,ge2,shi2);}}void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0;RED_NANBEI=1;YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5SGREEN_NANBEI=0;if(aa==20){aa=0;temp--;shi1=temp/10;shi2=(temp+5)/10;ge1=temp%10;ge2=(temp+5)%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=1;RED_DONGXI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;if(aa==20){aa=0;temp--;YELLOW_NANBEI=~YELLOW_NANBEI;shi1=temp/10;shi2=shi2;ge1=temp%10;ge2=ge1;if(temp==0){temp=6;break;}}display(ge1,shi1,ge2,shi2);}}void display(uint shi1,uint ge1,uint shi2,uint ge2) {DXweixuan1=0;DXweixuan2=1;NBweixuan1=1;NBweixuan2=1;P0=table[ge1];delay(5);DXweixuan1=1;DXweixuan2=0;NBweixuan1=1;NBweixuan2=1;P0=table[shi1];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=0;NBweixuan2=1;P0=table[ge2];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=1;NBweixuan2=0;P0=table[shi2];delay(5);}void xint0() interrupt 0 {RED_NANBEI=0;RED_DONGXI=0;GREEN_NANBEI=1;GREEN_DONGXI=1;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xint1() interrupt 2 {RED_NANBEI=1;RED_DONGXI=1;GREEN_NANBEI=0;GREEN_DONGXI=0;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xtimer0() interrupt 1 {TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa++;}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++); }。
交通灯C语言程序交通灯C语言程序,AT89S52单片机控制,倒计时,红黄绿灯

交通灯//==================================//====交通灯C语言程序//====作者:2009的竹蜻蜓//====时间:2009-4-26//====E-MAIL:guangxian616@//==================================#include<reg52.h>#define uchar unsigned char#define time 50000#define ON 0#define OFF 1sbit NSB=P1^5; //南北绿灯sbit NSY=P1^4; //南北黄灯sbit NSR=P1^3; //南北红灯sbit EWB=P1^2; //东西绿灯sbit EWY=P1^1; //东西黄灯sbit EWR=P1^0; //东西红灯sbit P27=P2^7;sbit P26=P2^6;sbit P23=P2^3;sbit P22=P2^2;/*===============倒计时=========================*/ uchar N=15,Y=12,Z=15,M=27,G=30,U=30;uchar C50ms;uchar seg=1;void InitialT1(void){ET1=0;TMOD=0x10;TH1=(65536-time)>>8;TL1=(65536-time)&0xff;TR1=1;ET1=1;EA=1;}void ISRT1(void) interrupt 3{TR1=0;TH1=(65536-time)>>8;TL1=(65536-time)&0xff;TR1=1;C50ms++;if(C50ms>19){N--;M--;Y--;Z--;G--;U--;C50ms=0;}}/*=================延时=======================*/void Delay10uS(uchar second){int i;while((second--)!=0){for(i=0;i<3;i++){;}}}/*==================led控制========================*/uchar discode[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void display1(uchar num1,uchar num2){P0=discode[num1]; P22=ON; Delay10uS(1); P22=OFF; //控制南led显示P0=discode[num2]; P23=ON; Delay10uS(1); P23=OFF;}void display2(uchar num3,uchar num4){P0=discode[num3]; P26=ON; Delay10uS(1); P26=OFF; //控制东西led显示P0=discode[num4]; P27=ON; Delay10uS(1); P27=OFF;}main(){int i;// P0=0xff;/*=============初始状态:东西南北都红灯==================*/ NSR=ON;EWR=ON;for(i=0;i<800;i++){Delay10uS(20);}NSR=OFF;EWR=OFF;while(1){InitialT1(); // 初始化计时器/*=============状态1:东西绿灯(12s) 南北红灯(15s)==================*/ /*=============状态2:东西黄灯(3s) 南北红灯(15s)=================*/ EWB=ON;NSR=ON;while(N!=0){display1(N/10,N%10);// 南北红灯(15s)display2(Y/10,Y%10);// 东西绿灯(12s)while(N==3){while(Z!=0){display1(N/10,N%10);// 南北红灯(3s)display2(Z/10,Z%10);// 东西黄灯(3s)EWB=OFF;EWY=ON;}}}NSR=OFF;EWB=OFF;EWY=OFF;P0=0xff; //全关掉//Delay10uS(1);/*=============状态3:东西红灯(15s) 南北绿灯(12s)==================*/ /*=============状态4:东西红灯(15s) 南北黄灯(3s)==================*/ EWR=ON;NSB=ON;while(G!=0){display2(G/10,G%10);// 东西红灯(12s)display1(M/10,M%10);// 南北绿灯(12s)while(G==3){while(U!=0){display2(G/10,G%10);// 东西红灯(3s)display1(U/10,U%10);// 南北绿灯(3s)NSB=OFF;NSY=ON;}}}EWR=OFF;NSB=OFF;NSY=OFF;//P0=0xFF;//Delay10uS(1);/*=====================重新赋值===============================*/N=15,Y=12,Z=15,M=27,G=30,U=30;}}//欢迎访问我的百度空间:2009的竹蜻蜓更多精彩等着你!。
智能交通灯控制系统源程序(0918修改版)

智能交通灯控制系统源程序清单;------------------------------符号定义------------------------------DISPLAYNUM EQU 51HCOUNTER EQU 52HNSNORM EQU 53H ;南北正常EWNORM EQU 54H ;东西正常NSPEAK EQU 55H ;南北高峰EWPEAK EQU 56H ;东西高峰NSPUT EQU 57HEWPUT EQU 58HDIRECTION EQU 00H ;方向标志位, 为1南北通行, 0东西通行DISPLAYYELLOW EQU 01H;显示黄灯标志位, 1显示, 0不显示ONESECOND EQU 02H ;1秒?SETNEW EQU 03HLOADNEWFLAG EQU 04HNR EQU P0.2 ;南北方向红灯接P0.0???NY EQU P0.1NG EQU P0.0 ;南北方向绿灯接P0.2???ER EQU P0.5EY EQU P0.4EG EQU P0.3SOUND EQU P0.6 ;蜂鸣器BREAKRULE EQU P2.1 ;拨码开关PEAKorNORM EQU P2.2ALLSTOP EQU P2.3ALLGO EQU P2.4NSTHROUGH EQU P2.5EWTHROUGH EQU P2.6SELECTDIR EQU P2.7;-------------------------------主程序--------------------------------ORG 0000HLJMP MAINORG 0003H ;INT0(P3.2)中断入口地址LJMP RESETORG 000BH ;T0(P3.4)中断入口地址LJMP TIMEORG 001BH ; T1(P3.5)中断入口地址LJMP DOGORG 0100HMAIN: MOV NSNORM, #28HMOV EWNORM, #14HMOV NSPEAK, #1EHMOV EWPEAK, #0AHREMAIN: MOV COUNTER, #14H;?12M晶振应为14H SETB DIRECTION ;初始化, 南北通行CLR DISPLAYYELLOW ;初始化, 不显示黄灯CLR ONESECONDCLR SETNEWCLR SOUNDJNB PEAKorNORM, PEAKINPUTMOV NSPUT, NSNORMMOV EWPUT, EWNORMSJMP DISPLAYNUMPUTPEAKINPUT: MOV NSPUT, NSPEAKMOV EWPUT, EWPEAKDISPLAYNUMPUT: MOV DISPLAYNUM, NSPUT ;显示数DISPLAYNUM中放的;是南北方向值MOV SP, #5FHMOV TMOD, #11H ;定时器0和1均作为定时器, 工作在方式1LCALL FEEDDOGMOV TL0, #0B0H ;定时器0赋初值(50ms)MOV TH0, #3CHSTART: SETB EX0 ;INT0开中断SETB IT0 ;INT0中断触发方式为下降沿触发SETB TR0 ;启动定时器0SETB ET0 ;定时器0(T0)开中断SETB ET1 ;定时器1(T1)开中断SETB PX0 ;INT0为高优先级中断CLR PT0 ;定时器0为低优先级中断SETB PT1 ;定时器1为高优先级中断SETB EA ;开总中断LCALL LIGHT ;调交通灯显示子程序LCALL DISPLAYLED ;调LED显示子程序(倒计时);------------------------------重定时检测----------------------------------------LOOP:LCALL FEEDDOGJB SETNEW, REMAIN;------------------------------计时到1秒检测-------------------------------------JNB ONESECOND, ALLREDCLR ONESECONDDEC DISPLAYNUMMOV A, DISPLAYNUMCJNE A, #02H, EQ0SETB DISPLAYYELLOWLCALL LIGHTLJMP NUMDECLINEEQ0: CJNE A, #00H, NUMDECLINECLR DISPLAYYELLOWCPL DIRECTIONLCALL LIGHTLCALL RELOADNUMDECLINE: LCALL DISPLAYLED;------------------------------全部禁行------------------------------------------ ALLRED: JB ALLSTOP, NSCLEARCLR TR0SETB NRCLR NYCLR NGSETB ERCLR EYCLR EGALLREDW AIT: LCALL FEEDDOGJB ALLSTOP, ALLREDBACKSJMP ALLREDWAITALLREDBACK: SETB TR0LCALL LIGHT;------------------------------南北通行------------------------------------------ NSCLEAR: JB NSTHROUGH, EWCLEARCLR TR0CLR NRCLR NYSETB NGSETB ERCLR EYCLR EGNSCLEARW AIT: LCALL FEEDDOGJB NSTHROUGH, NSCLEARBACKSJMP NSCLEARW AITNSCLEARBACK: SETB TR0LCALL LIGHT;------------------------------东西通行------------------------------------------ EWCLEAR: JB EWTHROUGH, ALLYELLOWCLR TR0SETB NRCLR NYCLR NGCLR ERCLR EYSETB EGEWCLEARW AIT: LCALL FEEDDOGJB EWTHROUGH, EWCLEARBACKSJMP EWCLEARWAITEWCLEARBACK: SETB TR0LCALL LIGHTSJMP ALL YELLOW;------------------------------全部通行------------------------------------------ NEXT: LJMP CHECKRULEALL YELLOW: JB ALLGO, NEXTCLR TR0CLR NRSETB NYCLR NGCLR ERSETB EYCLR EGALL YELLOWWAIT: LCALL FEEDDOGJB ALLGO, ALL YELLOWBACKJB ALLSTOP, NSCSETB NRCLR NYCLR NGSETB ERCLR EYCLR EGWAITA: LCALL FEEDDOGJB ALLSTOP, BACKASJMP WAITABACKA: CLR NRSETB NYCLR NGCLR ERSETB EYCLR EGNSC: JB NSTHROUGH, EWCCLR NRCLR NYSETB NGSETB ERCLR EYCLR EGWAITN: LCALL FEEDDOGJB NSTHROUGH, BACKNSJMP WAITNBACKN: CLR NRSETB NYCLR NGCLR ERSETB EYCLR EGEWC: JB EWTHROUGH, ALLYELLOWW AITSETB NRCLR NYCLR NGCLR ERCLR EYSETB EGWAITE: LCALL FEEDDOGJB EWTHROUGH, BACKESJMP WAITEBACKE: CLR NRSETB NYCLR NGCLR ERSETB EYCLR EGLJMP ALL YELLOWWAITALL YELLOWBACK: SETB TR0LCALL LIGHT;-----------------------------警报检测------------------------------------------- CHECKRULE: JB BREAKRULE, CLEARSOUNDCPL SOUNDLJMP SETPEAKCLEARSOUND: CLR SOUND;-----------------------------高峰检测------------------------------------------- SETPEAK: JNB PEAKorNORM, LOADPEAKMOV NSPUT, NSNORMMOV EWPUT, EWNORMLJMP LOOPLOADPEAK: MOV NSPUT, NSPEAKMOV EWPUT, EWPEAKLJMP LOOP;----------------------------T0中断,用于定时------------------------------------- TIME: CLR EAPUSH AccPUSH PSWSETB EAMOV TL0, #0B0HMOV TH0, #3CHDJNZ COUNTER, TIMERETSETB ONESECONDMOV COUNTER, #14HTIMERET: CLR EAPOP PSWPOP AccSETB EARETI;----------------------------T1中断,用于看门狗----------------------------------- DOG: POP AccPOP AccCLR APUSH AccPUSH AccRETI;-------------------------------重设时间----------------------------------------- RESET: CLR ESCLR ET1CLR EX1CLR ET0CLR EX0PUSH AccPUSH PSWSETB LOADNEWFLAGCLR TR0CLR TR1MOV TMOD, #51H ;定时器1置于计数, 工作在方式1SETB TR1 ;启动定时器1SETB NRCLR NYCLR NGSETB ERCLR EYCLR EGBEGIN: MOV TL1, #00HMOV TH1, #00HOBSERVE: MOV DISPLAYNUM, TL1LCALL DISPLAYLEDRESETW AIT: JNB P3.4, TERMINATE ;P3.4=0, 则结束JNB P3.3, LOADNEW ;P3.3=0, 设定时间SETB LOADNEWFLAGJNB P3.5, OBSERVESJMP RESETW AIT ;P3.4/P3.3/P3.5都为1, 回到设置等待LOADNEW: JNB LOADNEWFLAG, RESETW AITJNB PEAKorNORM, PEAKSELECT ;PEAKorNORM=0, 高峰选择; PEAKorNORM=1, 正常选择JNB SELECTDIR, EWN ; SELECTDIR=0, 选择东西方向MOV NSNORM, TL1 ; SELECTDIR=1, 选择南北方向CLR LOADNEWFLAGLJMP BEGINEWN: MOV EWNORM, TL1 ;东西方向CLR LOADNEWFLAGLJMP BEGINPEAKSELECT: JNB SELECTDIR, EWP ;高峰选择MOV NSPEAK, TL1CLR LOADNEWFLAGLJMP BEGINEWP: MOV EWPEAK, TL1CLR LOADNEWFLAGLJMP BEGINTERMINATE: POP PSWPOP AccSETB ESSETB ET1SETB EX1SETB ET0SETB EX0SETB SETNEWRETI;----------------------------倒计时显示------------------------------------------????? DISPLAYLED:MOV A, DISPLAYNUMMOV B, #10DIV ABSW AP AADD A,BMOV R7, AANL A, #0F0HSW AP AMOVC A, @A+DPTRmov p1, aMOV P3, #10111111BCALL YDELAYMOV A, R7ANL A, #0FHMOV DPTR, #TABMOVC A, @A+DPTRmov p1, aMOV P3, #01111111BCALL YDELAYRETYDELAY: MOV R4, #50H ;延时YDELAY0: MOV R5, #50HDJNZ R5, $DJNZ R4, YDELAY0RETTAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H;----------------------------交通灯显示------------------------------------------LIGHT: JNB DIRECTION, EWLIGHT ;DIRECTION=0跳转EWLIGHT,东西通行;否则顺序执行,南北通行JNB DISPLAYYELLOW, SE01 ;DISPLAYYELLOW=0跳转,不显示黄灯; DISPLAYYELLOW=1,显示黄灯CLR NR ;南北只显示黄灯SETB NYCLR NGSETB ER ;东西只显示红灯CLR EYCLR EGLJMP LIGHTRET ;返回SE01: CLR NR ;南北只显示绿灯CLR NYSETB NGSETB ER ;东西只显示红灯CLR EYCLR EGLJMP LIGHTRETEWLIGHT: JNB DISPLAYYELLOW, SE02 ;东西通行SETB NRCLR NYCLR NGCLR ERSETB EYCLR EGLJMP LIGHTRETSE02: SETB NRCLR NYCLR NGCLR ERCLR EYSETB EGLIGHTRET:RET;-------------------------------重载倒计时缓存----------------------------------- RELOAD: JNB DIRECTION, SE03MOV DISPLAYNUM, NSPUTSJMP RELOADRETSE03: MOV DISPLAYNUM, EWPUTRELOADRET:RET;----------------------------------喂狗------------------------------------------ FEEDDOG: MOV TH1, #01BHMOV TL1, #0E0HSETB TR1LCALL DISPLAYLEDRET;-------------------------------------------------------------------------------- END。
基于Protues仿真的简单交通信号灯附C语言程序

简单的交通信号灯实现本文中主要利用89C52单片机实现一个简单的交通信号灯系统,代码编写借助keil软件编写,再结合protues软件进行仿真。
基本实现简单的交通信号等功能。
一.代码如下#include<reg52.h>/***************宏定义**********************/#define int8_t char#define uint8_t unsigned char#define int16_t int#define uint16_t unsigned int/**************变量申请*********************/int8_t times = 0;uint8_t g_timer0_1s = 0;uint8_t g_light_shark = 0;void Timer0_Init(){TMOD &= 0xF0; //单片机16位技术模式TMOD |= 0x01;TH0 = 0x00; //装入初值TL0 = 0x4c;TF0 = 0;EA = 1; //开总中断ET0 = 1; //允许定时器0中断}void Timer0(void) interrupt 1{TH0 = 0x00; //再次装入初值TL0 = 0x4c;times++;if(times == 20){times = 0;g_timer0_1s++;g_light_shark++;}}void delay_ms(uint8_t ms){uint16_t i;do{i = 11059200 / 14000;while(--i);}while(--ms);}void hxl_deal(uint8_t time) //横行左转处理{P2 = 0xA5;if(time < 15){P0 = 0x99;}else{if(g_light_shark % 2){P0 = 0xBD;}else{P0 = 0x99;}}}void hxz_deal(uint8_t time) //横行直行处理{P2 = 0xA5;if(time < 55){P0 = 0x66;}else{if(g_light_shark % 2){P0 = 0xE7;}else{P0 = 0x66;}}}void sxl_deal(uint8_t time) //竖行左转处理{P0 = 0xA5;if(time < 75){P2 = 0x99;}else{if(g_light_shark % 2){P2 = 0xBD;}else{P2 = 0x99;}}}void sxz_deal(uint8_t time) //竖行直行处理{P0 = 0xA5;if(time < 115){P2 = 0x66;}else{if(g_light_shark % 2){P2 = 0xE7;}{P2 = 0x66;}}}void Display(){P1 = 0x40;P3 = 0x06;delay_ms(50);P1 = 0x80;P3 = 0x4f;delay_ms(5);P1 = 0x00;}void main(){Timer0_Init();P0 = 0x00;P2 = 0x00;P3 = 0xff;delay_ms(1000);TR0 = 1; //开启定时器Display();while(1){if((g_timer0_1s >= 0) && (g_timer0_1s <= 20)){hxl_deal(g_timer0_1s);}else if((g_timer0_1s > 20) && (g_timer0_1s <= 60)){hxz_deal(g_timer0_1s);}else if((g_timer0_1s > 60) && (g_timer0_1s <= 80)){sxl_deal(g_timer0_1s);}else if((g_timer0_1s > 80) && (g_timer0_1s <= 120)){sxz_deal(g_timer0_1s);}{g_timer0_1s = 0;}}}二.仿真图如下1:系统未上电2:系统运行。
C51交通灯程序设计

C51期末课程设计大作业课程名称:交通灯程序设计学院:信息技术学院系别:计算机应用系专业:计算机应用技术班级: Z090X组序号:第二组组员X X学号 XXXXXXXX一、功能要求 (1)二、方案论证 (1)三、硬件解读 (2)四、流程图 (5)五、软件设计 (8)六、设计总结 (15)一、功能要求(一)设计所要完成的功能如下:1、信号灯受一个起动开关控制,当起动开关接通时,信号系统开始工作,且先南北红灯亮,东西绿灯亮。
当起动开关断开时,所有信号灯都熄灭。
2、南北红灯亮维持25S。
在南北红灯亮的同时东西绿灯也亮,并维持20S。
到20S时,东西绿灯闪烁,闪烁3S后熄灭。
在东西绿灯熄灭时,东西黄灯亮,并维持2S。
到2S时,东西黄灯熄,东西红灯亮。
同时,南北红灯熄灭,南北绿灯亮。
东西红灯亮维持30S。
南北绿灯亮维持25S。
然后闪烁3S,熄灭。
同时南北黄灯亮,维持2S后熄灭,这时南北红灯亮,东西绿灯亮3、要有倒计时数码显示。
(二)设计要求:1、功能要求2、方案论证3、系统硬件电路设计(给出键盘电路、LED显示电路)4、系统程序设计(要求给出流程图和程序清单)二、方案论证(一)方案的选择和论证根据题目要求,系统可以划分为几个基本模块:1、时钟模块2、时钟设置模块3、显示译码模块4、复位电路对各模块的实现,分别有以下一些不同的设计方案:(1) 标准时基模块方案一:采用直接从晶振分频得到12MHz信号。
该方案比较容易实现,但精确度不高,很难达到题目精确度的要求。
方案二:采用单片机C51经过延时程序产生12MHz时基信号。
在单片机程序设计中通过延时程序的循环产生所需要的12MHz的时基信号,该方案精确度比较高,而且也易于程序调整,电路结构简单,系统资源占用较小。
基于上述理论分析,拟订方案二。
(2)时钟控制模块方案一:采用单片机对键盘扫描和读取来控制不同时间值。
通过单片机对键盘的引脚不停的扫描,读入某时刻按下的键,通过单片机内部查表程序译出按键所对应的值从而使时间的值发生改变。
交通灯控制系统C程序代码

i=v%100/10; //暂存十位
P0=led_seg_code[i];
P2=0xfd;
delay(100); //延时
-----------
void timer1() interrupt 3 //T1中断
{ T1_cnt++;
EW_red=1 ;//东西方向红灯
break;
}
}
}
}
//-------------------------
main()
{//初始化各变量
cnt_sn=init_sn[0];
cnt_ew=init_ew[0];
T1_cnt=0;
state_val_sn=0; //启动后,默认工作在序号为1 的状态
if (state_val_ew>2) state_val_ew=0;
cnt_ew=init_ew[state_val_ew];
switch (state_val_ew) //根据状态值,刷新各信号灯的状态
{ case 0: EW_green=1 ;//东西方向绿灯
EW_yellow=1;//东西方向黄灯
//晶振:11.0592M T1-250微秒溢出一次
/*变量的定义:
show_val_sn,show_val_ew: 显示的值0-59
state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮
T1_cnt: 定时器计数溢出数
cnt_sn,cnt_ew: 倒计时的数值
init_sn[3],init_ew[3] 倒计时
基于51单片机的交通灯C语言程序

基于51单片机的交通灯C语言程序
/*南北:P1-0红,P1-1黄,P1-2绿,
东西:P1-4红,P1-5黄,P1-6绿,*/
#include"REG51.H"
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
TR0=1;
EA=1;ET0=1;
while (1)
{
if(time>24)
P1=0xeb; //P1--2=0,P1_4=0,南北绿东西红
else if(time>19)
{ //南北绿熄灭,南北黄闪烁
P1_2=1;
P1_1=~P1_1; }
//P1=0xed;
else if(time>4 )
P1=0xbe; //P1--0=0,P1_6=0,南北红东西绿
else
{
P1_6=1; //东西绿熄灭,东西黄闪烁
P1_5=~P1_5;
}
if(time>=25)
display((time-20)+(time-25)*100);
else if(time>=20)
display((time-20)*101);
else if(time>=5)
display(time*100+(time-5));
zt=zt/10;
a[1]=zt%10;
zt=zt/10;
a[0]=zt%10;
lie=0x01;
for ( i=0;i<4;i++)
{
P3=~lie;
P2=chr[a[i]];
基于单片机的交通灯设计c语言程序

基于单片机的交通灯设计c语言程序交通信号灯是城市交通中非常常见的设施之一,起到了引导和控制车辆、行人通行的重要作用。
基于单片机的交通信号灯设计是一个非常典型的实际应用案例,通过编写C语言程序,可以实现对交通信号灯状态的控制和调节。
首先,我们需要了解交通信号灯的基本原理和工作流程。
一般而言,交通信号灯包括红灯、黄灯和绿灯三种状态,分别对应停止、准备和通行的指示。
交通信号灯会按照一定的时间间隔,循环地在这三个状态之间切换,以控制车辆和行人的通行。
在基于单片机的交通信号灯设计中,我们可以借助定时器和IO口来实现状态的切换和指示灯的亮灭。
下面是一个简单的C语言程序示例:```c#include <reg52.h>sbit red = P1^0; //红灯控制引脚sbit yellow = P1^1; //黄灯控制引脚sbit green = P1^2; //绿灯控制引脚void delay(unsigned int xms) //延时函数{unsigned int i, j;for(i=xms; i>0; i--){for(j=110; j>0; j--);}}void main(){while(1){red = 1; //红灯亮yellow = 0; //黄灯灭green = 0; //绿灯灭delay(3000); //延时3秒red = 0; //红灯灭yellow = 1; //黄灯亮green = 0; //绿灯灭delay(2000); //延时2秒red = 0; //红灯灭yellow = 0; //黄灯灭green = 1; //绿灯亮delay(5000); //延时5秒}}```上述程序通过P1口的不同引脚控制红灯、黄灯和绿灯的亮灭。
通过循环的方式,定时器每隔一段时间就切换交通信号灯的状态,从而实现交通信号灯的正常工作。
这只是一个简单的交通信号灯设计示例,实际的交通信号灯设计还可能涉及到更多的状态和控制逻辑。
C++红绿灯程序报告最终版

1.整个程序由东西、南北两个灯面板,一个十字 路口车辆通过演示组成 2.通过画横线竖线来构成静态灯面板以及十字路 口 3.计算各重要点的坐标方便后面加入灯及文字
灯亮倒计时程序制作思路桂超
1.运用外围for循环控制两个路口灯亮总次数。 2.运用sleep函数与for循环结合,实现倒计时。 3.运用条件if语句实现灯的颜色填充变化。 4.灯的闪烁过程运用黑色与黄色交替覆盖实现。 5.运用字符数组存储数据,利用3目运算符"?:"判断 秒数与10的大小关系并实现秒数的输出。 6.运用sprintf函数将倒计时输出至界面。
设计人:黄开靓02015720 桂超02012727 刘佳诺02015730 刘雨农02015425
对一路口交通灯进行流程控制, 东西、南北两个方向与时间匹配。 并通过控制台显示两个方向当前 的灯及倒计时时间。
1.这个程序为循环程序,可以做好一个循环节之后 用for语句控制循环 2.程序可以分为静态背景和动态灯、动态演示三部 分 3.图像的绘制及显示需要用到EasyX库函数。倒计时 可用循环语句及延时函数实现
一次循环
东西 红12s 红3s 绿11s 黄3s
南北 绿12s 黄3s 红11s 红3s
静态背景
演示动画
黄开靓
坐标计算
刘佳诺
程序纠错
程序整合
倒计时程序
程序状态记录
桂超
灯变化
刘雨农
详细报告
#include <stdio.h> //控制标准输入输出函数 #include <graphics.h> //控制直线函数、画圆 函数、点函数、填充函数 #include <conio.h> //数据输入和数据输出 #include <string.h>//控制字符串处理函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* P2口位控口,P0口段控口, P1口按键,P3口发光二极管*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*共阳数码管字型码数组*/
/*0,1,2,3,4,5,6,7,8,9,P.,灭*/
char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x21,0xff};
/*共阳数码管位控码数组(从右往左点亮,反向驱动)*/
char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char find_code[8];
sbit S2=P1^0; //S1键启动交通灯控制器
sbit S3=P1^1; //S2键回归“P.”状态
sbit S4=P1^2; //S3键处理紧急状况
uchar time;
void DelayX1ms(uint count) //1ms延时函数
{
uint j;
while(count--!=0)
{
for(j=0;j<80;j++);
}
}
/*********************显示函数*****************************/
void disp()
{
char i;
char k;
for(i=0;i<8;i++)
{
P2=weikong_code[i];
k=find_code[i];
P0=dis_code[k];
DelayX1ms(1);
}
}
/********************1s延时********************************/
void delay1s()
{
TMOD=0X01;
EA=1;
ET0=1;
TH0=0x3C; //定时器定时50Ms
TL0=0XB0;
TR0=1;
PT0=1;
do{disp();} while(time!=20&&S3&&S4); //有条件转移
TR0=0;
time=0;
}
void time_() interrupt 1 //中断程序
{
time++;
TH0=0x3C;
TL0=0XB0;
}
/********************500ms函数********************************/ void delay500ms()
{ TMOD=0X01;
EA=1;
ET0=1;
TH0=0x3C;
TL0=0XB0;
TR0=1;
PT0=1;
do{disp();} while(time!=10); //有条件转移
TR0=0;
time=0;
}
/**************************紧急函数**************************/ void jinji()
{
uchar f;
for(f=10;f>0;f--)
{
P3=0x6F;
find_code[1]=f/10;
find_code[0]=f%10;
delay500ms();
delay500ms();
disp();
}
}
/**********************主函数******************************/ void main()
{
while(1)
{ char m,a; //上电显示“班级、学号”状态find_code[0]=9;
find_code[1]=1;
find_code[2]=10;
find_code[3]=4;
find_code[4]=0;
find_code[5]=0;
find_code[6]=1;
find_code[7]=11;
disp();
while(!S2)
{
while(S3)
{
P3=0XAF;
for(m=60;m>0&&(S3);m--)
{
if(!S4)
jinji();
find_code[1]=m/10;
find_code[0]=m%10;
delay1s();
disp();
}
for(a=3;a>0&&S3;a--)
{ if(!S4)
jinji();
find_code[1]=a/10;
find_code[0]=a%10;
P3=0xeF;
delay500ms();
P3=0xcF;
delay500ms();
disp();
}
P3=0X77;
for(m=30;m>0&&(S3);m--)
{
if(!S4)
jinji();
find_code[1]=m/10;
find_code[0]=m%10;
disp();
delay1s();
}
for(a=3;a>0&&S3;a--)
{ if(!S4)
jinji();
find_code[1]=a/10;
find_code[0]=a%10;
P3=0X7F;
delay500ms();
P3=0X7B;
delay500ms();
disp();
}
}
P3=0xFF;
}
}
}。