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

📄 gpio.c

📁 嵌入式系统DM642与LCD显示通讯使用的GPIO口驱动程序
💻 C
字号:
#include "gpio.h"

GPIO_Handle hGpio;

void LCD_W_BIT(Uint16 bit)
{
 	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
	DM642_waitusec(1);
	GPIO_pinWrite(hGpio,GPIO_PIN10,bit);
	DM642_waitusec(4);
	GPIO_pinWrite(hGpio,GPIO_PIN9,1);
	DM642_waitusec(5);	
}

Uint16 LCD_R_BIT()
{
	Uint16 bit;
 	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
	DM642_waitusec(5);
	bit= GPIO_pinRead(hGpio,GPIO_PIN10);//??
	DM642_waitusec(5);
	GPIO_pinWrite(hGpio,GPIO_PIN9,1);	
	DM642_waitusec(5);	
	return bit;
}

void LCD_W_REG(Uint16 address,Uint16 data)
{
   Uint16 bit;
   Uint16 copy_data,copy_address;
   Uint8 offset;
 
 //CS,SCL,SDI先同时拉高       
    GPIO_pinWrite(hGpio,GPIO_PIN9,1);
	GPIO_pinWrite(hGpio,GPIO_PIN10,1);
	GPIO_pinWrite(hGpio,GPIO_PIN12,1);
	DM642_waitusec(1);  

//CS先拉低,表示一次传输开始
	GPIO_pinWrite(hGpio,GPIO_PIN12,0);
	DM642_waitusec(5);

//写入74H,表示写入的是地址,要写入数据
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(0);

//写入地址
	for (offset=16;offset>=1;offset--)
	{
		copy_address=address;		
    	bit=(copy_address>>(offset-1))&0x0001;
    	LCD_W_BIT(bit);
    }


//	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
//	DM642_waitusec(2);
//	GPIO_pinWrite(hGpio,GPIO_PIN9,1);


    GPIO_pinWrite(hGpio,GPIO_PIN10,1);   //SDI拉高
     DM642_waitusec(1);
    GPIO_pinWrite(hGpio,GPIO_PIN12,1);   //CS拉高,表示一次传输结束
 
    DM642_waitusec(20);

//CS先拉低,表示一次传输开始
	GPIO_pinWrite(hGpio,GPIO_PIN12,0);
	DM642_waitusec(5);

//写入76H,表示写入的是数据
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(0);

//写入数据
	for (offset=16;offset>=1;offset--)
	{
		copy_data=data;		
    	bit=(copy_data>>(offset-1))&0x0001;
    	LCD_W_BIT(bit);
    }

//	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
//	DM642_waitusec(2);
//	GPIO_pinWrite(hGpio,GPIO_PIN9,1);

	GPIO_pinWrite(hGpio,GPIO_PIN10,1);//SDI拉高,此时CS为高
	DM642_waitusec(1);
	GPIO_pinWrite(hGpio,GPIO_PIN12,1);//CS拉高,表示一次传输结束

    DM642_waitusec(100);

}



Uint16 LCD_R_REG(Uint16 address)
{
   Uint16 bit;
   Uint16 copy_address,data=0;
   Uint8 offset;

//CS,SCL,SDI先同时拉高       
    GPIO_pinWrite(hGpio,GPIO_PIN9,1);
	GPIO_pinWrite(hGpio,GPIO_PIN10,1);
	GPIO_pinWrite(hGpio,GPIO_PIN12,1);
	DM642_waitusec(1);  

//CS先拉低,表示一次传输开始
	GPIO_pinWrite(hGpio,GPIO_PIN12,0);
	DM642_waitusec(5);

//写入75H,表示写入的是地址,要读出数据
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(1);

//写入地址
	for (offset=16;offset>=1;offset--)
	{
		copy_address=address;		
    	bit=(copy_address>>(offset-1))&0x0001;
    	LCD_W_BIT(bit);
    }

//	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
//	DM642_waitusec(5);

	//CS拉高,表示一次传输结束
	GPIO_pinWrite(hGpio,GPIO_PIN12,1);
	
//	GPIO_pinWrite(hGpio,GPIO_PIN9,1);
		//SDI拉高,此时CS为高
	GPIO_pinWrite(hGpio,GPIO_PIN10,1);
        
    DM642_waitusec(5);
        
//CS先拉低,表示一次传输开始
	GPIO_pinWrite(hGpio,GPIO_PIN12,0);
	DM642_waitusec(5);

//写入77H,表示要读出数据
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(0);
	LCD_W_BIT(1);
	LCD_W_BIT(1);
	LCD_W_BIT(1);

//设置GPIO10为输入
//    GPIO_pinDirection(hGpio,GPIO_PIN9,GPIO_INPUT);
	GPIO_pinDirection(hGpio,GPIO_PIN10,GPIO_INPUT);

//读出数据
	for (offset=16;offset>=1;offset--)
	{   
    bit=LCD_R_BIT();
	data=data+(bit<<(offset-1));
	}

//	GPIO_pinWrite(hGpio,GPIO_PIN9,0);
//	DM642_waitusec(2);
//	GPIO_pinWrite(hGpio,GPIO_PIN9,1);



//CS拉高,表示一次传输结束

	GPIO_pinWrite(hGpio,GPIO_PIN12,1);

//    DM642_waitusec(1);

	GPIO_pinDirection(hGpio,GPIO_PIN10,GPIO_OUTPUT); 
   //SDI拉高,此时CS为高
	GPIO_pinWrite(hGpio,GPIO_PIN10,1);

//	GPIO_pinWrite(hGpio,GPIO_PIN9,1);

    DM642_waitusec(100);

    return data;
}



void GPIO_INIT()
{

 	   
    GPIO_pinEnable(hGpio,GPIO_PIN9);
    GPIO_pinEnable(hGpio,GPIO_PIN10);
	GPIO_pinEnable(hGpio,GPIO_PIN11);
    GPIO_pinEnable(hGpio,GPIO_PIN12);
//    GPIO_pinEnable(hGpio,GPIO_PIN13);
//    GPIO_pinEnable(hGpio,GPIO_PIN15);
        
    GPIO_pinDirection(hGpio,GPIO_PIN9,GPIO_OUTPUT);
	GPIO_pinDirection(hGpio,GPIO_PIN10,GPIO_OUTPUT);
	GPIO_pinDirection(hGpio,GPIO_PIN11,GPIO_OUTPUT);
	GPIO_pinDirection(hGpio,GPIO_PIN12,GPIO_OUTPUT);
//	GPIO_pinDirection(hGpio,GPIO_PIN13,GPIO_OUTPUT);
//	GPIO_pinDirection(hGpio,GPIO_PIN15,GPIO_OUTPUT);

	GPIO_pinWrite(hGpio,GPIO_PIN9,1);
	GPIO_pinWrite(hGpio,GPIO_PIN10,1);
	GPIO_pinWrite(hGpio,GPIO_PIN11,1);
	GPIO_pinWrite(hGpio,GPIO_PIN12,1);
//	GPIO_pinWrite(hGpio,GPIO_PIN13,0);
//	GPIO_pinWrite(hGpio,GPIO_PIN15,0);

}

void LCD_LEDON()
{
	GPIO_pinWrite(hGpio,GPIO_PIN11,0);
}

void LCD_LEDOFF()
{
    GPIO_pinWrite(hGpio,GPIO_PIN11,1);
}

/*void MOTOR_STEP(Uint32 step_rate)
{
	Uint32 step_size;
	step_size=21000000/step_rate/2;
	GPIO_pinWrite(hGpio,GPIO_PIN13,1);

		GPIO_pinWrite(hGpio,GPIO_PIN13,0);
	    
}*/




⌨️ 快捷键说明

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