?? 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 + -