单片机数码管显示原理与实现方法详解

文章目录

  • 前言:
  • 数码管显示
  • 1.静态数码管显示
  • 2.静态数码管显示Plus
  • 3.动态数码管显示
  • 前言:

    本文章以B站江科大老师的视频而写,仅作为笔记,以便以后参考

    数码管显示

    1.静态数码管显示

    #include <REGX52.H>
    
    void main() {
    	//选中LED6(对应Y5)101
    //	P2_4 = 1;
    //	P2_3 = 0;
    //	P2_2 = 1;
    	
    	//选中LED5(对应Y4)100
    		P2_4 = 1;
    		P2_3 = 0;
    		P2_2 = 0;
    	//0111 1101(显示6)
    	P0 = 0X7D;
    	while(1) {
    	
    	}
    }
    

    实现了对应的数码管位置点亮对应的数字。

    2.静态数码管显示Plus

    #include <REGX52.H>
    
    //0-9段码
    unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x6F};
    
    void Nixie(unsigned char loc, num){
    	switch(loc)
    	{
    		case 1:
    			P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
    		case 2:
    			P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
    		case 3:
    			P2_4 = 1;P2_3 = 0;P2_2 = 1;break;		
    		case 4:
    			P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
    		case 5:
    			P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
    		case 6:
    			P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
    		case 7:
    			P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
    		case 8:
    			P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
    	}
    
    	P0 = NixieTable[num];
    }
    
    void main()
    {
    	Nixie(7,2);
    	while(1) {
    	
    	}
    }
    
    

    静态数码管显示进阶版,可以实现直接输入数码管位置和显示的数字(但只能显示一个数码管数字,显示多个需要动态数码管)

    3.动态数码管显示

    #include <REGX52.H>
    #include <INTRINS.H>
    //0-9段码
    unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x6F};
    
    void Delay(unsigned int xms)		
    {
    	unsigned char i, j;
    	while(xms--) {
    		_nop_();
    		_nop_();
    		_nop_();
    		i = 11;
    		j = 190;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    
    }
    
    
    void Nixie(unsigned char loc, num){
    	switch(loc)
    	{
    		case 1:
    			P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
    		case 2:
    			P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
    		case 3:
    			P2_4 = 1;P2_3 = 0;P2_2 = 1;break;		
    		case 4:
    			P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
    		case 5:
    			P2_4  = 0;P2_3 = 1;P2_2 = 1;break;
    		case 6:
    			P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
    		case 7:
    			P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
    		case 8:
    			P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
    	}
    
    	P0 = NixieTable[num];
    	//防止错乱,清段选
    	Delay(1);
    	P0 = 0X00;
    }
    
    void main()
    {
    
    	while(1) {
    			Nixie(1,1);
    			Delay(20);
    			Nixie(2,2);
    			Delay(20);
    			Nixie(3,3);
    			Delay(20);
    			Nixie(4,4);
    
    	}
    }
    
    

    可以实现显示多个数码管

    加入记忆:

    0001 1000 & 0000 1010    ->    0000 1000  //与运算
    
    0001 1000 | 0000 1010    ->    0011 1010   //或运算
    
    0001 1000 ^ 0000 1010    ->    0011 0010   //与或运算
    
    
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » 单片机数码管显示原理与实现方法详解

    发表评论