- 定义并行IO口时,可直接用 #define
- 定义单个IO口时,用 sbit
- 例:
引入上拉电阻
图中的LED灯是接上拉电阻(MCS-51的IO口拉点流能力是100uA(影响下拉电阻),灌电流能力是10mA(影响上拉电阻)),因此当给IO口低电平(即LED = 0)时,LED亮。

将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将”b”和”c”段接上正电源,其它端接地或悬空,那么”b”和”c”段发光,此时,数码管显示将显示数字“1”。而将”a”、“b”、“d”、”e”和”g”段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它字符的显示原理类同。
动态扫描显示(利用人眼的视觉暂留特性和数码管的余辉特性)
消隐作用
单片机的LED数码动态显示需要消隐。因为动态显示是利用 人眼的暂留效应来多位显示的。原理是其多位数码管的每位段码控制只由一个IO口8 位输出,先位选 ,送段码,延时(1~3ms),关位选 (这个就是消隐作用,如果没关,下一位的段码送出时,这一位也显示下一位的段码,这样就乱了)再下一位,重复上述过程。
/**********************************功能:数码管显示“1234”**********************************/#include #define uint8 unsigned char#define uint16 int #define GPIO_DIG P0sbit LSA = P2^0 ;sbit LSB = P2^1 ; sbit LSC = P2^2 ; sbit LSD = P2^3 ;unsigned char code DIG_CODE[17]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xf7,0xfc,0xf8,0x77,0xfd,0xf1 };//声明函数void delay(uint8 time);void main(){ uint16 i ; while(1) { LSA = 0 ;LSB = 1 ;LSC = 1 ;LSD = 1 ; GPIO_DIG = DIG_CODE[1]; delay(1000);LSA = 1 ;LSB = 0 ;LSC = 1 ;LSD = 1 ; GPIO_DIG = DIG_CODE[2];delay(1000);LSA = 1 ;LSB = 1 ;LSC = 0 ;LSD = 1 ; GPIO_DIG = DIG_CODE[3]; delay(1000);LSA = 1 ;LSB = 1 ;LSC = 1 ;LSD = 0 ; GPIO_DIG = DIG_CODE[4];delay(1000);i++ ;if(i == 16) i = 0 ; GPIO_DIG = 0xFF ; //消隐 } }//延时1msvoid delay(uint8 time){ unsigned char a,b,c声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!