📄 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 + -