熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時間: 2019-5-5 09:52
正文摘要:代碼:#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; uchar temp,aa,m1,m2,m3,shi,ge; uchar code table[]={ 0x3f ... |
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; uchar temp,m1,m2,m3,shi,ge;uint aa; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void display(uchar m1,uchar m2,uchar m3,uchar shi,uchar ge); void initial(); void main() { initial(); while(1) { if(key1==0) { delay(10); if(key1==0) { while(!key1); TR0=1; } } if(key2==0) { delay(10); if(key2==0) { while(!key2); TR0=0; } } if(key3==0) { delay(10); if(key3==0) { while(!key3); temp=0; m1=0; m2=0; m3=0; shi=0; ge=0; TR0=0; } } display(shi,ge,m3,m2,m1); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar m1,uchar m2,uchar m3,uchar shi,uchar ge) { P2=0xfd; P0=table[m1]; delay(10); P2=0xfe; P0=table[m2]; delay(10); P2=0xfb; P0=table[m3]; delay(10); P2=0xf7; P0=table[ge]; delay(10); P2=0xef; P0=table[shi]; delay(10); } void initial() { temp=0; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%256; EA=1; ET0=1; } timer0() interrupt 1 { TH0=(65536-500)/256; TL0=(65536-500)%256; aa++; m3=aa/100; m2=aa%100/10; m1=aa%100%10; if(aa==999) { aa=0; temp++; if(temp==99) { temp=0; } shi=temp/10; ge=temp%10; } } 又改了一下,1、顯示順序,2、位選信號,3、aa類型 試試。 |
哦,忘了,aa的類型確實(shí)不對的,要改成uint aa; 其他試試看看 |
代碼:#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; uchar temp,aa,m1,m2,m3,shi,ge; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void display(uchar m1,uchar m2,uchar m3,uchar shi,uchar ge); void initial(); void main() { initial(); while(1) { if(key1==0) { delay(10); if(key1==0) { while(!key1); TR0=1; } } if(key2==0) { delay(10); if(key2==0) { while(!key2); TR0=0; } } if(key3==0) { delay(10); if(key3==0) { while(!key3); temp=0; m1=0; m2=0; m3=0; shi=0; ge=0; TR0=0; } } display(m1,m2,m3,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar m1,uchar m2,uchar m3,uchar shi,uchar ge) { P2=0xfb; P0=table[m1]; delay(10); P2=0xf7; P0=table[m2]; delay(10); P2=0xef; P0=table[m3]; delay(10); P2=0xfd; P0=table[ge]; delay(10); P2=0xfe; P0=table[shi]; delay(10); } void initial() { temp=0; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%256; EA=1; ET0=1; } timer0() interrupt 1 { TH0=(65536-500)/256; TL0=(65536-500)%256; aa++; m3=aa/100; m2=aa%100/10; m1=aa%100%10; if(aa==1000) { aa=0; temp++; if(temp==99) { temp=0; } shi=temp/10; ge=temp%10; } } 位選信號搞錯了,紅色標(biāo)注了修改過后的,其他的應(yīng)該問題不大,按照我修改過的運(yùn)行一次試試,應(yīng)該沒問題的。 |
yzwzfyz 發(fā)表于 2019-5-5 12:22 1000就是1毫秒呀,很快的ne |
本帖最后由 wulin 于 2019-5-6 06:09 編輯 錯誤1:位碼錯誤,應(yīng)該是0xfe,0xfd,0xfb,0xf7,0xef。 錯誤2:數(shù)據(jù)類型錯誤,應(yīng)該是uint aa。 錯誤3:1ms定時數(shù)據(jù)錯誤。 當(dāng)然還有運(yùn)行中的問題:按鍵干擾顯示,數(shù)碼管會閃爍等等。 |
中斷函數(shù)里shi和ge的獲取要放到if(aa==1000)的花括號之外。 |
等至aa=1000的時候,你就看到顯示了。耐心等待吧。 |
Powered by 單片機(jī)教程網(wǎng)