04-共阳数码管的动态显示

共阳数码管的动态显示

20231003194142

20231003194643

代码如下:

#include <REGX52.H>
void Display_Dynamic();
unsigned char month = 1;


void Delay_ms(unsigned int xms) {
	unsigned int i,j;
	for(i = 0;i<xms;i++) {
		for(j=0;j<299;j++);
	}

}
void Delay(unsigned char t) {
	while(t--) {
		// 此代替了中断,没有这一步会出问题
		Display_Dynamic();
	}
}
void _74HC138(unsigned char n) {
	switch(n) {
		case 4:  // LED使能
			P2 = (P2 &0x1f)|0x80;
			break;
		case 5:  // 蜂鸣器/继电器
			P2 = (P2 &0x1f)|0xa0;
			break;
		case 6:  // 数码管位选
			P2 = (P2 &0x1f)|0xc0;
			break;
		case 7:  // 数码管段选
			P2 = (P2 &0x1f)|0xe0;
			break;
		case 0:
			P2 = (P2 &0x1f)|0x00;
			break;
	
	}

}
void SystemInit(void) {
	_74HC138(5);
	P0 = 0x00;
	_74HC138(4);
	P0= 0xff;
}
void Nixie(unsigned char Location,Number) {
	unsigned int code num[11] ={
	 0xc0,   	  // 0    1100 0000  
	 0xf9,        // 1    1111 1001    abged  为0
	 0xa4,           // 2           1010 0100
	 0xb0,//3
	 0x99,//4
	 0x92,//5
	 0x82,//6
	 0xf8,//7
	 0x80,//8
	 0x90,//9
	 0xbf 
};
	

	switch(Location) {
		case 1: _74HC138(6); P0=0x01;break;
		case 2: _74HC138(6); P0=0x02;break;
		case 3: _74HC138(6); P0=0x04;break;
		case 4: _74HC138(6); P0=0x08;break;
		case 5: _74HC138(6); P0=0x10;break;
		case 6: _74HC138(6); P0=0x20;break;
		case 7: _74HC138(6); P0=0x40;break;
		case 8: _74HC138(6); P0=0x80;break;
	}
	_74HC138(7);
	P0 = num[Number];
	Delay_ms(5);
	P0 = 0xFF; 

}
// 数码显示函数
void Display_Dynamic() {
	Nixie(1,2);   // 2
	Delay_ms(2);
	Nixie(2,0);   // 0
	Delay_ms(2);
	Nixie(3,1);   // 1
	Delay_ms(2);
	Nixie(4,8);   // 8
	Delay_ms(2);
	Nixie(5,10);  // -      1011 1111
	Delay_ms(2);
	Nixie(6,10);  // -      1011 1111
	Delay_ms(2);
	Nixie(7,month/10);  // 十位
	Delay_ms(2);
	Nixie(8,month%10); //  个位
	Delay_ms(2);
}

void main() {
	unsigned char i,j;
	
	SystemInit(); 
	while(1)  {
	
		Display_Dynamic();
		month++;
		//Delay_ms(500);
		if(month > 12) {
			month = 1;
		}
		// 此为上述的延迟函数
		Delay(100);
	}

	
	
}
posted @ 2023-10-03 21:00  夏日清凉~  阅读(56)  评论(0编辑  收藏  举报