![]() |
樓主有封裝跟庫沒 |
王披風(fēng) 發(fā)表于 2021-9-14 14:16 已經(jīng)解決了,我用數(shù)組顯示的位選,成功了,感謝。 |
你好,借鑒你的程序,我發(fā)現(xiàn)我燒到板子上之后發(fā)現(xiàn)數(shù)碼管顯示有問題,有時候好像顯示不出來,有時候亂碼。不知道什么原因。 #include <REGX52.H> #define uchar unsigned char #define uint unsigned int #define ON 0 #define OFF 1 sbit dula=P2^6; sbit wela=P2^7; sbit NS_GRE = P1^5; sbit NS_YEL = P1^4; sbit NS_RED = P1^3; sbit EW_GRE = P1^2; sbit EW_YEL = P1^1; sbit EW_RED = P1^0; uchar flag=1; #define YELTime 4 #define EWTime 28+YELTime #define NSTime 16+YELTime uchar t=EWTime; uchar tt=0; sbit Key1=P3^4; sbit Key2=P3^5; uchar keyflag=0; uchar table[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; #define EW_RED_ON() do { EW_RED=ON;EW_GRE=OFF;EW_YEL=OFF; } while (0) #define EW_YEL_ON() do { EW_RED=OFF;EW_GRE=OFF;EW_YEL=ON; } while (0) #define EW_GRE_ON() do { EW_RED=OFF;EW_GRE=ON;EW_YEL=OFF; } while (0) #define NS_RED_ON() do { NS_RED=ON;NS_GRE=OFF;NS_YEL=OFF; } while (0) #define NS_YEL_ON() do { NS_RED=OFF;NS_GRE=OFF;NS_YEL=ON; } while (0) #define NS_GRE_ON() do { NS_RED=OFF;NS_GRE=ON;NS_YEL=OFF; } while (0) void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display1(uchar num1,uchar num2) { P0=0xff; wela=1; P0=0xfc; wela=0; P0=0x00; dula=1; P0=table[num1]; dula=0; delayms(3); P0=0xff; wela=1; P0=0xfd; wela=0; P0=0x00; dula=1; P0=table[num2]; dula=0; delayms(3); } void display2(uchar num3,uchar num4) { P0=0xff; wela=1; P0=0xef; wela=0; P0=0x00; dula=1; P0=table[num3]; dula=0; delayms(3); P0=0xff; wela=1; P0=0xdf; wela=0; P0=0x00; dula=1; P0=table[num4]; dula=0; delayms(3); } void INIT(void) { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; } void KeyScan() { if (Key1==0) { delayms(10); if (Key1==0) { keyflag=1; } } if (Key2==0)//¸′λ°′¼ü »Øμ½3õê¼×′ì¬ { delayms(10); if (Key2==0) { keyflag=0; flag=1; t=EWTime; } } } void main() { INIT(); EA=1; NS_GRE = OFF; NS_YEL = OFF; NS_RED = OFF; EW_GRE = OFF; EW_YEL = OFF; EW_RED = OFF; P0 = 0xFF; while(1) { KeyScan(); if(flag==1) { display1(t/10, t%10); display2(t/10, t%10); EW_RED_ON(); NS_GRE_ON(); if(t>4) { NS_GRE_ON(); } if(t>=0&&t<5) NS_YEL_ON(); if(t==0) { flag=0; t=NSTime; } } if(flag==0) { display1(t/10, t%10); display2(t/10, t%10); NS_RED_ON(); if(t>4) { EW_GRE_ON(); } if(t>=0&&t<5) EW_YEL_ON(); if(t==0) { flag=1; t=EWTime; } } if(keyflag == 1) { P0 = 0xFF; EW_RED_ON(); NS_RED_ON(); flag=2; } } } void timer1(void) interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==20) { tt=0; t--; } } |
麻煩問一下,這個是單層板還是雙層板 |
![]() |
感謝分享 |
這個正是我需要的 感謝樓主的共享 |
Powered by 單片機教程網(wǎng)