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

简介: /********************************************************************************** *  标题:                  试验数码管上显示数字( 单片机直接实现位选...
/**********************************************************************************
*  标题:                  试验数码管上显示数字( 单片机直接实现位选 共阴极)        *
*                                                                                  *
*  连接方法: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--);
}
相关文章
|
程序员 C++
智能指针避坑指南——几种常见的错误用法
智能指针避坑指南——几种常见的错误用法
|
SQL 存储 数据库
SqlAlchemy 2.0 中文文档(一)(3)
SqlAlchemy 2.0 中文文档(一)
415 1
|
存储 SQL 缓存
优化ClickHouse查询性能:最佳实践与调优技巧
【10月更文挑战第26天】在大数据分析领域,ClickHouse 以其卓越的查询性能和高效的列式存储机制受到了广泛的关注。作为一名已经有一定 ClickHouse 使用经验的开发者,我深知在实际应用中,合理的表设计、索引优化以及查询优化对于提升 ClickHouse 性能的重要性。本文将结合我的实践经验,分享一些有效的优化策略。
1741 3
|
Kubernetes 应用服务中间件 调度
k8s的Pod常见的几种调度形式
k8s的Pod常见的几种调度形式
286 0
|
存储 负载均衡 算法
SpringBoot集成Nacos-服务注册篇
SpringBoot集成Nacos-服务注册篇
2102 0
|
机器学习/深度学习 人工智能 自然语言处理
机器学习系列1 机器学习历史
 人工智能(AI)作为计算机领域与机器学习的历史交叉点,随着支撑机器学习的算法和算力的增长,AI的发展也得到进步。值得关注的是,虽然这些研究从1950年代已经开始出现,但重要的算法:统计,数学,计算等相关技术理论的发现远早于这个时代。事实上,人们已经思考这些问题数百年 。本文将讨论“思考机器”概念的历史知识基础。
536 0
|
Android开发 UED 开发者
Android Activity启动模式详解
Android Activity启动模式详解
740 0
|
JavaScript 前端开发
JavaScript中的var变量详解:定义、提升与注意事项
JavaScript中的var变量详解:定义、提升与注意事项
546 2
|
算法 Java
【JVM】survivor区的解释
【JVM】survivor区的解释
336 0
|
监控 安全 网络协议
什么是udp攻击,为什么udp攻击这难防御
UDP是无连接的传输协议,常用于需要速度但不要求可靠性的场景,如DNS查询、流媒体等。UDP Flood是DDoS攻击的一种,通过大量伪造的UDP报文消耗目标带宽,可能导致网络瘫痪。防御UDP Flood包括限流、静态指纹过滤和动态指纹学习。应用加速技术提供抗DDoS、CC防护、环境安全检测等功能,通过隐藏真实IP、加密传输和智能调度增强安全性。

热门文章

最新文章