熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2015-12-1 09:21
正文摘要://***8只7段數(shù)碼管,想實(shí)現(xiàn)在末位數(shù)碼管每秒跳變一次,滿10進(jìn)一位,倒數(shù)第二位滿10也進(jìn)1,依次類(lèi)推(不要取商取余,那樣運(yùn)算慢有卡頓)*****/// ***k的值一直沒(méi)變,總是0,返回的tmp只到1就沒(méi)了。這是為什么? ... |
| 弄了半天啊,原來(lái)是問(wèn)題在于到9時(shí)沒(méi)有進(jìn)1,兩個(gè)9或更多9時(shí)沒(méi)有往后SCAN |
|
//***8只7段數(shù)碼管,想實(shí)現(xiàn)在末位數(shù)碼管每秒跳變一次,滿10進(jìn)一位,倒數(shù)第二位滿10也進(jìn)1,依次類(lèi)推*****/// 硬件有,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譯碼器,用來(lái)選擇哪個(gè)管顯示 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); //定時(shí)器初始化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用來(lái)表示要顯示的數(shù)字,i表示要顯示第幾位,前面有幾個(gè)顯0的 InitTimer0(); for(i=0;i<8;i++) n[i]=0; while(1) { if(time==100) //1秒才跳數(shù) { time=0; n[0]++; //末位管進(jìn)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;//前位進(jìn)1 ScanNumber(j); } } return 8; //沒(méi)有等于10的數(shù)組 } void Display_Arr(uint x) //選擇8個(gè)數(shù)碼管的哪個(gè)亮 { switch(x) //位選,選擇點(diǎn)亮的數(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; //定時(shí)10MS TL0 = 0xF0; time++; } void InitTimer0(void)// 定時(shí)器0初始化 { TMOD = 0x01; //方式1 TH0 = 0xD8; //定時(shí)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)達(dá)到 |
| 樓主能分享一下 怎么搞定的嗎 |
| 終于搞定了,哈哈:-) |
| 在線跪求大神啊 |
Powered by 單片機(jī)教程網(wǎng)