51单片机基本测试

  • 定义并行IO口时,可直接用 #define
  • 定义单个IO口时,用 sbit
  • 例:

引入上拉电阻

图中的LED灯是接上拉电阻(MCS-51的IO口拉点流能力是100uA(影响下拉电阻),灌电流能力是10mA(影响上拉电阻)),因此当给IO口低电平(即LED = 0)时,LED亮。

51单片机基本测试
将多只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进行处理,非常感谢!

上一篇 2021年11月28日
下一篇 2021年11月28日

相关推荐