数码管流动显示(自己的单片机)

/**********************************************************************************
*  标题:                  试验数码管上显示数字( 单片机直接实现位选 共阴极)        *
*                                                                                  *
*  连接方法:P0与J12 用8PIN排线连接     P1与JP16 用排线连接                            *
***********************************************************************************
*                                                                                      *
* 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管 *
***********************************************************************************/

#include <reg51.h> 

void delay(unsigned int i);      //函数声名
char DelayCNT;//定义变量
 
//此表为 LED 的字模, 共阴数码管 0-9  - 
unsigned char code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //段码控制

//此表为8个数码管位选控制, 共阴数码管 1-8个  - 
unsigned char code   dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //位选控制   查表的方法控制

/************主函数**********************/ 
main()
{  
   unsigned int i,LedNumVal=1 ;       //变量定义
   unsigned int LedOut[10];           //变量定义
   
   DelayCNT=0;

  while(1)
  {     
     if(++DelayCNT>=20)      //控制数字变化速度
     {
         DelayCNT=0;          //20个扫描周期清零一次
        ++LedNumVal;      //每隔20个扫描周期加一次
     }

     LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
     LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
     LedOut[2]=Disp_Tab[LedNumVal%100/10];
     LedOut[3]=Disp_Tab[LedNumVal%10];
     
     LedOut[4]=Disp_Tab[LedNumVal%10000/1000];       //千位
     LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;  //百位带小数点
     LedOut[6]=Disp_Tab[LedNumVal%100/10];           //十位
     LedOut[7]=Disp_Tab[LedNumVal%10];             //个位     

   
    
     for( i=0; i<8; i++) 
     {     
      P0 = LedOut[i];
      P1 = dispbit[i];   //使用查表法进行位选 
                  
/*      switch(i)               //使用switch 语句控制位选       
         {        
            case 0:P1 = 0x7F;  break;         
            case 1:P1 = 0xbF;  break;                 
            case 2:P1 = 0xdF;  break; 
            case 3:P1 = 0xeF;  break; 
            case 4:P1 = 0xf7;  break;
            case 5:P1 = 0xfb;  break;
            case 6:P1 = 0xfd;  break;
            case 7:P1 = 0xfe;  break;
          
         }       */
         
        delay(150);         //扫描间隔时间      太长会数码管会有闪烁感
      }
     
  }   
}    

/*******************延时函数**********************************************/
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}

时间: 2024-08-29 17:19:12

数码管流动显示(自己的单片机)的相关文章

按键盘数码管流动显示实验

要求:按下键盘,六个数码管流动显示按下的值. 连线:将片选CS0接到key_LED_CS上 #include  <reg52.h> #define   LEDLen   6 xdata unsigned char OUTBIT _at_ 0x8002;   // 位控制口 xdata unsigned char OUTSEG _at_ 0x8004;   // 段控制口 xdata unsigned char IN     _at_ 0x8001;   // 键盘读入口 unsigned ch

ArcGIS API for Silverlight 地图元素点闪烁,线流动显示的处理方式

原文:ArcGIS API for Silverlight 地图元素点闪烁,线流动显示的处理方式 <Grid x:Name="LayoutRoot" Background="White"> <!--地图资源样式模版--> <Grid.Resources> <!--预警闪烁标记符号--> <esri:MarkerSymbol x:Name="DefaultMarkerSymbol"> &l

Delphi实现LED数码管仿真显示程序

在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色.使用Delphi 程序实现LED数码管的仿真显示非常容易,具体步骤如下: 1.启动Delphi 4.0.在"Tools"工具菜单上选择Delphi的图象编辑器"Image Editor",建立一个新的位图,并设定位图的尺寸,宽为:48,高为:64.设定位图的底色为紫红色,前景色为红色.在位图上选择适当宽度的线条画出一个正方的8字,并将方型8字的各个拐

用PS制作遮罩效果之流动显示的文字

效果 制作步骤         注:更多精彩教程请关注三联photoshop教程栏目,三联PS群:182958314欢迎你的加入 分类: PS文字教程

按键数码管显示实验

要求:能够实现本单片机按下键盘,能够在数码管上显示键盘值. 连线:将片选CS0链接到KEY/LED CS. #define LEDLen 6 xdata unsigned char OUTBIT _at_ 0x8002;   // 位控制口 xdata unsigned char OUTSEG _at_ 0x8004;   // 段控制口 xdata unsigned char IN     _at_ 0x8001;   // 键盘读入口 unsigned char LEDBuf[LEDLen]

语言-用C51编写单片机程序实现10以内的加减乘除的简易计算器

问题描述 用C51编写单片机程序实现10以内的加减乘除的简易计算器 5C 运行80C51单片机C51语言编写程序,在51实验小系统上实现"十以内的简易计算器",即:定义51实验小系统上的按键分别为0-9数字键.'+'."-""*""/"'='.退格等功能键:识别相关按键,按照十以内加法的正确逻辑在数码管上显示按键对应的信息,并完成加法运算,在数码管上显示加法结果.实验内容两个层次--层次一:加法的结果在十以内:层次二:两个加数

硬件-怎样基于80c51单片机设计一个数字钟?

问题描述 怎样基于80c51单片机设计一个数字钟? 在6位数码管上显示当前时间.显示格式"时时分分秒秒": 利用按键对时间的时.分.秒进行设置: 利用按键对闹铃进行设置,并显示闹玲时间.当闹玲时间到蜂鸣器发出声响,按停止键使可使闹声停止. 实现秒表功能(最小单位为百分之一秒),具有开始.暂停.清零功能. 解决方案 从你这个描述懒看,功能都有了,你搭建个小电路就可以试一下了 . 有几个基础的一定要实现,百分之一秒的定时器,秒定时器. 有了这两个,把数码管的显示搞定,基本上就有个雏形了,接

c语言-关于C语言编译C51单片机程序的一点疑问

问题描述 关于C语言编译C51单片机程序的一点疑问 1.为什么两段不相干的代码会互相影响 在主程序里有一段点亮发光二极管的代码,和一段计数器计数并在数码管上显示的代码.同时工作时,二极管正常点亮,数码管几秒才点亮一回,而且十位显示是闪烁一下就不显示了2.数码管显示时,位选和段选顺序不能改变吗?按照书上的方法是先段选再位选,但是点亮的数码管是本来不应该点亮的,段选和位选顺序换了之后就能正常显示了 解决方案 问题1)你所谓的同时工作是指led亮的同时数码管也在显示,是这样的吗?单片机跑的程序都是单线

单片机蓝牙主从通信文题

问题描述 单片机蓝牙主从通信文题 一个单片机rxd txd接蓝牙模块上的txd rxd 另一个单片机也一样, 实现从一个单片机到另一个单片机通过蓝牙传输,在另一个单片机的数码管上显示小白一个 求大牛 解决,最好有程序 讲原理也可 谢谢 解决方案 BT 如果使用的是 Module,可以采用 BT 模块的 SPP 协议完成数据的传输