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

简介: 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函数里面字符串数组内容就能修改数码管显示的东西了

开发板电路图

数码管部分:

138 译码器部分:

 

效果图:

 

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

相关文章
键盘数字区域不可用解决办法
目前归纳了两种场景以及对应的处理办法
906 0
键盘数字区域不可用解决办法
|
6月前
LabVIEW如何获取波形图上游标所在位置的数值
LabVIEW如何获取波形图上游标所在位置的数值
105 0
|
6月前
|
芯片 数据格式
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
|
6月前
|
C语言
静态数码管显示+动态数码管显示——“51单片机”
静态数码管显示+动态数码管显示——“51单片机”
|
6月前
如何在屏幕的任意位置拖拽控制图片的移动?
如何在屏幕的任意位置拖拽控制图片的移动?
115 1
|
6月前
|
开发工具 开发者
在屏幕的任意位置拖拽,控制角色移动
在屏幕的任意位置拖拽,控制角色移动
65 0
led点阵---显示数字或汉字(内含代码+注释+图片)
led点阵---显示数字或汉字(内含代码+注释+图片)
703 0
led点阵---显示数字或汉字(内含代码+注释+图片)
|
存储
51单片机--动态数码管显示
51单片机--动态数码管显示
256 0
labview布尔型数据开关控制指示灯比较数值颜色变化条件判断
labview布尔型数据开关控制指示灯比较数值颜色变化条件判断
666 0
|
开发工具 开发者
在屏幕的任意位置拖拽,控制精灵移动
在屏幕的任意位置按住拖拽,然后控制屏幕中指定的精灵移动,这个前几天@stack发过一个示例,刚好最近又有几位同学来问,说是看不懂其中的逻辑。索性就在这里详细的讲一下,原理很简单,理解透了原理,其中的积木逻辑也就很容易理解了。
115 0