楼主有封装跟库没 |
王披风 发表于 2021-9-14 14:16 已经解决了,我用数组显示的位选,成功了,感谢。 |
你好,借鉴你的程序,我发现我烧到板子上之后发现数码管显示有问题,有时候好像显示不出来,有时候乱码。不知道什么原因。 #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--; } } |
麻烦问一下,这个是单层板还是双层板 |
![]() |
感谢分享 |
这个正是我需要的 感谢楼主的共享 |