51单片机数码管表白

51单片机七段数码管表白

原理


在这里插入图片描述

详细原理可以看这篇博客:
https://blog.csdn.net/hpu_zhn/article/details/83041306

实验环境


实验软件: Keil5 + Proteus7

实验元件(主要):
AT89C51 * 1,
7SEG-MPX8-CC-BLUE * 1,
RESPACK-8 * 1

image-20220326191523054

仿真图


image-20220326191908621

实现代码


#include <reg51.h>
#include <intrins.h>
#define LBIT P0     //位型接P0
#define LNUM P2	    //字型接P2

//定义数组存在LED的点阵码
unsigned char code ledTab[]={
	0x3F, 	/*0*/
	0x06,   /*1*/
	0x5B,	/*2*/
	0x4F,	/*3*/
	0x66,	/*4*/	
	0x6D,	/*5*/
	0x7D,	/*6*/
	0x07,	/*7*/
	0x7F,	/*8*/
	0x6F,	/*9*/
	0x40, 	/*-*/
	0x0f, 	/*I*/
	0x38, 	/*L*/
	0x5c, 	/*O*/
	0x1c, 	/*V*/
	0x79, 	/*E*/
	0x6e, 	/*Y*/
	0x5c, 	/*O*/
	0x3e, 	/*U*/
};

//存放明显位对应的码对应1~8位
unsigned char code tabIndex[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
unsigned char Num[8]={0}; //存放显示的数据
unsigned char Num0[8]={0x00,0x02,0x05,0x0A,0x04,0x01,0x03,0x01};//"4131-025"
unsigned char Num1[8]={0x12,0x11,0x10,0X0F,0x0E,0x0D,0x0C,0x0B};//"UOYEVOLI"

/***********************************	
函数名称:Delay_us
函数功能:延时us
输入参数:要延时的微妙数
输出参数:无
***********************************/
void Delay_us(unsigned int time)
{
while(time--);
}	  

/********************************************************************
函数名称: dynamicLed
函数功能: 实现LED的循环动态显示
输入参数: Counter表示要点亮的LED的个数,取值1~8
         Light 灯的亮度的控制,数值越大灯越亮,取值范围0~255
输出参数:无
*********************************************************************/	   
void dynamicLed(unsigned char Counter,unsigned char Ligh)
{  unsigned char i;
  for(i=0;i<Counter;i++)
 {
   //实现单个LED灯的点亮
   LBIT=tabIndex[i%8];    
   LNUM=ledTab[Num[i]%20];
	 Delay_us(Ligh);//实现灯亮度的调整
	 LNUM=0x00; 
 }
}

/********************************************************************
函数名称: alterDisplay
函数功能: 更换显示数据
输入参数: alter_Flag为0显示Num[0],为1显示Num[1]
输出参数:无
*********************************************************************/	
void alterDisplay(bit alter_Flag)
{
  unsigned char i;
  if(alter_Flag==1)
  {
    for(i=0;i<8;i++)
	 Num[i]=Num1[i];
  }
  else
  {
    for(i=0;i<8;i++)
	 Num[i]=Num0[i];
  }
}

/********主函数*********/
void main(void)
{
while(1)
 {
  alterDisplay(1); //输入0为520-1314,输入1为ILoveYou
  dynamicLed(8,100);  
 }
}

成果图


修改alterDisplay()中的参数后重新编译后即可得到不同结果

image-20220326193537593

image-20220326193502287

如果不想搞自己拉仿真图,也可以直接用我这个现成的,祝大家装逼成功💘

链接:https://pan.baidu.com/s/1gnaec7NCR-PIvlWPm5wTkg?pwd=qh4s
提取码:qh4s

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.T.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值