51单片机(九)—— 8位数码管-显示一位

一、原理介绍

        关于数码管的控制电路,在《51单片机(八)》中有详细的介绍,硬件电路如下图所示。

在这个实验中,我们对8位数码管的一位进行控制,在进行实验时,需要将单片机的P00~P07引脚与J44相连。接口的对应关系是(P00—D0),……,(P07—D7)。将单片机的P10和P11引脚与J45相连,P10与J45上的DM对应,P11与WM对应。

二、实例介绍

        这个实验的代码如下所示

#include<reg52.h> //包含头文件,一般情况不需要改动

#define DATA P0 //定义数据端口 程序中遇到DATA 则用P0口 替换
sbit DM = P1^0;  //定义锁存使能端口 段锁存
sbit WM = P1^1;  //定义锁存使能端口 位锁存

void main(void) 
{
	for(;;) 
	{
		DATA=0xfe; //取位码,第一位数码管选通,即二进制1111 1110
		WM=1;      //位锁存
		WM=0;
		
		DATA=0x7f; //取显示数据,段码 "8"
		DM=1;      //段锁存
		DM=0;   
	} 
}

将代码烧写到单片机中,现象如下所示。

       这个实验使用两个锁存器来驱动发光二极管。控制数码管的位码和段码都通过单片机的P0口输出。U43用来输出位码,U42用来输出段码。

        P0口首先输出0xfe,WM=1;这个语句使U43输出值为0xfe,WM=0;这个语句使U43为锁存状态。U43的输出保持为0xfe。0xfe转换为二进制为1111 1110,这8个数值输出给8位数码管的共阴极。输出为1的位,由于阴极为高电平,数码管被关断,输出0的位,阴极为低电平,数码选通。因此数码管的第一位选通,其它位关断。

        之后,P0口输出0x7f,DM=1;这个语句使U42输出值为0x7f,DM=0;这个语句使U42为锁存状态。U42的输出保持为0x7f。0x7f对应的二进制为0111 1111,即数码管的A、B、C、D、E、F、G段都为高电平,因此A、B、C、D、E、F、G都可以点亮,显示的是数值“8”,又由于只有第一位选通,因此最后的实验现象是第一位显示“8”。

 

发布了78 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104346286