共陰數碼管的種種(一)

一、共陰數碼管數字循環

#include <reg52.h>
sbit dula = P2^2;
sbit wela = P2^3;


unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
			  			    0x66,0x6d,0x7d,0x07,
			    			0x7f,0x6f,0x77,0x7c,
		           		    0x39,0x5e,0x79,0x71,
			                0x00
						   };//共陰數碼管0-f,0x00不顯示
delay(int n)
{
	while(n--);
}
main()
{
	unsigned char i;

        wela=1;		
        P0=0x00;
        wela=0;
	while(1)
	{   

		for(i = 0;i<16;i++)
		{
			dula=1;
			P0=table[i];
			dula=0;
			delay(50000);
			
		}
	}
	
}

二、共陰數碼管

#include <reg52.h>
sbit wela=P2^3;
sbit dula=P2^2;
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
			      			   0xef,0xdf,0xbf,0x7f	
			                  };//共陰數碼管位碼,單個,掃描

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
			                0x66,0x6d,0x7d,0x07,
			                0x7f,0x6f,0x77,0x7c,
		                    0x39,0x5e,0x79,0x71,
			                0x00  
							};
void delay(unsigned int n)
{
	while(n--);

}

void main()
{
	unsigned char i;
	while(1)
	{
        for(i=0;i<8;i++)
        {
			wela=1;
			P0=we_table[i];
			wela=0;
			
			dula=1;			
			P0=table[i];
			dula=0;
			delay(250);
		}
	}
}

三、共陰數碼管累加器

#include <reg52.h>
sbit dula=P2^2;//段鎖存;
sbit wela=P2^3;//位鎖存;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
			   				0x66,0x6d,0x7d,0x07,
			    			0x7f,0x6f
							};//共陰數碼管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
			     			   0xef,0xdf,0xbf,0x7f	
			                  };//共陰數碼管位碼,單個,掃描
unsigned char temp[5];

void delay(int n)
{
	while(n--);
}

void main()
{
	unsigned int j;
	unsigned char i;
	while(1)
	{	
		//j++;//j outside calculate speed will be lower
		temp[0]=j/10000;//got each place
		temp[1]=j/1000%10;
		temp[2]=j/100%10;
		temp[3]=j/10%10;
		temp[4]=j%10;
		for(i=0;i<5;i++)//scan 
		{
			j++;//will be faster
			wela=1;
			P0=we_table[i];//light sigle led
			wela=0;

			dula=1;
			P0=table[temp[i]];//set number
			dula=0;
			delay(500);
		}
	}	
}

四、共陰數碼管的消隱

#include <reg52.h>
sbit dula=P2^2;//段鎖存;
sbit wela=P2^3;//位鎖存;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
			   				0x66,0x6d,0x7d,0x07,
			    			0x7f,0x6f
							};//共陰數碼管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
			     			   0xef,0xdf,0xbf,0x7f	
			                  };//共陰數碼管位碼,單個,掃描
unsigned char temp[5];

void delay(int n)
{
	while(n--);
}

void main()
{
	unsigned int j;
	unsigned char i;
	while(1)
	{	
		j++;//j outside calculate speed will be lower
		if(j<10000)
            temp[0]=0;
        else
            temp[0]=table[j/10000];//got each place
		if(j<1000)
            temp[1]=0;
		else
        	temp[1]=table[j/1000%10];
		if(j<100)
			temp[2]=0;
		else
			temp[2]=table[j/100%10];
		if(j<10)
			temp[3]=0;
		else
		    temp[3]=table[j/10%10];

		temp[4]=table[j%10];
		for(i=0;i<5;i++)//scan 
		{
			//j++;//will be faster
			wela=1;
			P0=we_table[i];//light sigle led
			wela=0;

			dula=1;
			P0=temp[i];//set number
			dula=0;
			delay(800);
		}
	}	
}

五,共陰數碼管左移

#include <reg52.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
						    0x66,0x6d,0x7d,0x07,
						    0x7f,0x6f
			  			   };//共陰數碼管0-9
unsigned char code we_table[]={0xfe,0xfd,0xfb,0xf7,
			      			   0xef,0xdf,0xbf,0x7f	
			      			   };//共陰數碼管位碼,單個,掃描;位碼
unsigned int temp[10];
void delay(int n);
void display(int loca,int num);

sbit wela = P2^3;//位鎖存
sbit dula = P2^2;//段鎖存



main()
{
	int k=0,i=0,s,j=0;
	while(1)
	{
		j++;
		if(j==10)
		{
			j=0;
			if(0==k)
			{
				for(s=0;s<10;s++)
				{
					temp[s]=0;
				}
			}
			temp[8-i]=table[k];
			temp[8+1-i]=0;
			if(i==(8-k))
			{
				i=0;
				k++;
				if(8==k)
				{
					k=0;
				}
			}
			i++;
		}
		display(0,8);
	}	
}
void delay(int n)
{
	while(n--);
}

void display(int loca,int num)//loca代表從第幾位開始顯示,num表示需要顯示幾位
{
	unsigned int i;
	for(i=0;i<num;i++)	
	{	
		P0=0;
		dula=1;
		dula=0;

		P0=we_table[i+loca];
        wela=1;
		wela=0;
		
		P0=temp[i];
		dula=1;
		dula=0;

		delay(200);
		}
}


發佈了47 篇原創文章 · 獲贊 29 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章