单片机-数码管;

数码管显示原理


选用共阳极数码管,IO输出0表示亮,输出1表示不亮。

推导出共阳极显示0-9的十六进制如下:

数字显示-共阳

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
	
sbit dula=P2^6;  //定义段选信号
sbit wela=P2^7;  //定义位选信号

void main()
{
	wela=1;  //位选为高电平,选择某个数码管
	P0=0x01;  //P0=0000 0001,打开第一个数码管
	wela=0;  //关闭位选锁存器
	
//显示0
//	dula=1;  //段选锁存器打开
//	P0=0x40;  //P0=0100 0000,0表示亮
//	dula=0;  //段选锁存器关闭;
	
//显示1
//	dula=1;  //段选锁存器打开
//	P0=0xf9;  //P0=1111 1001,
//	dula=0;  //段选锁存器关闭;
	
//显示2
//	dula=1;  //段选锁存器打开
//	P0=0x24;  //P0=0010 0100,
//	dula=0;  //段选锁存器关闭;
	
//显示3
//	dula=1;  //段选锁存器打开
//	P0=0x30;  //P0=0011 0000,
//	dula=0;  //段选锁存器关闭;
	
//显示4
//	dula=1;  //段选锁存器打开
//	P0=0x19;  //P0=0001 1001,
//	dula=0;  //段选锁存器关闭;
	
//显示5
//	dula=1;  //段选锁存器打开
//	P0=0x12;  //P0=0001 0011,
//	dula=0;  //段选锁存器关闭;
	
//显示6
//	dula=1;  //段选锁存器打开
//	P0=0x02;  //P0=0000 0010,
//	dula=0;  //段选锁存器关闭;
	
//	//显示7
//	dula=1;  //段选锁存器打开
//	P0=0xf8;  //P0=1111 1000,
//	dula=0;  //段选锁存器关闭;
	
//	//显示8
//	dula=1;  //段选锁存器打开
//	P0=0x00;  //P0=0000 0000,
//	dula=0;  //段选锁存器关闭;
	
//	//显示9
	 dula=1;  //段选锁存器打开
	 P0=0x10;  //P0=0001 0000,
 	dula=0;  //段选锁存器关闭;
	 while(1);
}

对应共阴极的数码管

unsigned char code table[]={
     0x3f,0x06,0x5b,0x4f,
     0x66,0x6d,0x7d,0x07,
     0x7f,0x6f,0x77,0x7c,
     0x39,0x5e,0x79,0x71,
}

注:code关键字表示编码,在单片机c语言中,定义数组是占用内存空间的,定义编码是直接分配到程序空间中,编译后编码占用的是程序存储空间而非内存空间。

数字显示 延时从1-f显示 共阴

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
	
sbit dula=P2^6;  //定义段选信号
sbit wela=P2^7;  //定义位选信号

unsigned char code tableK[]={
	  0x3f,0x06,0x5b,0x4f,
      0x66,0x6d,0x7d,0x07,
      0x7f,0x6f,0x77,0x7c,
      0x39,0x5e,0x79,0x71,
};

uint num;
void delayms(uint);

void main()
{
 	wela=1;  //位选为低电平,选择某个数码管
  	P0=0xfe;  //P0=1111 1110,打开第一个数码管,延时从1-f显示
	wela=0;  //关闭位选锁存器
	
//	dula=1;
//	P0=tableK[1];
//	dula=0;
 	while(1)
 	{
	 	for(num=0;num<16;num++)
	 	{
	 		dula=1;
		 	P0=tableK[num];
			dula=0;
			delayms(500);
		}
	};
}

void delayms(uint xms)
{
	uint i,j;
	for(i=xms;i>0;i--)
 	{
 		for(j=110;j>0;j--);
 	}
}
赞赏