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

📄 复件 m62429.c

📁 m62429.rar驱动程序,已经通过测试,可以直接使用
💻 C
字号:

****************************************************************
*/
#include <intrins.h> 
#include "type.h"
#include "m62429.h"
#include "gpio.h"

extern GPIO volatile xdata *gGpio;
extern VOID
WaitUs(
	ULONG					Us
	);

#define	REG_M62429_PORT_OUT		gGpio->PortB.rGPIO_OUT
#define	CTRL_M62429_PORT		gGpio->PortB.rGPIO_OE

#define MASK_M62429_DATA		0x40	
#define	MASK_M62429_CLK			0x80
extern unsigned char gVolume;

void m62429_send_data(unsigned char att1, unsigned char att2)
{
	unsigned char temp;
	unsigned char i;

	//get volume value
	temp = 0x80;
	temp += att1;
	temp += (att2 << 5);

	//init port
//	SET_REG(CTRL_M62429_PORT, MASK_M62429_CLK | MASK_M62429_DATA);
//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK | MASK_M62429_DATA);
    gGpio->PortB.rGPIO_OE |= MASK_M62429_CLK;
    gGpio->PortB.rGPIO_OE |= MASK_M62429_DATA;
    gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK);//CLK = 0;
	_nop_();_nop_();_nop_();_nop_();
   // _nop_();_nop_();_nop_();_nop_();
	gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA);//DAT = 0;
	_nop_();_nop_();_nop_();_nop_();
 //  _nop_();_nop_();_nop_();_nop_();
	//send D0 and D1
	
//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
    gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; //DAT = 1;
	_nop_();_nop_();_nop_();_nop_();
 //   _nop_();_nop_();_nop_();_nop_();
//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
    gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
	_nop_();_nop_();_nop_();_nop_();
 //   _nop_();_nop_();_nop_();_nop_();
//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
    gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA);//DAT = 0;
	_nop_();_nop_();_nop_();_nop_();
 //   _nop_();_nop_();_nop_();_nop_();
// 	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
	gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
	_nop_();_nop_();_nop_();_nop_();
 //   _nop_();_nop_();_nop_();_nop_();

//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
	gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
	_nop_();_nop_();_nop_();_nop_();
//    _nop_();_nop_();_nop_();_nop_();
//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
    gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
	_nop_();_nop_();_nop_();_nop_();
 //  _nop_();_nop_();_nop_();_nop_();
//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
    gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
	_nop_();_nop_();_nop_();_nop_();
//    _nop_();_nop_();_nop_();_nop_();
//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
	gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); //    CLK = 0;
	_nop_();_nop_();_nop_();_nop_();
 //   _nop_();_nop_();_nop_();_nop_();


	//send D2 ~ D9
	for (i = 0; i < 8; ++i)
	{
		if (temp & 0x01)
		{
		//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
		        gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; // DAT = 1;
           	_nop_();_nop_();_nop_();_nop_();
               // _nop_();_nop_();_nop_();_nop_();
		}
		else
		{
		//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
		      gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); // DAT = 0;
	         _nop_();_nop_();_nop_();_nop_();
             // _nop_();_nop_();_nop_();_nop_();
		}
		
	//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
         gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //	     CLK = 1;
	     _nop_();_nop_();_nop_();_nop_();
        // _nop_();_nop_();_nop_();_nop_();
	//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
	     gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_DATA); //DAT = 0;
      	_nop_();_nop_();_nop_();_nop_();
        //_nop_();_nop_();_nop_();_nop_();
	//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
         gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); //   CLK = 0;
     	_nop_();_nop_();_nop_();_nop_();
      //  _nop_();_nop_();_nop_();_nop_();

		temp >>= 1;
	}

	//send D10
	
	
//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_DATA);
     gGpio->PortB.rGPIO_OUT |= MASK_M62429_DATA; // DAT = 1;
    _nop_();_nop_();_nop_();_nop_();
    // _nop_();_nop_();_nop_();_nop_();
//	SET_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
    gGpio->PortB.rGPIO_OUT |= MASK_M62429_CLK; //CLK = 1;
	_nop_();_nop_();_nop_();_nop_();
   // _nop_();_nop_();_nop_();_nop_();
//	CLEAR_REG(REG_M62429_PORT_OUT, MASK_M62429_CLK);
     gGpio->PortB.rGPIO_OUT &= (~MASK_M62429_CLK); // CLK = 0;
     _nop_();_nop_();_nop_();_nop_();
   // _nop_();_nop_();_nop_();_nop_();
}
void SysVolumeAdd(void)
{
	unsigned char 	temp;
	temp = gVolume;
	
	//max volume
	if ((temp & 0x7f) == 0x75)
	{
       	m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
		return;
	}
	else
	{
		if ((temp & 0x15) == 0x15)
		{
			temp += 0x20;
		}
		else
		{
			temp += 0x01;
		}
	}
	
	m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
	gVolume = temp;
}
void SysVolumeSub(void)
{
    unsigned char  	temp;
	temp = gVolume;
	
	//max volume
	if ((temp & 0x7f) == 0x00)
	{
        m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
		return;
	}
	else
	{
		if ((temp & 0x15) == 0x00)
		{
			temp -= 0x20;
		}
		else
		{
			temp -= 0x01;
		}
	}
	
	m62429_send_data(temp & 0x1f, (temp & 0x60) >> 5);
	gVolume = temp;
}






⌨️ 快捷键说明

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