wulin 发表于 2020-2-3 17:29 0加点真是经典,站在初学者的角度,别太搞好了,给他启发就可以了. |
我帮你弄好了.#include "REG52.H" typedef unsigned char u8; typedef unsigned int u16; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 a=0,b=1,c=2,d=3,e=4,f=5,g=6,h=7;//使用八个数进行位置确定 u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(u16 i) { while(i--); } void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) { case(0): LSA=0;LSB=1;LSC=0;break; case(1): LSA=0;LSB=0;LSC=0;break; case(2): LSA=0;LSB=1;LSC=0;break; case(3): LSA=0;LSB=0;LSC=0;break; case(4): LSA=1;LSB=1;LSC=1;break; case(5): LSA=0;LSB=1;LSC=0;break; case(6): LSA=0;LSB=0;LSC=0;break; case(7): LSA=0;LSB=1;LSC=1;break; } P0=smgduan[i]; delay(100); P0=0x00; } } void display() { u8 j; for(j=0;j<8;j++) { switch(j) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0;P0=smgduan[a] ;break;// case(1): LSA=1;LSB=0;LSC=0; P0=smgduan[b];break;// case(2): LSA=0;LSB=1;LSC=0; P0=smgduan[c];break; case(3): LSA=1;LSB=1;LSC=0; P0=smgduan[d];break;// case(4): LSA=0;LSB=0;LSC=1; P0=smgduan[e];break;// case(5): LSA=1;LSB=0;LSC=1; P0=smgduan[f];break;// case(6): LSA=0;LSB=1;LSC=1; P0=smgduan[g];break;// case(7): LSA=1;LSB=1;LSC=1; P0=smgduan[h];break;// } delay(100); P0=0x00; } } void main() { while(1) { display(); // DigDisplay(); } } |
把20.20.720.6对应的段码:0x5b,0xbf,0x5b,0xbf,0x07,0x5b,0xbf,0x7d作为数组, 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; } 这样改了就可实现 |
switch的case几种状态都重复了,显示不乱才怪 |
位码不可以随意改动,想改变显示字符只能改段码。
![]()
|