一、数码管

  数码管是单片机常用的数字、字符显示部件,本项目是利用单片机 P0 接口驱动一个共阳型数码管依次显示 0~9 并循环,利用单片机驱动 1 个数码管显示比较简单的单元项目。

1、数码管结构原理

  单片机系统常用的数码管有共阳极型和共阴极型两种类型,它是单片机常用的外围显示器件。两种类型的数码管外形和结构类似,只是数码管内部组成数码段和标点的 LED 接法有区别。共阳极型数码管的内部所有 LED 的阳极接在一起为公共极引脚 COM,称为位选端,阴极分别引出,依次命名为 a、b、c、d、e、f、g、DP 称为段选端。共阳极型数码管使用时,其公共极接电源正极或加低电平,段选端分别接驱动电路,只有段选端加低电平时,对应的段发光二极管点亮。共阴极型数码管与共阳极型数码管解法刚好相反,由于内部所有 LED的阴极接在一起,所以数码管显示时需要在数码管的公共端接电源负极或加低电平,段选高电平有效。

1YCRPFNKGHW7HU6UF5H.png

2、数码管显示字型码

  数码管可以显示 0~9 的数字,加上小数点显示,驱动一个数码管显示的段选信号共需要 8 位二进制。共阳极型数码管,段选端加低电平时,对应的段发光二极管点亮。例如:11111110 —— A 段亮起。共阳极型数码管显示编码如下:(共阴极相反)

显示数字A-DP(二进制)十六进制
0110000000xC0
1111110010xF9
2101001000xA4
3101100000xB0
4100110010x99
5100100100x92
6100000100x82
7111110000xF8
8100000000x80
9100100000x90

二、仿真

1、选择元器件

  这次实验要用的元器件有:AT89C51、共阳极数码管。共阳极数码管选择位置如下:(CC 是阴极)

image.png

2、摆放模拟电路

  本项目使用的是共阳极数码管,段选段收到低电平信号,段发光二极管发光。如果使用共阴极数码管,需要在 P0 口接上拉电阻,段选段才能收到高电平信号。

image.png

三、程序

  共阳极数码管,COM 口接高电平,为位选段循环赋 0~9 的字型编码的十六进制即可。代码如下:

//单个共阳数码管在P0口驱动下,循环显示0-9
#include<reg51.h>
unsigned char i;
//数字0~9的显示方法
code unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int x)				//延时函数
{
	unsigned int i;					//定义整形变量 i
	unsigned char j;				//定义字符变量 j
	for(i=0;i<x;i++)
	for(j=0;j<200;j++);
}
void main(void)
{
	P2 = 0x01;
	while(1)					//进入主程序循环
	{
		P0 = seven_seg[i];
		delay(1000);
		i++;					//数据cp每次加一
		if(i >= 10)i = 0;
	}
}

  代码编写完毕后生成 HEX 文件在仿真电路中运行即可。


标题:实验三:数码管0-9显示 —— AT89C51
作者:Yi-Xing
地址:http://47.94.239.232/articles/2020/09/28/1601304405921.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!