#include<reg52.h>
#include<intrins.h>
sbit rs=P1^0;
sbit rw=P1^1;
sbit E=P1^2;
sbit PSB =P3^6;
#define uchar unsigned char
#define uint unsigned int
#define lcd_data P2
uchar table[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,};
void delay(uchar x)//短延时
{
for(x;x>0;x--)
_nop_(); //执行一个机器周期
}
void delay1(uchar x)//1ms延时
{
uchar y;
for(x;x>0;x--)
for(y=110;y>0;y--);
}
unsigned char read_busy(void)
{
//uchar i;
rs = 0;
rw = 1; //rs=0和rw=1的时候,表示读忙标志(BF)及地址指针计数器(AC)的状态
E = 1; //E=1配合 读状态或数据,指令
while (lcd_data & 0x80); //忙标志在 DB7 位 所以将读到的数据与0x80 相与,取出 DB7,检测其是否为1.
E = 0; // 释放E
}
void write_data(uchar x)//写数据
{
read_busy(); //操作液晶的时候要检测忙信号
rs=1;
rw=0; //rs=1,rw=0,表示写数据到数据暂存器DR中
lcd_data=x;
E = 1;
delay(2);
E = 0; //写数据或者指令是在E由高电平到低电平的下降沿. 既是:1--0 的过程.
}
void write_com(uchar x)//写指令
{
read_busy();
rs=0;
rw=0; //表示写指令
lcd_data=x;
E = 1;
delay(2);
E = 0; //同上
}
void init()
{
write_com(0x36);//功能设定,表示DL=1,RE=0 既是选择8位数据流,基本操作指令.
write_com(0x01); //清除显示
write_com(0x06); //
write_com(0x0c);
}
void clear(void)
{
write_com(0x01); //显示清屏
write_com(0x34); // 显示光标移动设置
write_com(0x30); // 显示开及光标设置
}
void main()
{
char i;
delay1(400);
init();
delay1(5);
while(1)
{
//clear();
delay(1);
//write_com(0x36);
write_com(0x34);//关闭绘图显示
write_com(0x80);//发送水平地址码
write_com(0x80);//发送垂直地址码,
for(i=0;i<16;i++)
write_data(table);
// write_com(0x30);
write_com(0x80);
write_com(0x81);
for(i=16;i<32;i++)
write_data(table);
write_com(0x36);//打开显示
delay1(400);
delay1(400);
}
}
我写这个总是乱码,不知道错在哪里,望高手们,不吝赐教啊!
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |