zoukankan      html  css  js  c++  java
  • 数码管流动显示(自己的单片机)

    /**********************************************************************************
    *  标题:                  试验数码管上显示数字( 单片机直接实现位选 共阴极)        *
    *                                                                                  *
    *  连接方法: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--);
    }
    感谢来访,共同学习!
  • 相关阅读:
    Callable和Future 多线程
    【spring-boot】spring-boot 整合 ehcache 实现缓存机制
    java 设计模式http://www.runoob.com/design-pattern/design-pattern-tutorial.html
    DDD领域驱动设计(例子)
    js要怎么接收后端传的excel文件流?
    构建最小JDK Docker镜像 或者直接使用镜像:frolvlad/alpine-oraclejre8:slim
    JVM知识点总结
    DDD随笔-Axon
    HttpServletRequest  通用的post 请求
    List转数组
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3145175.html
Copyright © 2011-2022 走看看