1. 程式人生 > >基於51微控制器開發板的應用(數碼管續1)

基於51微控制器開發板的應用(數碼管續1)

       顯示0-99

    用8位共陰數碼可以通過動態掃描顯示0~99,考慮十位和個位,需要用到陣列來存放。其中的重要程式碼是display()函式,firstbit表示從第n個數開始顯示,num表示顯示的個數,所以若是改變陣列tempdata的陣列元素,則可以顯示更多位的數字,並且8位數碼管可以任意選擇數碼管。主函式中的j++,j==500,是為了在測試硬體時增加迴圈的次數而達到顯示時更加清晰。

#include<reg51.h>
#define DataPort P0
sbit Seg_latch=P2^2;
sbit Bit_latch=P2^3;
unsigned char code Seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Bit_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char tempdata[2];     //兩位數

void display(unsigned char firstbit,unsigned char num);
void delay(unsigned int i)
{
   	while(i--);
}

void main(void)
{
	unsigned int j,num;
	num=0;
	while(1)
	{
		j++;
		if(j==500)
		{
			j=0;
			num++;
			if(num==100)
			{
				num=0;
			}
		}
		tempdata[0]=num/10;      //十位
		tempdata[1]=num%10;      //個位
		display(0,2);
	}
}

void display(unsigned char firstbit,unsigned char num)			   //firstbit從第n個數開始顯示,num顯示的個數
{
	unsigned char i,j;
	while(1)
	{
		for(i=0; i<num; i++)
		{
			DataPort=0x00;				
			Seg_latch=1;
			Seg_latch=0;
			
			DataPort=Bit_code[i+firstbit];		 //位碼
			Bit_latch=1;
			Bit_latch=0;
												 
			j=tempdata[i];						 //段碼
			DataPort=Seg_code[j];		  
			Seg_latch=1;
			Seg_latch=0;

			delay(200);	
		}		 

	}
}