标题:
LCD12864、STC15 单片机并行连接方式多文件编程
[打印本页]
作者:
YJZL
时间:
2019-7-21 09:15
标题:
LCD12864、STC15 单片机并行连接方式多文件编程
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include<stc15.h>
#define DataPort P0 //MCU P0<------> LCM
sbit RS=P5^5;
sbit RW=P4^2;
sbit E=P4^1;
sbit PSB=P1^1;
sbit RES=P1^0;
/*????????*/
//??????λ
void Check_Busy();
//д???
void Write_Cmd(unsigned char Cmd);
//д????
void Write_Data(unsigned char Data);
//LCD?????????
void Init_LCD12864();
//???????????
void CGRAM();
//??????????????
void DisplayCGRAM(unsigned char x,unsigned char y);
//???????? x:???????????Χ0~8 y:???????????Χ1~4
void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s);
//????
void ClrScreen();
//?????
void LCD_PutGraphic(unsigned char code *img);
//??????????
void SetGraphicMode();
#endif
#include"LCD12864.h"
#include "delay.h"[/b]
//????λ
void Check_Busy()
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//?????
E=0;
}
//д????
[b]void Write_Cmd(unsigned char Cmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
//д????
[b]void Write_Data(unsigned char Data)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}[/b]
[b]
//??????????
void Init_LCD12864()
{
DelayMs(40); //????40MS?????????
PSB=1; //?????8BIT?????????
DelayMs(1); //???
RES=0; //??λ
DelayMs(1); //???
RES=1; //??λ???
DelayMs(10);
Write_Cmd(0x30); //?????????
DelayUs2x(50); //???????100us
Write_Cmd(0x30); //???8bit??????
DelayUs2x(20); //???????37us
Write_Cmd(0x0c); //?????(???α???????)
DelayUs2x(50); //???????100us
Write_Cmd(0x01); //?????????????趨???????00H
DelayMs(15); //???????10ms
Write_Cmd(0x06); //??????????????д??????趨?α???????????????????λ?????????????1λ???
DelayUs2x(50); //???????100us
}
//???????????
void CGRAM()
{
Write_Cmd(0x30);
Write_Cmd(0x40);
}
//??????????????
void DisplayCGRAM(unsigned char x,unsigned char y)
{
switch(y)
{
case 1: Write_Cmd(0x80+x);break;
case 2: Write_Cmd(0x90+x);break;
case 3: Write_Cmd(0x88+x);break;
case 4: Write_Cmd(0x98+x);break;
default:break;
}
Write_Data(00);
Write_Data(00);[/b]
}
//???????? x:???????????Χ0~8 y:???????????Χ1~4
void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s)
{
switch(y)
{
case 1: Write_Cmd(0x80+x);break;
case 2: Write_Cmd(0x90+x);break;
case 3: Write_Cmd(0x88+x);break;
case 4: Write_Cmd(0x98+x);break;
default:break;
}
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}[/b]
[b]//????
void ClrScreen()
{
Write_Cmd(0x01);
DelayMs(15);
}
//?????
void LCD_PutGraphic(unsigned char code *img)
{
int i,j;
//????????????????
for(i=0;i<32;i++)
{
Write_Cmd(0x80 + i); //SET ?????? VERTICAL ADD
Write_Cmd(0x80); //SET ????? HORIZONTAL ADD
for(j=0;j<16;j++)
{
Write_Data(*img);
img++;
}
}
//????°???????????
for(i=0;i<32;i++)
{
Write_Cmd(0x80 + i); //SET ?????? VERTICAL ADD
Write_Cmd(0x88); //SET ????? HORIZONTAL ADD
for(j=0;j<16;j++)
{
Write_Data(*img);
img++;
}
}
}
//??????????
void SetGraphicMode()
{
Write_Cmd(0x36); //???8bit?????? ?????
DelayUs2x(20);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1