现在的 情况是灯不亮 数码管只是闪烁 数码管是共阳极的
技术指标
1、红灯亮15S 2、绿灯亮15S 3、黄灯亮5S并闪烁 4、绿灯变红灯有黄灯过度 5、红灯可直接变绿灯
#include<reg51.h>//
头文件 #include<intrins.h>//
头文件 #define uchar unsigned char//
宏定义#define uint unsigned int//
宏定义 sbit RED_ZHU = P1^0; sbit YELLOW_ZHU = P1^1; sbit GREEN_ZHU = P1^2; sbit RED_ZHI = P1^3; sbit YELLOW_ZHI = P1^4; sbit GREEN_ZHI = P1^5; uintaa, bai,shi,ge,bb; /*
数码管显示0-9*/ uintcode table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*
子函数声明*/ void delay0(uint z);void init1();void init2();void init3();void init4();void init5();void display(uint shi,uint ge); void main() { init1();//
第一个状态 while(1) { init2();//
第二个状态 init3();//
第三个状态 init4();//
第四个状态 init5();//
第五个状态 } } //
第一个状态:主干道、支干道均亮红灯5Svoid init1() { int temp; temp=6;//
变量赋初值TMOD=0x01;//
定时器T0
工作于方式1TH0=0x4c;TL0=0x00;//
定时器赋初值 EA=1;//
开中断ET0=1;//
开定时中断 TR0=1;//
开定时器T0while(1) { RED_ZHU=0; RED_ZHI=0; GREEN_ZHU=1; GREEN_ZHI=1; YELLOW_ZHU=1;YELLOW_ZHI=1; if(aa==20)//
定时20*50MS=1S { aa=0;//
定时完成一次后清0 temp--;//
变量自减 if(temp<0) { break; } shi=temp/10;//
显示十位 ge=temp%10;//
显示个位 }display (shi,ge); } } //
第二个状态:主干道亮绿灯27S
、支干道亮红灯 void init2() { inttemp; temp=31;//
变量赋初值 TMOD=0x01;//
定时器T0
工作于方式1 TH0=0x4c; TL0=0x00;//
定时器赋初值 EA=1;//
开中断 ET0=1;//
开定时中断 TR0=1;//
开定时器T0 while(1) { RED_ZHU=1; RED_ZHI=0; GREEN_ZHU=0; GREEN_ZHI=1; YELLOW_ZHU=1; YELLOW_ZHI=1; if(aa==20)//
定时20*50MS=1S { aa=0;//
定时完成一次后清0 temp--;//
变量自减 if(temp==3) { break; } shi=temp/10;//
显示十位 ge=temp%10;//
显示个位 } display(shi,ge); }} void init3()//
第三个状态:主干道黄灯闪烁、支干道红灯闪烁 { int temp; temp=4;//
变量赋初值 TMOD=0x01;//
定时器T0
工作于方式1 TH0=0x4c; TL0=0x00;//
定时器赋初值 EA=1;//
开中断 ET0=1;//
开定时中断 TR0=1;//
开定时器T0 while(1) { GREEN_ZHU=1; if(aa==20)//
定时20*50MS=1S { aa=0;//
定时完成一次后清0 temp--;//
变量自减 YELLOW_ZHU=~YELLOW_ZHU; RED_ZHI=~RED_ZHI; if(temp<0) { break; } shi=temp/10;//
显示十位 ge=temp%10;//
显示个位 } display(shi,ge); } } void init4()//
第四个状态:主干道亮红灯、支干道亮绿灯22S { inttemp; temp=26;//
变量赋初值 TMOD=0x01;//
定时器T0
工作于方式1 TH0=0x4c; TL0=0x00;//
定时器赋初值 EA=1;//
开中断 ET0=1;//
开定时中断 TR0=1;//
开定时器T0 while(1) { RED_ZHU=0; RED_ZHI=1; YELLOW_ZHU=1; GREEN_ZHI=0; if(aa==20)//
定时20*50MS=1S { aa=0;//
定时完成一次后清0 temp--;//
变量自减 if(temp==3) { break; } shi=temp/10;//
显示十位 ge=temp%10;//
显示个位 } display(shi,ge); } } void init5()//
第五个状态:主干道红灯闪烁、支干道黄灯闪烁 { inttemp; temp=4;//
变量赋初值 TMOD=0x01;//
定时器T0
工作于方式1 TH0=0x4c; TL0=0x00;//
定时器赋初值 EA=1;//
开中断 ET0=1;//
开定时中断 TR0=1;//
开定时器T0 while(1) { RED_ZHI=1; GREEN_ZHU=1; GREEN_ZHI=1; if(aa==20)//
定时20*50MS=1S { aa=0;//
定时完成一次后清0 temp--;//
变量自减 YELLOW_ZHI=~YELLOW_ZHI; RED_ZHU=~RED_ZHU; if(temp<0) { break; } shi=temp/10;//
显示十位 ge=temp%10;//
显示个位 } display(shi,ge); } } /*
显示子函数*/ voiddisplay(uint shi,uint ge) { P2=0x00; P0=table[shi];//
显示十位 delay0(5); P2=0x04; P0=table[ge];//
显示个位 delay0(5); }/*
定时中断子函数*/ void TO_
time() interrupt 1 { TH0=0x4c; TL0=0x00; aa++; } /*
延时子函数*/ void delay0(uint z) { uint i,j; for(i=0;i<z;i++) for(j=0;j<110;j++); }
-
实物图
-
电路图
一周热门 更多>