51开发板数码管:固定显示\闪烁显示\走灯显示“--8051--“,字符可以任意更改,较为灵活

要在51单片机开发板上面实现的效果:

1、数码管固定显示"--8051--"约5s时间。

2、闪烁显示"--8051--"5次。

3、向左移动走字显示"--8051--"3遍。

4、重复执行1~3。

实现代码:(c语言)

#include <REGX51.H>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;

uchar count=0;      //定时器计数
uint flag=0;        //开始为 第一小题

void Timer0Init(){		//50毫秒@12.000MHz

	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x4C;		//设置定时初值
	TF0 = 0;		    //清除TF0标志
	TR0 = 1;		    //定时器0开始计时
    ET0=1;              //打开小开关
	EA=1;               //打开总开关   
}

void Delay(unsigned int ms)	{
/*延时函数    参数:延时的毫秒数*/
	while(ms--){
		unsigned char i, j;
		_nop_();
		i = 2;
		j = 199;
		do{	
           while (--j);
		} while (--i);
	}
}

void Display(int position,char value){
/*显示模块   参数:字符串*/
        switch (position){//位选
          case 8:P2_4=0;P2_3=0;P2_2=0;break;//第一位 
          case 7:P2_4=0;P2_3=0;P2_2=1;break;//第二位
          case 6:P2_4=0;P2_3=1;P2_2=0;break;//第三位
          case 5:P2_4=0;P2_3=1;P2_2=1;break;//第四位
          case 4:P2_4=1;P2_3=0;P2_2=0;break;//第五位
          case 3:P2_4=1;P2_3=0;P2_2=1;break;//第六位
          case 2:P2_4=1;P2_3=1;P2_2=0;break;//第七位
          case 1:P2_4=1;P2_3=1;P2_2=1;break;//第八位
        }

        switch(value){//段选,可以用数组来代替这里的选择
          case '0': P0=0x3F; break;	//数值0
          case '1': P0=0x06; break;	//数值1
          case '2': P0=0x5B; break;	//数值2
          case '3': P0=0x4F; break;	//数值3
          case '4': P0=0x66; break;	//数值4
          case '5': P0=0x6D; break;	//数值5
          case '6': P0=0x7D; break;	//数值6
          case '7': P0=0x07; break;	//数值7
          case '8': P0=0x7F; break;	//数值8
          case '9': P0=0x6F; break;	//数值9
          case'a': case 'A': P0=0x77; break;	//数值a  两个case兼容大小写
          case'b': case 'B': P0=0x7C; break;	//数值b
          case'c': case 'C': P0=0x39; break;	//数值c
          case'd': case 'D': P0=0x5E; break;	//数值d
          case'e': case 'E': P0=0x79; break;	//数值e
          case'f': case 'F': P0=0x71; break;	//数值f
          case '-': P0=0x40; break;	//数值-	
          case '.': P0=0x80; break;	//数值.	
          case ' ': P0=0x00; break;	//无显示	
        }

        Delay(1);P0=0x00;//消影    		
}

void main(){

    char display[8]="--8051--"; 
    int i,j=5,k=3,b;
    int num=3;
    Timer0Init();//初始化,并开启定时器
    for(num=0;num<3;num++){
        TR0 = 1;//启动定时器
        while(flag<5){//显示5s
            for(i=1;i<=8;i++){
              Display(i,display[i-1]);
            }
        }
        TR0 = 0;//关闭定时器
        count=0,flag=0;//清空计数,不影响下次循环的显示时间
        
       for(j=0;j<5;j++){    //闪烁5次
         for(b=1;b<50;b++)
             for(i=1;i<=8;i++)
                Display(i,display[i-1]);
        for(b=1;b<50;b++)
             for(i=1;i<=8;i++)
                Display(i,' ');
      }

         for(k=0;k<3;k++){  //走字显示3遍
           for(i=1;i<=8;i++)
            for(b=1;b<500;b++)
                Display(i,display[i-1]);
        }   
    }

    while(1);//让程序停在这里
}

//定时器中断函数
void interrupt_T0()interrupt 1
{
    TL0 = 0x00;		//重新设置定时初值
	TH0 = 0x4C;		//重新设置定时初值
    count++;
    if(count==20){//1秒时间到了
        count=0;     
        flag++; 
    }  
}

 只要修改main函数里面字符串数组内容就能修改数码管显示的东西了

开发板电路图

数码管部分:

扫描二维码关注公众号,回复: 15557159 查看本文章

138 译码器部分:

138 译码器连接图

效果图:

 汇编语言的代码有空会补上~~~~~~

猜你喜欢

转载自blog.csdn.net/yvge669/article/details/127524576