LCD12864.docx

上传人:b****8 文档编号:28277167 上传时间:2023-07-10 格式:DOCX 页数:14 大小:16.29KB
下载 相关 举报
LCD12864.docx_第1页
第1页 / 共14页
LCD12864.docx_第2页
第2页 / 共14页
LCD12864.docx_第3页
第3页 / 共14页
LCD12864.docx_第4页
第4页 / 共14页
LCD12864.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

LCD12864.docx

《LCD12864.docx》由会员分享,可在线阅读,更多相关《LCD12864.docx(14页珍藏版)》请在冰豆网上搜索。

LCD12864.docx

LCD12864

#include

#include"lcd12864.h"

/********数据传输*********/

#defineLCD2MCU_Data(GPIOB->IDR>>8)&0xff

#defineMCU2LCD_DataGPIOB->ODR

/********数据控制*********/

#defineLCD_RSPCout(3)

#defineLCD_RWPCout

(2)

#defineLCD_ENPCout(0)

voidDataControl(void)

{

RCC->APB2ENR|=1<<4;

GPIOC->CRL&=0XFFFF00F0;

GPIOC->CRL|=0X00002202;

}

voidDataPort_Out(void)

{

RCC->APB2ENR|=1<<3;

GPIOB->CRH&=0X00000000;

GPIOB->CRH|=0X22222222;

}

voidDataPort_In(void)

{

RCC->APB2ENR|=1<<3;

GPIOB->CRH&=0X00000000;

GPIOB->CRH|=0X88888888;

GPIOB->ODR|=0xffffffff;

}

/*********写指令函数*********/

voidWrite_Cmd(u8cmd)

{

u8lcdtemp=0;

DataControl();

LCD_RS=0;

LCD_RW=1;

DataPort_In();

do

{

LCD_EN=1;

lcdtemp=LCD2MCU_Data;

LCD_EN=0;

}

while(lcdtemp&0x80);

DataPort_Out();

LCD_RW=0;

MCU2LCD_Data=(cmd<<8)&0xff00;

LCD_EN=1;

;

LCD_EN=0;

}

/******写数据函数******/

voidWrite_Data(u8dat)

{

u8lcdtemp=0;

DataControl();

LCD_RS=0;

LCD_RW=1;

DataPort_In();

do

{

LCD_EN=1;

lcdtemp=LCD2MCU_Data;

LCD_EN=0;

}

while(lcdtemp&0x80);

DataPort_Out();

LCD_RS=1;

LCD_RW=0;

MCU2LCD_Data=(dat<<8)&0xff00;

LCD_EN=1;

LCD_EN=0;

}

u8Read_Data(void)/*******读数据函数********/

{

u8read_value,lcdtemp=0;

DataControl();

LCD_RS=0;

LCD_RW=1;

DataPort_In();

do

{

LCD_EN=1;

;

lcdtemp=LCD2MCU_Data;

LCD_EN=0;

}

while(lcdtemp&0x80);

DataPort_Out();

MCU2LCD_Data=(0xff>>8)&0xff;

DataPort_In();

LCD_RS=1;

LCD_RW=1;

LCD_EN=0;

;

LCD_EN=1;

read_value=LCD2MCU_Data;

;

LCD_EN=0;

returnread_value;

}

voidInit_Lcd(void)/****液晶初始化****/

{

DataControl();

DataPort_Out();

delay_ms(500);

Write_Cmd(0x30);//基本指令集

delay_ms

(1);

Write_Cmd(0x02);//地址归位

delay_ms

(1);

Write_Cmd(0x0c);//整体显示打开,游标关闭

delay_ms

(1);

Write_Cmd(0x01);//清除显示

delay_ms

(1);

Write_Cmd(0x06);//游标右移

delay_ms

(1);

Write_Cmd(0x80);//设定显示的起始地址

}

/*******************************************

函数名称:

Disp_HZ

功能:

控制液晶显示汉字

参数:

addr--显示位置的首地址

pt--指向显示数据的指针

num--显示字符个数

返回值:

********************************************/

voidDisp_HZ(u8addr,uc8*pt,u8num)

{

u8i;

DataControl();

DataPort_Out();

Write_Cmd(addr);

for(i=0;i<(num*2);i++)

Write_Data(*(pt++));

}

/*******************************************

函数名称:

Clear_GDRAM

功能:

清除液晶GDRAM中的随机数据

参数:

返回值:

********************************************/

voidClear_GDRAM(void)

{

u8i,j,k;

DataControl();

DataPort_Out();

Write_Cmd(0x34);//打开扩展指令集

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);//在写入地址时,要先输入垂直地址,再输入水平地址这是规定好的

Write_Cmd(0x80);//第一行水平的起始地址为80H

for(k=0;k<16;k++)//写入以后数据后,地址计数器(AC)会自动加一

{

Write_Data(0x00);

}

}

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);//写入第一行8个32*16模块的垂直起始地址

//在写入地址时,要先输入垂直地址,再输入水平地址这是规定好的

Write_Cmd(0x88);//第二行的水平起始地址为88H

//以后写入数据后,地址计数器(AC)会自动加一

for(k=0;k<16;k++)

{

Write_Data(0x00);

}

}

Write_Cmd(0x30);//回到基本指令集

}

/*******************************************

函数名称:

Check_GDRAM

功能:

点亮全屏,检查坏点

参数:

返回值:

********************************************/

voidCheck_GDRAM(void)

{

u8i,j,k;

DataControl();

DataPort_Out();

Write_Cmd(0x34);//打开扩展指令集

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);//在写入地址时,要先输入垂直地址,再输入水平地址这是规定好的

Write_Cmd(0x80);//第一行水平的起始地址为80H

for(k=0;k<16;k++)//写入以后数据后,地址计数器(AC)会自动加一

{

Write_Data(0xff);

}

}

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);//写入第一行8个32*16模块的垂直起始地址

//在写入地址时,要先输入垂直地址,再输入水平地址这是规定好的

Write_Cmd(0x88);//第二行的水平起始地址为88H

//以后写入数据后,地址计数器(AC)会自动加一

for(k=0;k<16;k++)

{

Write_Data(0xff);

}

}

Write_Cmd(0x36);

Write_Cmd(0x30);//回到基本指令集

}

/*******************************************

函数名称:

Draw_PM

功能:

在整个液晶屏幕上画图

参数:

返回值:

********************************************/

voidDraw_PM(uc8*ptr)

{

u8i,j,k;

DataControl();

DataPort_Out();

Write_Cmd(0x34);//打开扩展指令集

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);

Write_Cmd(0x80);

for(k=0;k<16;k++)

{

Write_Data(*ptr++);

}

}

i=0x80;

for(j=0;j<32;j++)

{

Write_Cmd(i++);

Write_Cmd(0x88);

for(k=0;k<16;k++)

{

Write_Data(*ptr++);

}

}

Write_Cmd(0x36);

Write_Cmd(0x30);

}

voidDraw_TX(u8Yaddr,u8Xaddr,uc8*dp)

{

u8j;

u8k=0;

DataControl();

DataPort_Out();

Write_Cmd(0x01);

Write_Cmd(0x34);

for(j=0;j<16;j++)

{

Write_Cmd(Yaddr++);

Write_Cmd(Xaddr);

Write_Data(dp[k++]);

Write_Data(dp[k++]);

}

Write_Cmd(0x36);

Write_Cmd(0x30);

}

voidDraw_Point(u8X,u8Y,u8Color)

{

u8Row,Tier,Tier_bit;

u8ReadH,ReadL;

Write_Cmd(0x34);

Write_Cmd(0x34);

Tier=X>>4;

Tier_bit=X&0x0f;

if(Y<32){Row=Y;}

else{Row=Y-32;Tier=Tier+8;}

Write_Cmd((Row|0x80));

Write_Cmd((Tier|0x80));

Read_Data();

ReadH=Read_Data();

ReadL=Read_Data();

Write_Cmd((Row|0x80));

Write_Cmd((Tier|0x80));

if(Tier_bit<8)

{

switch(Color)

{

case0:

ReadH&=(~(0x01<<(7-Tier_bit)));break;

case1:

ReadH|=(0x01<<(7-Tier_bit));break;

case2:

ReadH^=(0x01<<(7-Tier_bit));break;

default:

break;

}

Write_Data(ReadH);

Write_Data(ReadL);

}

else

{

switch(Color)

{

case0:

ReadL&=(~(0x01<<(15-Tier_bit)));break;

case1:

ReadL|=(0x01<<(15-Tier_bit));break;

case2:

ReadL^=(0x01<<(15-Tier_bit));break;

default:

break;

}

Write_Data(ReadH);

Write_Data(ReadL);

}

Write_Cmd(0x36);

Write_Cmd(0x30);

}

voidDraw_ZB(void)

{

u8i,j;

for(i=0;i<128;i++)

{

Draw_Point(i,63,1);

}

for(j=0;j<64;j++)

{

Draw_Point(0,j,1);

}

}

#ifndef__LCD12864_H

#define__LCD12864_H

#include

#include"sys.h"

#include"delay.h"

voidDataControl(void);//数据控制端初始化

voidDataPort_Out(void);//数据输出端初始化

voidDataPort_In(void);//数据输入端初始化

voidWrite_Cmd(u8cmd);/******写指令程序******/

voidWrite_Data(u8dat);/******写数据函数******/

u8Read_Data(void);/*****读数据函数*******/

voidInit_Lcd(void);/******液晶初始化******/

voidDisp_HZ(u8addr,uc8*pt,u8num);

voidClear_GDRAM(void);

voidCheck_GDRAM(void);

voidDraw_PM(uc8*ptr);

voidDraw_TX(u8Yaddr,u8Xaddr,uc8*dp);

voidDraw_Point(u8X,u8Y,u8Color);

voidDraw_ZB(void);

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1