跪求51单片机控制12864液晶显示屏,用的P0口,不是P0口???而且是并行??谢谢啦
展开全部
#include <reg52.h>
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_date P0
sbit LCD12864_RS = P3^5;
sbit LCD12864_RW = P3^6;
sbit LCD12864_E = P3^4;
sbit LCD12864_PSB= P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
uchar code dis1[]={"书山有路勤为径;"};
uchar code dis2[]={"学海无涯苦作舟。"};
uchar code dis3[]={"姓名:阿弥陀佛~"};
uchar code dis4[]={"号码:12345678900"};
void delay(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
void write_com(uchar com)
{
LCD12864_RS = 0;
LCD12864_RW = 0;
LCD12864_E = 0;
P0 = com;
delay(5);
LCD12864_E = 1 ;
delay(5);
LCD12864_E = 0;
}
void write_dat(uchar dat)
{
LCD12864_RS = 1;
LCD12864_RW = 0;
LCD12864_E = 0;
P0 = dat;
delay(5);
LCD12864_E = 1 ;
delay(5);
LCD12864_E = 0;
}
void LCD_pos(uchar x,uchar y)
{
uchar pos;
if(y==0) {y=0x80;}
else if(y==1)
{y=0x90;}
else if(y==2)
{y=0x88;}
else if(y==3)
{y=0x98;}
pos = x+y;
write_com(pos);
}
void displayonechar(uchar x,uchar y,uchar dat) //显示一个字符
{
uchar pos;
if(y==0) {y=0x80;}
else if(y==1)
{y=0x90;}
else if(y==2)
{y=0x88;}
else if(y==3)
{y==0x98;}
pos = x+y;
write_com(pos);
write_dat(dat);
}
void displaylistchar() //显示一连串汉字和字符
{
uchar i;
write_com(0x80); //使用while循环方法显示一连串字符
i = 0;
while(dis1[i]!='\0')
{ write_dat(dis1[i]); i++; }
write_com(0x90); //使用while循环方法显示一连串字符
i = 0;
while(dis2[i]!='\0')
{ write_dat(dis2[i]); i++; }
write_com(0x88); //使用for循环方法显示一连串字符
i = 0;
for(i=0;i<16;i++)
{ write_dat(dis3[i]); delay(10); }
write_com(0x98); //使用for循环方法显示一连串字符
i = 0;
for(i=0;i<16;i++)
{ write_dat(dis4[i]); delay(10); }
}
void LCD_init()
{
LCD12864_PSB=1;
write_com(0x30);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x01);
delay(5);
}
void main()
{
uchar i;
wela = 0;
dula = 0;
delay(10);
LCD_init();
displaylistchar();
while(1);
}
贡献出来了,希望大家指点指点。我自己写的。主函数里面还可以用displayonechar();来显示单独一个字符。不过不能用displayonechar();显示一个汉字。具体还要看技术手册。
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_date P0
sbit LCD12864_RS = P3^5;
sbit LCD12864_RW = P3^6;
sbit LCD12864_E = P3^4;
sbit LCD12864_PSB= P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
uchar code dis1[]={"书山有路勤为径;"};
uchar code dis2[]={"学海无涯苦作舟。"};
uchar code dis3[]={"姓名:阿弥陀佛~"};
uchar code dis4[]={"号码:12345678900"};
void delay(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
void write_com(uchar com)
{
LCD12864_RS = 0;
LCD12864_RW = 0;
LCD12864_E = 0;
P0 = com;
delay(5);
LCD12864_E = 1 ;
delay(5);
LCD12864_E = 0;
}
void write_dat(uchar dat)
{
LCD12864_RS = 1;
LCD12864_RW = 0;
LCD12864_E = 0;
P0 = dat;
delay(5);
LCD12864_E = 1 ;
delay(5);
LCD12864_E = 0;
}
void LCD_pos(uchar x,uchar y)
{
uchar pos;
if(y==0) {y=0x80;}
else if(y==1)
{y=0x90;}
else if(y==2)
{y=0x88;}
else if(y==3)
{y=0x98;}
pos = x+y;
write_com(pos);
}
void displayonechar(uchar x,uchar y,uchar dat) //显示一个字符
{
uchar pos;
if(y==0) {y=0x80;}
else if(y==1)
{y=0x90;}
else if(y==2)
{y=0x88;}
else if(y==3)
{y==0x98;}
pos = x+y;
write_com(pos);
write_dat(dat);
}
void displaylistchar() //显示一连串汉字和字符
{
uchar i;
write_com(0x80); //使用while循环方法显示一连串字符
i = 0;
while(dis1[i]!='\0')
{ write_dat(dis1[i]); i++; }
write_com(0x90); //使用while循环方法显示一连串字符
i = 0;
while(dis2[i]!='\0')
{ write_dat(dis2[i]); i++; }
write_com(0x88); //使用for循环方法显示一连串字符
i = 0;
for(i=0;i<16;i++)
{ write_dat(dis3[i]); delay(10); }
write_com(0x98); //使用for循环方法显示一连串字符
i = 0;
for(i=0;i<16;i++)
{ write_dat(dis4[i]); delay(10); }
}
void LCD_init()
{
LCD12864_PSB=1;
write_com(0x30);
delay(5);
write_com(0x0c);
delay(5);
write_com(0x01);
delay(5);
}
void main()
{
uchar i;
wela = 0;
dula = 0;
delay(10);
LCD_init();
displaylistchar();
while(1);
}
贡献出来了,希望大家指点指点。我自己写的。主函数里面还可以用displayonechar();来显示单独一个字符。不过不能用displayonechar();显示一个汉字。具体还要看技术手册。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看不懂你什么意思
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有现成的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询