12864显示是这样的,总是会重复一个图案,而下一个就不会显示了,这个到底是什么问题,要怎么解决呢?
代码如下:
#include <reg51.h>
#include <intrins.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
/* 端口定义*/
#define LCD_data P0 // 数据口
sbit LCD_RS = P3^5; // 寄存器选择输入
sbit LCD_RW = P3^6; //液晶读/ 写控制
sbit LCD_EN = P3^4; // 液晶使能控制
sbit LCD_PSB = P3^7; // 串/ 并方式控制
sbit wela = P2^7;
sbit dula = P2^6;
uchar dis1[10];
uchar code dis2[] = {0x02,0x03,0x04,0x05,0x06,0x07,'\0'};
uchar code dis3[] = {"我爱你你没的大富科技阿娇"};
uchar code dis4[] = {"--------"};
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
/*******************************************************************/
/* */
/* 写指令数据到 LCD */
/*RS=L,RW=L ,E=高脉冲,D0-D7=指令码。 */
/* */
/*******************************************************************/
void write_cmd(uchar cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
P0 = cmd;
delay_1ms(5);
LCD_EN = 1;
delay_1ms(5);
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* 写显示数据到 LCD */
/*RS=H ,RW=L ,E=高脉冲,D0-D7=数据。 */
/* */
/*******************************************************************/
void write_dat(uchar dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delay_1ms(5);
LCD_EN = 1;
delay_1ms(5);
LCD_EN = 0;
}
/*********************************************************/
/* */
/* 设定显示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar 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 ;
write_cmd(pos); //显示地址
}
/*******************************************************************/
/*初始化设置
/*******************************************************************/
void lcd_init()
{
LCD_PSB = 1; //并口方式
write_cmd(0x30); // 基本指令操作
delay_1ms(5);
write_cmd(0x0c); // 显示开,关光标
delay_1ms(5);
write_cmd(0x01); // 清除LCD 的显示内容
delay_1ms(5);
}
/*********************************************************/
/*
/* 主程序
/* */
/*********************************************************/
void main()
{
uchar i;
wela=0;
dula=0;
delay_1ms(10); //延时
lcd_init(); //初始化 LCD
write_cmd(0x80);
for(i=0;i<8;i++)
{
//设置显示位置为第二行的第 1 个字符
write_dat(0x01+i); //显示字符
}
while(1);
} |