#include<reg52.h> #include<bstv51.h> #define uchar unsigned char #define uint unsigned int sbit nbp1=P0^4;//南北方向数码管第一位; sbit nbp2=P0^5;//南北方向数码管第二位; sbit dxp1=P0^6;//东西方向数码管第一位; sbit dxp2=P0^7;//东西方向数码管第二位; sbit hdnb=P0^2;//南北方向红灯; sbit hddx=P0^0;//东西方向红灯; sbit ldnb=P0^3;//南北方向绿灯; sbit lddx=P0^1;//东西方向绿灯; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //0-9 uchar num=30;num2,shi,ge; void delayms(xms) //延时函数x毫秒函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar shi,uchar ge) //南北数码管显示函数 { P1=table[shi]; nbp1=0; //选中南北方向数码管第一位 delayms(3); nbp1=1; //关闭南北方向数码管第一位 P1=table[ge]; nbp2=0; //选中南北第二位 delayms(3); nbp2=1; //关闭南北方向数码管第二位 P2=table[shi]; dxp1=0; //选中南北方向数码管第一位 delayms(3); dxp1=1; //关闭南北方向数码管第一位 P2=table[ge]; dxp2=0; //选中南北第二位 delayms(3); dxp2=1; } void T1_time()interrupt 3 //定时器1中断函数 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; num2++; if(num2==20) { num2=0; //说明计时够一秒 num--; if(num==0) { lddx=~lddx; hdnb=~hdnb; ldnb=~ldnb; hddx=~hddx; num=30; } } shi=num/10; ge=num%10; } void main() //主函数 { TMOD=0x10; TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET1=1; TR1=1; lddx=0; //东西方向绿灯亮 hdnb=0; //南北方向红灯亮 ldnb=1; hddx=1; P1=0x00; P2=0x00; nbp1=1; dxp1=1; dxp2=1; nbp2=1; while(1) { display(shi,ge); } } |