12864显示程序,51单片机,C语言
可显示固定中文,字符,数字;
可实时动态刷新显示数字,字符;
#include<reg52.h>
sbit rs=P1^2;
sbit rw=P1^1;
sbit cs=P1^0;
sbit psb=P1^3;
unsigned char code table[]={" X0: Y0: "}; unsigned char code table1[]={"现在X1: Y1: "}; unsigned char code table2[]={"划线模式:"}; unsigned char code table3[]={"开始暂停"};
void delay(unsigned char z) //延时
{
unsigned i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void write_com(unsigned int com) //写命令
{
rs=0;
rw=0;
cs=0;
P2=com;
delay(5);
cs=1;
delay(5);
cs=0;
}
void write_date(unsigned char dat) //写数据
{
rs=1;
rw=0;
cs=0;
P2=dat;
delay(5);
cs=1;
delay(5);
cs=0;
}
void pos(unsigned char x,unsigned char y) //起点函数{
unsigned char pos;
if(x==0)
x=0x80;
else if(x==1)
x=0x90;
else if(x==2)
x=0x88;
else if(x==3)
x=0x98;
pos=x+y/2;
write_com(pos);
}
void init()
{
unsigned char i;
psb=1; //1并行,0串行
write_com(0x30); //基本指令操作
delay(5);
write_com(0x0c); //显示开,关光标
delay(5);
write_com(0x01); //清除led的显示内容delay(5);
pos(0,0);
i=0;
while(table[i]!='\0') //第一行固定显示{
write_date(table[i]);
i++;
}
pos(1,0);
i=0;
while(table1[i]!='\0')
{
write_date(table1[i]); //第二行固定显示i++;
}
pos(2,0);
i=0;
while(table2[i]!='\0')
{
write_date(table2[i]); //第三行固定显示i++;
}
pos(3,0);
i=0;
while(table3[i]!='\0')
{
write_date(table3[i]); //第四行固定显示
i++;
}
}
void write_dianya(unsigned char add_x,unsigned char add_y,int date)
{//12864刷新
char bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%10;
pos(add_x,add_y);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}
void main()
{
init();
while(1)
{
write_dianya(0,3,134);
}
}。