12864显示出现乱码,帮忙看看那里错了
用的是89c51单片机液晶用的是12864,显示为乱码,帮忙看看
/*
lcd12864液晶显示
*/
#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="I LIKE hhh! hello";
uint num;
sbit lcd_rs=P1^0; //4
sbit lcd_rw=P1^1; //5
sbitlcd_en=P1^2; //6
sbit lcd_rst=P1^3; //17
sbit lcd_cs1=P1^6; //15
sbit lcd_cs2=P1^7; //16
/* 函数声明 */
void init();
void delayms(uint);
void write_com(uchar);
void write_datas(uchar);
void read_busy();
/*主函数*/
void main()
{
init();
lcd_cs1=1;
lcd_cs2=1;
for(num=0;num<18;num++)
{
write_datas(table[num]);
// write_datas('o');
// delayms(1000);
}
}
void read_busy()
{
P0=0x00;
lcd_rs=1;
lcd_rw=0;
lcd_en=1;
while(P0&0x80);
lcd_en=0;
}
void init() //初始化
{
write_com(0x3f);//开显示
write_com(0xc0); //设置代码起始行为0
write_com(0xb8);//设置页地址 x地址
write_com(0x40); //设置y地址
write_com(0x80);//设置列地址
}
void delayms(uint z) //延时函数
{
uintx,y;
for(x=z;x>0;x--)
{
for(y=100;y>0;y--);
}
}
void write_com(uchar com) //写指令
{
// read_busy();
_nop_();
_nop_();
_nop_();
lcd_rs=0;
lcd_rw=0;
// delayms(4);
P0=com;
// delayms(5);
lcd_en=1;
delayms(5);
lcd_en=0;
}
void write_datas(uchar datas) //写数据
{
// read_busy();
_nop_();
_nop_();
_nop_();
lcd_rs=1;
lcd_rw=0;
// delayms(4);
P0=datas;
// delayms(5);
lcd_en=1;
delayms(5);
lcd_en=0;
}
同学,12864有好多种,你用的是哪种控制器的?
主函数中没有添加死循环 程序已经跑飞了
哥们,你的初始化好像有点问题,你直接去百度查一下,看一下别人的例程,如果检查初始化没有问题就看一下写的函数
你可以在主函数结束上加多一个while(1);
正解!...
你的lcdrs=0,错了
我的 程序第一天还能正常显示 第二天就乱码了 这是啥原因 要崩溃