51单片机控制8段数码管实验

9/24/2023 10:28:46 AM
508
0

一、物料

  1. 8段数码管x1
  2. 1k电阻x8
  3. 杜邦线若干

二、接线

  1. 数码管的abcdefg.dp 分别依次接入到单片机P0区域的针脚0-7上
  2. 数码管的另外两个针脚接开发板的vcc 或者 GND

这里要注意51单片机有最小系统电路,需要满足此系统电路后方能正常执行

三、源码

实验过程需要注意的地方已经在注释中了,用时注意即可

什么是共阳和共阴?数码管中间针脚接vcc就是共阳,接Gnd就是共阴。如果没有接对无法点亮数码管

#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;

#define TUBE P0    //定义宏变量
 
//共阳型(0~9,A,b,C,d,E,F,全亮,全灭),字码组
//uchar code table_D[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00,0xFF};
//正常型,共阳型要取反,共阴型不用取反	
u8 code display[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

 
//延时方法
void delay_ms(u16 n)
{
	u8 i;
	while(n--)
	{
		i = 111;
		while(i--);
	}
}

void main()
{
	u8  j;
	u8  array_length = sizeof(display) / sizeof(display[0]);
	while(1)
	{
		for(j=0; j < array_length; j++)
		{
			TUBE=display[j];  //设置P0区8个针脚的电平,使用byte 的二进制值作为电平信号
			delay_ms(1000);
		}
	}
}

四、效果展示

https://www.bilibili.com/video/BV188411y7AZ/

 

五、说明

通常情况下,通电情况下单片机引脚默认为高电平。

由于发光二极管正极连接公共正电压源(共阳极),所以只有位为0时,灯才会亮。需要形成压差后才会有电流点亮二极管

P0端口的8个二进制位中,高位对应P0.7,低位对应P0.0。既二进制高位对应的io口的高位,二级制的低位对应着io口的低位。

二进制从右到左为低→高,右边最低,左边最高。

 

全部评论



提问