![]() |
發(fā)布時間: 2015-12-1 09:21
正文摘要://***8只7段數(shù)碼管,想實現(xiàn)在末位數(shù)碼管每秒跳變一次,滿10進一位,倒數(shù)第二位滿10也進1,依次類推(不要取商取余,那樣運算慢有卡頓)*****/// ***k的值一直沒變,總是0,返回的tmp只到1就沒了。這是為什么? ... |
弄了半天啊,原來是問題在于到9時沒有進1,兩個9或更多9時沒有往后SCAN |
//***8只7段數(shù)碼管,想實現(xiàn)在末位數(shù)碼管每秒跳變一次,滿10進一位,倒數(shù)第二位滿10也進1,依次類推*****/// 硬件有,74HC138譯碼器,74HC573移位器 ******/ #include<reg51.h>#include<intrins.h> #define uint unsigned int #define uchar unsigned char #define GPIO P0sbit LE=P1^0; //74HC573移位器使能 sbit LSA=P2^2; //此三腳接138譯碼器,用來選擇哪個管顯示 sbit LSB=P2^3; sbit LSC=P2^4; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f };//,0x77,0x7c,//0x39,0x5e,0x79,0x71//顯示0~F的值 取0-9 uint time=0,n[8]; //0-7代表8位數(shù)碼管,數(shù)組里裝數(shù)碼管的值 void Delay10ms(uint c); void Display_Arr(uint x);//選擇顯示第幾位 void InitTimer0(void); //定時器初始化void Display(uint *x); uint ScanNumber(uint);//掃描8管是否有等于10,返回i,否則返回0// void FillOneTube(uint x,uint y); void main() { uint i, k=0,tmp=0; //n用來表示要顯示的數(shù)字,i表示要顯示第幾位,前面有幾個顯0的 InitTimer0(); for(i=0;i<8;i++) n[i]=0; while(1) { if(time==100) //1秒才跳數(shù) { time=0; n[0]++; //末位管進1 ScanNumber(k); Display(n); } }//end while } void Display(uint * x) { uint i;uint y[8]; for(i=0;i<8;i++) { y[i]=*x; x++; } for(i=0;i<8;i++) { Display_Arr(i); LE=1; GPIO=table[y[i]]; LE=0; Delay10ms(1); } } uint ScanNumber(uint k) { uint i=0,j; for(;i<8;i++) { if(n[i]==10) { j=k; n[j]=0; ; n[++j]+=1;//前位進1 ScanNumber(j); } } return 8; //沒有等于10的數(shù)組 } void Display_Arr(uint x) //選擇8個數(shù)碼管的哪個亮 { switch(x) //位選,選擇點亮的數(shù)碼管, { case(0): LSA=0;LSB=0;LSC=0; break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; case(3): LSA=1;LSB=1;LSC=0; break; case(4): LSA=0;LSB=0;LSC=1; break; case(5): LSA=1;LSB=0;LSC=1; break; case(6): LSA=0;LSB=1;LSC=1; break; case(7): LSA=1;LSB=1;LSC=1; break; } } void Tiner_Int() interrupt 1 { TH0 = 0xD8; //定時10MS TL0 = 0xF0; time++; } void InitTimer0(void)// 定時器0初始化 { TMOD = 0x01; //方式1 TH0 = 0xD8; //定時10MS TL0 = 0xF0; EA = 1; ET0 = 1; TR0 = 1; } void Delay10ms(uint c) //誤差 0us { unsigned char a,b; for(;c>0;c--) for(b=10;b>0;b--) //38 for(a=130;a>0;a--); } 顯示效果不是很理想,功能已經(jīng)達到 |
樓主能分享一下 怎么搞定的嗎 |
終于搞定了,哈哈:-) |
在線跪求大神啊 |
Powered by 單片機教程網(wǎng)