#define uchar unsigned char#define uint unsigned int#include <reg52.h>/*****定義控制位**********************/sbit EW_LED2=P2^3; //EW_LED2控制位sbit EW_LED1=P2^2; //EW_LED1控制位sbit SN_LED2=P2^1; //SN_LED2控制位sbit SN_LED1=P2^0; //SN_LED1控制位sbit SN_Yellow=P1^6; //SN黃燈sbit SN_Red=P1^7; //SN紅燈sbit EW_Yellow=P1^2; //EW黃燈sbit EW_Red=P1^3; //EW紅燈bit Flag_SN_Yellow; //SN黃燈標志位bit Flag_EW_Yellow; //EW黃燈標志位char Time_EW; //東西方向倒計時單元char Time_SN; //南北方向倒計時單元uchar EW=10,SN=10,EWL=3,SNL=3; //程式初始化賦值,正常模式uchar EW1=10,SN1=10,EWL1=3,SNL1=3; //用于存放修改值的變數uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~~~~9段選碼uchar code S[9]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84,0x88};//交通信號燈控制代碼/**********************延時子程式************************/void delay_ms(unsigned int x) //延時ms{ unsigned int i,j; for(i=x;i>0;i--) for(j=110;j>0;j--);}/*****************顯示子函式**************************/void Display(void){ char h,l; h=Time_EW/10; l=Time_EW%10; P0=table[l]; EW_LED2=1; delay_ms(1); EW_LED2=0; P0=table[h]; EW_LED1=1; delay_ms(1); EW_LED1=0; h=Time_SN/10; l=Time_SN%10; P0=table[l]; SN_LED2=1; delay_ms(1); SN_LED2=0; P0=table[h]; SN_LED1=1; delay_ms(1); SN_LED1=0; } /**********************T0中斷服務程式*******************/void timer0(void)interrupt 1 using 1{ static uchar count; TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==10) { if(Flag_SN_Yellow==1) //測驗南北黃燈標志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow==1) //測驗東西黃燈標志位 {EW_Yellow=~EW_Yellow;} } if(count==20) { Time_EW--; Time_SN--; if(Flag_SN_Yellow==1)//測驗南北黃燈標志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow==1)//測驗東西黃燈標志位 {EW_Yellow=~EW_Yellow;} count=0; } }/*********************主程式開始**********************/void main(void){ TMOD=0x01;//定時器作業于方式1 TH0=(65536-50000)/256;//定時器賦初值 TL0=(65536-50000)%256; EA=1; //CPU開中斷總允許 ET0=1;//開定時中斷 TR0=1;//啟動定時 /*******S0狀態(初始狀態)**********/ Time_EW=3; Time_SN=3; while(Time_SN>=0||Time_EW>=0) { Flag_EW_Yellow=0; //EW關黃燈顯示信號 P1=S[8]; //所有路口紅燈 Display(); } while(1) { /*******S1狀態(主干道直行狀態)**********/ Time_EW=EW; Time_SN=SN; while(Time_SN>=4) { Flag_EW_Yellow=0; //EW關黃燈顯示信號 P1=S[0]; //SN通行,EW紅燈 Display(); } /*******S2狀態(主干道直行黃燈閃爍狀態)**********/ P1=0x00; while(Time_SN>=0) { Flag_SN_Yellow=1; //SN開黃燈信號位 EW_Red=1; //SN黃燈亮,等待左轉信號,EW紅燈 Display(); } /***********賦值(主干道通行變次干道通行)**********/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; /*******S3狀態(次干道直行狀態)**********/ Time_EW=SN; Time_SN=EW; while(Time_EW>=4) { Flag_SN_Yellow=0; //SN關黃燈顯示信號 P1=S[4]; //EW通行,SN紅燈 Display(); } /*******S4狀態(次干道直行黃燈閃爍狀態)**********/ P1=0X00; while(Time_EW>=0) { Flag_EW_Yellow=1;//EW開黃燈信號位 SN_Red=1;//EW黃燈亮,等待左拐信號,SN紅燈 Display(); } /***********賦值(次干道通行變主干道通行)**********/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; } }
各位大佬 能不能幫忙告訴我哪里出問題了,真心請教。

uj5u.com熱心網友回復:
問題已解決 感謝感謝
uj5u.com熱心網友回復:
樓主數碼管顯示不全是怎么解決的uj5u.com熱心網友回復:
數碼管可解碼用靜態驅動,因為仿真非實物,掃描方式會看起來顯示不全轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/14270.html
標籤:模式及實現
上一篇:貪心演算法實作最短路徑
