单片机(AT89X52)四位数码管显示0123

用一片3线8线译码器来选择4个数码管,其中有四个输出端不用。

原理图如下:

讲解注释我都写到程序里了,直接上程序:

#include<reg51.h>
#define uchar unsigned char

unsigned char code LED[10]=    //0-9的数码管字形数组
{
    0x3F,                
    0x06,               
    0x5B,                
    0x4F,         
    0x66,                 
    0x6D,                
    0x7D,                 
    0x07,                
    0x7F,                
    0x6F,
};
sbit A0 = P1^0;
sbit A1 = P1^1;
sbit A2 = P1^2;
void main(void){
	uchar c=0;   //用于做延时
	uchar d=3;   //用作控制显示的位置
	while (1){
		for (c=0;c<80;c++);  //这个for循环用于延时
		P2=0;    //由于单片机复位时所有端口输出都为1,为了不产生鬼影,所以将P2口先置0
		if (++d>3) d=0;
		if (d==0)       //前面说了,d是用作索引,选择数码管显示的位置
		{
			P1=0x03;      //选通千位数码管进行显示
			P2=LED[0];    //千位显示0
		}
		else if (d==1)
		{	
			P1=0x02;
			P2=LED[1];
		}
		else if (d==2)
		{
			P1=0x01;
			P2=LED[2];
		}
		else
		{
			P1=0x00;
			P2=LED[3];
		}
	}
}

以上便是四位数码管显示0123的方法。待续。

猜你喜欢

转载自blog.csdn.net/msdumin/article/details/18260299