单片机交通灯问题 //以下程序只能完成一个周期,不能连续执行
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h> #define uchar unsigned char #define uint unsigned int #define ulang unsigned lang static unsigned char count; code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9 uchar smg[8]; //定义缓冲区运动会加油稿
uint we,ns,h,j; int aaa(); int bbb(); void delay(unsigned int cnt) { while(--cnt); } void display( ) {
smg[0]=tab[we/10]; smg[1]=tab[we%10]; smg[2]=0x00; smg[3]=0x00; smg[4]=0x00; smg[5]=0x00; smg[6]=tab[ns/10]; smg[7]=tab[ns%10];
}
void main() { uchar i; TMOD |=0x01; //定时器0 10ms in 12M crystal 用于计时 TH0=0xd8; //初值 TL0=0xf0; ET0=1; TR0=1; EA =1;
display();
while(1) { for(i=0;i<8;i++) //显示函数 { P0=smg[i]; P2=i; delay(100); } ccc(); display( ); } } void timer() interrupt 1 { TH0=0xd8; //重新赋值 TL0=0xf0; count++;
}
int aaa() {
if(j<25) { if(j==1) { we=30,ns=25; } ns--; we--; P1=0xde; return 0; } if(25<=j<30) { if(j==26) { ns=5; } P1=0xee; ns--; we--; return 0; } } int bbb() { if(h<25) { if(h==1) { we=25,ns=30; } ns--; we--; P1=0xf3; return 0; } if(25<=h<30) { if(h==26) { we=5; } P1=0xf5; ns--; we--; return 0; } } int ccc() { if (count==25) { count=0; j++; if (j>30) { h++; bbb(); return 0; } if(j>60) { j=1; h=0; return 0; } //问题就在这里,不能重新赋值 aaa(); return 0; } }
|