51单片机之数码管

目录

数码管简介

静态数码管显示

数码管显示数字

 数码管显示时间

 动态态数码管显示

数码管移动显示数字--666

数码管移动显示图形--正方形

结束语



数码管简介

 

 实验所用到的模块主要模块包括:数码管、单片机STC89C52、38译码器—74HC138译码器(用于位选):适用于数字电路中的 3—8 译码功能、74HC245(用于段选):适用于显示屏以及其他数字电路的驱动;

位选引脚:P2^2 P2^3 P2^4
段选引脚:P0^0 P0^1 P0^2 P0^3 P0^4 P0^5 P0^6 P0^7

静态数码管显示

数码管显示数字

实验现象 

 实验代码

#include "reg52.h"

typedef unsigned int u16;	//对系统默认数据类型进行重定义
typedef unsigned char u8;   //对系统默认数据类型进行重定义

#define DUAN_PORT	P0	//使用宏定义数码管段段口
#define WEI_PORT	P2	//使用宏定义数码管位选口

//位选数码管
u8 wei_code[9]={0xff,0xfa,0xf7,0xf3,0xef,0xea,0xe7,0xe3};

//段选共阴极数码管显示0~9数字
u8 duan_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//延迟函数
void delay_10us(u16 ten_us)
{
	while(ten_us--);	
}

//数码管显示数字
void DsgShowNum()
{
	while(1)
	{
		
		WEI_PORT=wei_code[0];
		DUAN_PORT=duan_code[0];
		delay_10us(100);
		WEI_PORT=wei_code[1];
		DUAN_PORT=duan_code[1];
		delay_10us(100);
		WEI_PORT=wei_code[2];
		DUAN_PORT=duan_code[2];
		delay_10us(100);
		WEI_PORT=wei_code[3];
		DUAN_PORT=duan_code[3];
		delay_10us(100);
		WEI_PORT=wei_code[4];
		DUAN_PORT=duan_code[4];
		delay_10us(100);
		WEI_PORT=wei_code[5];
		DUAN_PORT=duan_code[5];
		delay_10us(100);
		WEI_PORT=wei_code[6];
		DUAN_PORT=duan_code[6];
		delay_10us(100);
		WEI_PORT=wei_code[7];
		DUAN_PORT=duan_code[7];
		delay_10us(100);
	}
}

//主函数
void main()
{
	while(1)
	{
		DsgShowNum();
	}
}

 数码管显示时间

实验现象

实验代码

//结合上面的
u8 hour = 9,minute = 57,second = 50;

//数码管显示时间
void DsgShowTime()
{
	WEI_PORT = wei_code[0];	
	DUAN_PORT = duan_code[hour/10];
	delay_10us(100);
	WEI_PORT = wei_code[1];	
	DUAN_PORT = (duan_code[hour%10])+0x80;
	delay_10us(100);
	
	WEI_PORT = wei_code[2];	
	DUAN_PORT = duan_code[minute/10];
	delay_10us(100);
	WEI_PORT = wei_code[3];	
	DUAN_PORT = (duan_code[minute%10])+0x80;
	delay_10us(100);
	
	WEI_PORT = wei_code[4];	
	DUAN_PORT = duan_code[second/10];
	delay_10us(100);
	WEI_PORT = wei_code[5];	
	DUAN_PORT = (duan_code[second%10]);
	delay_10us(100);
	
}

 动态态数码管显示

数码管移动显示数字--666

 实验现象

 实验代码

//结合上面的
//移动显示--666
void DsgShowMove()
{
	u8 i;
	while(1)
	{
		for(i =0;i<9;i++)
		{
			u16 k = 200;
			switch(i)
			{
				case 1:
					while(k)
					{
						WEI_PORT = wei_code[0];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[1];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[2];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
				
				case 2:
					while(k)
					{
						WEI_PORT = wei_code[0];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[1];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[7];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
					
				case 3:
					while(k)
					{
						WEI_PORT = wei_code[0];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[7];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[6];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
				
				case 4:
					while(k)
					{
						WEI_PORT = wei_code[7];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[6];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[5];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
					
				case 5:
					while(k)
					{
						WEI_PORT = wei_code[6];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[5];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[4];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
				
				case 6:
					while(k)
					{
						WEI_PORT = wei_code[5];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[4];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[3];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;

				case 7:
					while(k)
					{
						WEI_PORT = wei_code[4];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[3];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[2];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
				
				case 8:
					while(k)
					{
						WEI_PORT = wei_code[3];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[2];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						WEI_PORT = wei_code[1];	
						DUAN_PORT = duan_code[6];
						delay_10us(100);
						k--;
					}
				break;
			}
		}
	}
}	

数码管移动显示图形--正方形

实验现象

实验代码

//移动显示--正方形
void DsgShowMove1()
{
	u8 i;
	while(1)
	{
		for(i =0;i<9;i++)
		{
			u16 k = 200;
			switch(i)
			{
				case 1:
					while(k)
					{
						WEI_PORT = wei_code[0];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[1];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;
					
				case 2:
					while(k)
					{
						WEI_PORT = wei_code[1];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[2];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;	
			
				case 3:
					while(k)
					{
						WEI_PORT = wei_code[2];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[3];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;
					
				case 4:
					while(k)
					{
						WEI_PORT = wei_code[3];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[4];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;	

				case 5:
					while(k)
					{
						WEI_PORT = wei_code[5];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[6];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;
					
				case 6:
					while(k)
					{
						WEI_PORT = wei_code[7];	
						DUAN_PORT = 0x39;
						delay_10us(100);
						WEI_PORT = wei_code[0];	
						DUAN_PORT = 0x0f;
						delay_10us(100);
						k--;
					}
				break;	
					
			}
		}
	}		

}

结束语

新手正在加油学,有啥问题可以私聊

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值