#include "160128_T6963.h"
#include "delay.h"
#include "Font.h"
#include "string.h"
#include "stdio.h"
#include "ATMSafe.h"
#include "usart.h"
#include "rtc.h"
#define uchar unsigned char
#define uint unsigned int
#define nop() delay_us(1);
uint text_size,graphic_size; //定义文本区和图形区的宽度
uint text_startaddr,graphic_startaddr; //文本和图形的起始位置
uint text_startaddr_l,text_startaddr_h; //定义文本区起始高低位置
uint graphic_startaddr_l,graphic_startaddr_h; //定义图形区首地址
uint *p;
//存储行数的数组,将0-127分为,7行,每一行16高度显示,第一行是row[1]
const u8 Row[] = { 0,1,19,37,55,73,91,109 };
//引脚设置
//WR-> PC4;RD->PC5; CE-> PB0
//RST-> PE7 ; C/D-> PB1
//DB0-DB7: PE8 - > PE15
//PB10 控制背光
void LCD_PORT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE , ENABLE);//使能PORTC,B,E以及AFIO复用功能时钟
//PE的推挽输出
//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_13 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_10 | GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//PORTC的推挽
//DB6 DB7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//PORTB推挽输出
//DB5 DB4 背光
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//背光控制
LCD_switch = BacklightOff;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //
GPIO_Init(GPIOB, &GPIO_InitStructure);
RST = 1;
}
//set port out DB0-DB7: PE8 - > PE15
void Data_Mode_Out(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//PORTE推挽输出 //Data
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; // //PORTD复用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
//set port in DB0-DB7: PE8 - > PE15
void Data_Mode_In(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//GPIOE推挽输出 //Data
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; // //GPIOE复用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
//写数据 DB0-DB7: PE8 - > PE15
void Write_data(u8 data)
{
GPIOE->BSRR = (data << 8) | ((~data)<<24);
}
//读数据 DB0-DB7: PE8 - > PE15
u8 Read_data(void)
{
u8 Data ;
Data = (GPIOE->IDR >> 8);
return Data;
}
/*******************写命令*****************************************/
void wrcomm(uchar comm)
{
CD=1; //操作命令
CE=0; //选中芯 片
RD=1; //读高电平无效
WR=0; //写使能
Write_data(comm); //把命令送给总线
delay_us(1);//延时
WR=1; //拉高写
}
/*******************写数据******************************************/
void wrdate(uchar date)
{
CD=0; //操作命令
CE=0; //使能片选
RD=1; //读无效
WR=0; //使能写
Write_data(date); //把命令送给总线
delay_us(1); //延时
WR=1; //拉高写
}
/*******************测读写命令忙***********************************/
void check_sta01()
{
u8 a; //定义变量
Data_Mode_In();
delay_us(1);
CD=1; //命令有效
CE=0; //使能片选
WR=1; //禁写
while(1) //循环
{
RD=0; //使能读
delay_us(1); //延时
a=Read_data();
RD=1;
if((a&0x03)==0x03)
{
Data_Mode_Out();
delay_us(1);
return;
} //测试如2); //全能片选
}
}
/*******************测试数据连续读忙************************************/
void AutoRCheck()
{
u8 a; //定义变量
Data_Mode_In();
delay_us(1);
CD=1; //命令有效
CE=0; //全能片选
WR=1; //禁写
while(1)
{
RD=0; //使能读
delay_us(1); //延时
a=Read_data(); //读总线状态
RD=1; //拉高读
if((a&0x04)==0x04)
{
Data_Mode_Out();
delay_us(1);
return; //测试如果连续读为不忙跳出循环
}
}
}
/*******************测试连续写忙************************************/
void AutoWCheck()
{
u8 a; //定义变量
Data_Mode_In();
delay_us(1);
CD=1; //命令有效
CE=0; //全能片选
WR=1; //禁写
while(1)
{
RD=0; //使能读
delay_us(1); //延时
a=Read_data(); //读总线状态
RD=1; //拉高读
if((a&0x08)==0x08)
{
Data_Mode_Out();
delay_us(1);
return; //测试如果连续读为不忙跳出循环
}
}
}
/************************测试其他状态字****************************************/
void StatusCheck(u8 status)
{
u8 a; //定义变量
Data_Mode_In();
delay_us(1);
CD=1; //命令有效
CE=0; //全能片选
WR=1; //禁写
while(1)
{
RD=0; //使能读
delay_us(1); //延时
a=Read_data(); //读总线状态
RD=1; //拉高读
if((a&status)==status)
{
Data_Mode_Out();
delay_us(1);
return; //测试如果连续读为不忙跳出循环
}
}
}
/************************写无参数命令************************************/
void no_parameter(uchar comm)
{
check_sta01(); //测忙
wrcomm(comm); //写命令
}
/************************写单字节参数命令*********************************/
void One_parameter(uint data1,uchar com)
{
check_sta01(); //测忙
wrdate(data1); //写第一字节参数
check_sta01(); //测忙
wrcomm(com); //写命令
}
/************************写双字节参数命令*********************************/
void double_parameter(uint data1,uint data2,uchar com)
{
check_sta01(); //测忙
wrdate(data1); //写第一字节参数
check_sta01(); //测忙
wrdate(data2); //写第二节节参数
check_sta01(); //测忙
wrcomm(com); //写命令
}
/************************************************************************
以下为接口函数
***************************************************************/
/************************清屏全亮或全灭***********************************/
//state:(1)图形或(0)文本模式
//value:0x00:清除对应的RAM
// 0xFF:全写1
void all_display(uchar state,uchar vlue)
{
u32 i,k; //定义变量
if(state==0) //若为文本模式则写文本的ram
{
double_parameter(0x00,0x00,0x24); //文本区低位和高位起始地址
no_parameter(0xb0); //连续写命令
for(i=1;i<16;i++)
{
for(k=0;k<20;k++)
{
AutoWCheck(); //测忙
wrdate(vlue);
} //写入vlue值,0或1
}
AutoWCheck(); //测忙
wrcomm(0xb2); //关连续写
}
if(state==1) //若为图形模式则写图形的ram,图形是一个字节表示一行的8个点
{
double_parameter(0x00,0x40,0x24); //图开形区起始低,高位
no_parameter(0xb0); //连续写命令
for(i=20*128;i>0;i--) //循环
{
AutoWCheck(); //测连续写忙
wrdate(vlue); //写入vlue值
}
AutoWCheck(); //测忙
T6963C stm32驱动程序 有.h
4星 · 超过85%的资源 需积分: 32 13 浏览量
2019-03-02
21:06:40
上传
评论
收藏 6KB ZIP 举报
PengSIY
- 粉丝: 6
- 资源: 13
最新资源
- 冯璐阳 42105650—祝福.docx
- 基于多种算法及改进算法实现的移动机器人路径规划matlab源码(含A星算法+PRM+RRT的改进等).zip
- 布里斯托尔纸细分市场、总体规模、先进性、市占率行业分析报告2024年.docx
- Obi绳子插件,好用的很 6.5.4版本
- openjfx-22.0.1-windows-x64-bin-sdk.zip
- 基于ros和stm32f1的小车代码(含串口通信)+项目说明.zip
- 人体姿态估计-基于Tensorflow实现的人体姿态估计算法-附项目源码-优质项目分享.zip
- java实现所有算法大全
- JDBC DAO模式 (复习)
- Proteus仿真AT89C51电子密码锁
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈