⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 使用Microchip公司16F648实现4*6键盘程序. 在PICC环境下编译通过,包含RS485通讯. 代码完整,可供参考.
💻 C
字号:
#include  "pic16f62xa.h"
#include  "pic.h"
#include  "typedefine.h"
#include  "extern.h"

bank1    uchar aloneD[4];

//段码0-9端口驱动.
void  lightled0(void)
{
	RA4 = 1; 
	PORTB &= 0b00000110;
}

void  lightled1(void)
{
	RA4 = 1;
	PORTB &= 0b11100111;
	PORTB |= 0b11100001; 
}

void  lightled2(void)
{
	RA4 = 0;
	PORTB &= 0b10010110;
	PORTB |= 0b10010000;    
}

void lightled3(void)
{
	RA4 = 0;
	PORTB &= 0b11000110;
	PORTB |= 0b11000000;
}

void lightled4(void)
{
	RA4 = 0;
	PORTB &= 0b01100111;
	PORTB |= 0b01100001;
}

void lightled5(void)
{
	RA4 = 0;
	PORTB &= 0b01001110;
	PORTB |= 0b01001000;
}

void lightled6(void)
{
	RA4 = 0;
	PORTB &= 0b00001110;
	PORTB |= 0b00001000;
}

void lightled7(void)
{
	RA4 = 1;
	PORTB &= 0b11100110;
	PORTB |= 0b11100000;
}

void lightled8(void)
{
	RA4 = 0;
	PORTB &= 0b00000110;
}

void lightled9(void)
{
	RA4 = 0;
	PORTB &= 0b01000110;
	PORTB |= 0b01000000;
}


//数码管初始化.
void ledinit(void)
{
	TRISA &= 0b11100000;
	NOP();
	PORTA &= 0b11100000;
	TRISB &= 0b00000110;
	NOP();
	PORTB &= 0b00000110;     
	//连接
	pcled[0] =  lightled0; 
	pcled[1] =  lightled1; 
	pcled[2] =  lightled2; 
	pcled[3] =  lightled3; 
	pcled[4] =  lightled4; 
   	pcled[5] =  lightled5; 
	pcled[6] =  lightled6; 
	pcled[7] =  lightled7; 
	pcled[8] =  lightled8; 
	pcled[9] =  lightled9; 
}//void ledinit(void)

//10进制显示
void CalculateSub(uint Digit,uchar *p_aloneD)
{
 	*p_aloneD = (char)(Digit/1000);
	Digit -= *p_aloneD++ * 1000;
	
	*p_aloneD = (char)(Digit/100);
	Digit -= *p_aloneD++ * 100;
	
	*p_aloneD = (char)(Digit/10);
	Digit -= *p_aloneD++ * 10;

	*p_aloneD = (char)Digit;
	p_aloneD = 0;
}//void CalculateSub(int Digit,char *p_aloneD)

//数码管刷新 64ms once.  
void sub2(void)
{
	bank2	static uint ShowDigit;
	NOP();
	ShowDigit =	(uint)LedShowLink;	      //  0x4d2;// 
	CalculateSub(ShowDigit,aloneD);
	NOP();
}//void sub2(void)

//数码管位码控制
void subled(void)
{
 bank2	static char ledbitcou = 0b00000000;
//	static char coui ; //用作数组aloneD[]下标.
 	char bytebit=0,byteT=0;
	if(ledbitcou == 0)
	{
		bytebit = 0b00000001;
	}else if(ledbitcou == 1)
	{
		bytebit = 0b00000010;
	}else if(ledbitcou == 2)
	{
		bytebit = 0b00000100;
	}else if(ledbitcou == 3)
	{
		bytebit = 0b00001000;
	}

	PORTA &= 0b11110000;
	PORTA |= bytebit;

    byteT = aloneD[ledbitcou];
	(*pcled[byteT])();		 	//段码选择.
	if(++ledbitcou == 4) 
		ledbitcou = 0;
}//void subled(void)


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -