51单片机数码管表白

51单片机七段数码管表白

文章目录

  • 51单片机七段数码管表白
    • 原理
    • 实验环境
    • 仿真图
    • 实现代码
    • 成果图

原理


51单片机数码管表白_第1张图片

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

实验环境


实验软件: Keil5 + Proteus7

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

51单片机数码管表白_第2张图片

仿真图


实现代码


#include 
#include 
#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()中的参数后重新编译后即可得到不同结果

51单片机数码管表白_第3张图片

51单片机数码管表白_第4张图片

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

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

你可能感兴趣的:(51单片机,单片机,51单片机,嵌入式硬件,美女,娱乐)