#include //52 系列单片机头文件#include #define uchar unsigned char#define uint unsigned int sbit key1=P3^0; //按键口定义sbit key2=P3^1;sbit key3=P3^4;//蜂鸣器口定义sbit key4=P3^5;sbit key5=P3^6;sbit Beer=P3^7;sbit DX_Red=P1^5; //红绿灯 DX 口定义sbit DX_Yellow=P1^4; sbit DX_Green=P1^3;sbit NB_Red=P1^2; //红绿灯 NB 口定义sbit NB_Yellow=P1^1; sbit NB_Green=P1^0;sbit NB_Blue=P1^6;sbit DX_Blue=P1^7;//sbit NB_JS=P3^5;//sbit DX_JS=P3^6;uchar code table[]={ //共阳极段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void delayms(uint xms);int DX_Num=23,NB_Num=10;//数码管显示数字int numt0;//定时器计时int JS_NB_Num,JS_DX_Num;int NB_Num_GREEN,DX_Num_GREEN;int XZ=0;//按键 2 选择int BJ=0; //按键 1 选择int JS=0; //按键 5 选择int Temp1=1; //中断是否int temp=1 ; //数码管是否循环//int flag=0;int DX_Flag=0,NB_Flag=1; //红绿灯状态int DX_RED=33,DX_GREEN=15,DX_YELLOW=3; //红绿灯时间int NB_RED=38,NB_GREEN=10,NB_YELLOW=3;int NB_BLUE=10,DX_BLUE=10; //左转时间void display(uchar num1dis,uchar num2dis);void keyscan();void init() //中断红绿灯初始化函数 { Beer=1; //蜂鸣器关断 TMOD=0x01; //中断程序初始化TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;// EX1=1;//开外部中断 1// IT1=1;//外部中断下降沿触发//EX0=1;//开外部中断 0// IT0=1;//外部中断下降沿触发 DX_Red=0; //红绿灯初始化DX_Yellow=1;DX_Green=1;NB_Red=1;NB_Yellow=1;NB_Green=0;}void main() //主函数{ init(); while(1) { keyscan(); if(temp==1){ display(NB_Num,DX_Num);}}}void display(uchar num1dis,uchar num2dis) //数码管显示函数{int NB_Shi,NB_Ge,DX_Shi,DX_Ge;NB_Shi=num1dis/10;NB_Ge=num1dis%10;DX_Shi=num2dis/10;DX_Ge=num2dis%10;P0=table[NB_Shi]; //送十位段选数据P2=0xfe;delayms(3);P0=table[NB_Ge]; //送十位段选数据P2=0xfd;delayms(3);P0=table[DX_Shi]; //送十位段选数据P2=0xfb;delayms(3);P0=table[DX_Ge]; //送十位段选数据P2=0xf7;delayms(3);}void keyscan()//按键扫描函数{ if(key1==0...