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--);
    }
    感谢来访,共同学习!
  • 相关阅读:
    WEB服务-Nginx之10-动静分离
    第10课 文件指针及目录的创建与删除
    c++ 中常用类型转换
    编译c++文件时报错:在...中已定义,例如:已经在 .obj 中定义
    No converter found for return value of type: class java.util.ArrayList
    Unable to ping server at localhost:1099
    Failed building wheel for twisted
    第六天-缺陷和缺陷报告
    第五天-黑盒测试用例设计方法(二)
    第四天-测试用例和设计方法(一)
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3145175.html
Copyright © 2011-2022 走看看