zoukankan      html  css  js  c++  java
  • C51 动态数码管 个人笔记

    8段led管构成一个数字。
    开发板上共有8个数字。
    每个数字有一个使能端(段选引脚)
    每个数字的位选端(选择8段led管哪些亮,即构成什么图案)并联在一起
    轮流点亮不同数字,速度很快,视觉暂留,从而形成8个数字同时亮的效果

    #include <reg51.h>
    typedef unsigned int u16;		 
    typedef unsigned char u8;
    
    #define DIG P0
    sbit LSA = P2^2;
    sbit LSB = P2^3;
    sbit LSC = P2^4;
    
    
    //共阴的表
    u8 code ledSegment  [9] = { 0x3f , 0x06,   0x5b,   0x4f,   0x66,   0x6d, 0x7d,   0x07,  0xe6
                                };
    
    void delay(u16 i)
    {
        while(i--);
    }
    
    void DigDisplay()
    {
    	u8 i;
    	
    	for(i=0;i<8;i++)
    	{
    	//段选,使能8个数码管中的某一个
    	//38译码器输出端和动态数码管段选端短接
    		switch(i)
    		{
    			case (0):		//段选选中第一个动态数码管,(共阴,J16^1是公共阴极,输出低电平)
    				LSA = 0;	 //J15(38译码器输出)和J16(数码管输入)用短接片短接
    				LSB = 0;	 //故J15^1即38译码器输出端Y0与J16^1相同,为低电平
    				LSC = 0;	//因此38译码器输入端为000(由真值表知A0是低位,A2是高位)
    				break;
    			case (1):	LSC = 0;LSB = 0;LSA = 1;break;
    			case (2):	LSC = 0;LSB = 1;LSA = 0;break;
    			case (3):	LSC = 0;LSB = 1;LSA = 1;break;
    			case (4):	LSC = 1;LSB = 0;LSA = 0;break;
    			case (5):	LSC = 1;LSB = 0;LSA = 1;break;
    			case (6):	LSC = 1;LSB = 1;LSA = 0;break;
    			case (7):	LSC = 1;LSB = 1;LSA = 1;break;
    		}
    	//--位选,选择被使能的数码管中,哪几段点亮,(显示什么数字)
    	//P0端口控制动态数码管的8个位选引脚J12
    		DIG = ledSegment[i];  //	 共阴,高电平有效
    		delay(200); //短暂延时1ms	(去掉或改变时间长度可能会变亮变暗)
    		DIG = 0x00;
    	}	 
    }
    void main(void)
    {  
        while(1)
        {
            DigDisplay();  
        }
    }
    
    
  • 相关阅读:
    HDU 2602
    ZOJ 1074 最大子矩阵和
    POJ 3903
    最大子段和
    HDU 1052
    CodeForces 18C
    CodeForces 546B-Soldier and Badges
    UVA 11462-Age sort
    Codeforces Round #326 (Div. 2)-Duff in Love
    Codeforces Round #327 (Div. 2)-Wizards' Duel
  • 原文地址:https://www.cnblogs.com/YuQiao0303/p/9936473.html
Copyright © 2011-2022 走看看