在HC32F460平台驱动 GC9306 三线制双通道SPI屏幕

说明

在HC32F460平台上以验证,通过模拟SPI的方式,驱动三线制双通道GC9306 LCD屏幕。(GC9306屏幕有多种规格有并口,3线制SPI,4线制SPI等多种规格)使用前一定要确认好自己屏幕的模式。若本文对你有有用,欢迎点赞收藏。

1. 三线制双通道 GC9306屏幕硬件介绍

引脚 功能 说明
1 gnd 电源地
2 Led_A+ 背光+极
3 VCC(2V8) 电源+
4 /Cs 片选信号
5 RSTB 复位信号
6 LSCK SCK SPI时钟信号
7 LSDA LSDA SPI数据通道1
8 LSA0 A0 SPI数据通道2
9 LPTE 帧同步
10 LOVCC -
11 Led_k 背光 -极
12 gnd 电源地
13 YD/NC NC
14 XL/NC NC
15 YU/NC NC
16 XR/NC NC

2.与HC32F460芯片引脚连接

屏幕 单片机
/cs -> PB10
LSCK -> PB13
LSDA -> PB14
RSTB -> PB12
A0 -> PB15

gc9306.h

#ifndef GC9306_H
#define GC9306_H

#define LCDCS(X)   (X? (M4_PORT->POSRB_f.POS10 = 1) : (M4_PORT->PORRB_f.POR10 = 1))
#define LCDSDA(X)   (X? (M4_PORT->POSRB_f.POS14 = 1) : (M4_PORT->PORRB_f.POR14 = 1))
#define RLCDSDA()   M4_PORT->PIDRB_f.PIN14 
#define LCDSCL(X)	 (X? (M4_PORT->POSRB_f.POS13 = 1) : (M4_PORT->PORRB_f.POR13 = 1))
#define LCDRESET(X)	 (X? (M4_PORT->POSRB_f.POS12 = 1) : (M4_PORT->PORRB_f.POR12 = 1))
#define RS(X) 		(X? (M4_PORT->POSRB_f.POS15 = 1) : (M4_PORT->PORRB_f.POR15 = 1))	//A0

 
 
//LCD的宽和高定义
#define LCD_Width 	240
#define LCD_Height 	320

void write_comm(INT16U command);
void write_data(INT16U datum);
void serial(INT8U send_data,INT8U comm_data);
void IC_code_init(void);
void read_ID(INT16U comm,INT8U count);
INT8U serial_read();
void writePixel(INT8U x_start, INT8U y_start, INT16U color);
void set_windows_x(INT16U x_strat_add,INT16U x_end_add);
void set_windows_y(INT16U y_strat_add,INT16U y_end_add);
void addres_set(INT16U strat_x,INT16U strat_y,INT16U end_x,INT16U end_y);
void grayotp(); //灰度测试

gc9306.C

#include "gc9306.h"



INT8U SRGB = 0x08;
INT16U driver_clar = 0;
INT8U scan = 0x80;
INT8U r_datum = 0;
INT8U r_data[128] = {
   0};

INT8U	move_y=0; //1 //计算Y轴地址偏离,1就是Y轴偏离1个像素点
INT8U	move_x=0; //2 //计算X轴地址偏离,1就是X轴偏离1个像素点


INT8U	win_starty=0x00;
INT8U	win_startx=0x00;
INT16U	addy=320;
INT16U	addx=240;
INT16U	win_endy = 0x013F;
INT16U	win_endx = 0xeF;

void delay(INT16U ms)
{
   
	for(INT16U jj = 0; jj < ms; jj++)
	{
   
		for(int ii = 0; ii <10 ; ii++);
	}
}

void write_comm(INT16U command)
{
   
    serial(command, 0);
}

void write_data(INT16U datum)
{
   
    serial(datum, 1);
}

void serial(INT8U send_data,INT8U comm_data)
{
   
	INT16U  serial1 = 0;
	
	LCDCS(0); 
	#if serial_SPI4
	RS=comm_data;
	#else
	LCDSDA(comm_data); delay(1);LCDSCL(0); delay(1); LCDSCL(1); delay(1);
	#endif
	serial1 = send_data;
	//serial1 = serial1<<8;
	delay(1);
	LCDSDA((serial1 & 0X80) >> 7);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X40) >> 6);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X20) >> 5);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X10) >> 4);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X08) >> 3);  LCDSCL(0);  delay(1); LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X04) >> 2);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X02) >> 1);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	LCDSDA((serial1 & 0X01) >> 0);  LCDSCL(0);  delay(1);LCDSCL(1);delay(1);
	delay(1);
	//LCDSCL(0); delay(1);<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值