📄 12864_serial.c
字号:
/******************************************************/
#include<reg52.h>
#include <intrins.h>
#include"12864_serial.h"
#define uint unsigned int
#define uchar unsigned char
unsigned char ChangeAddress(unsigned char StartAddress);
void WriteLCD(unsigned char StartAddress,unsigned char Charactors[]);
void delay_1ms(uint x)
{
uint j;
uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++);
}
}
void send_command(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xf8;
delay_1ms(10);
cs=1;
sclk=0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
cs=0;
}
void send_data(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xfa;
delay_1ms(10);
cs=1;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
sid=(bit)(i_data&0x80);
sclk=0;
sclk=1;
i_data=i_data<<1;
}
cs=0;
}
void lcd_init()
{
uchar command_data;
//psb=0;
delay_1ms(100);
command_data=0x30;
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/
command_data=0x04;
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
command_data=0x0c;
send_command(command_data); /*显示设定:开显示,不显示显示光标,当前显示位不反白闪动*/
command_data=0x01;
send_command(command_data); /*清DDRAM*/
command_data=0x02;
send_command(command_data); /*DDRAM地址归位*/
command_data=0x80;
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/
}
void welcome()
{ uchar i,j;
send_command(0x01);
delay_1ms(50);
WriteLCD(0x82,"欢迎使用");
WriteLCD(0x92,"Welcome ");
WriteLCD(0x89,"Waiting.");
for(j=0;j<=1;j++)
{
send_command(0x8d);
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_data(0x20);
send_command(0x8d);
for(i=0;i<=4;i++)
{
send_data(0x2e);
delay_1ms(1000);
}
}
}
void WriteLCD(unsigned char StartAddress,unsigned char Charactors[])
{
unsigned char *i=Charactors; //字符串的首地址
send_command(StartAddress);
while(*i) //判断字符串结尾,*i为0代表结束
{
send_data(*i);
i++;
if(*i=='\0')
break;
send_data(*i);
i++;
StartAddress=ChangeAddress(StartAddress);
}
}
unsigned char ChangeAddress(unsigned char StartAddress)
{
switch(StartAddress)
{
case 0x87:send_command(0x90);StartAddress=0x90;break;
case 0x8F:send_command(0x98);StartAddress=0x98;break;
case 0x97:send_command(0x88);StartAddress=0x88;break;
default:StartAddress+=1;
}
return StartAddress;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -