⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v9.c

📁 RJ12864液晶显示 用模拟时序的方式实现了汉字在液晶上的滚动显示
💻 C
字号:
#include  "reg51.h"
#include "math.h"
#include "intrins.h"
#include "absacc.h"
#define uchar unsigned char

//sbit elcd=P2^7;
sbit rs=P3^0;
sbit rw=P3^1;
sbit elcd=P3^2;
sbit cs1=P3^3;
sbit cs2=P3^4;
sbit rst=P3^5;

#define datalcd P1   //p0口
#define getdata DBYTE[0x30]
//#define getdata1 XBYTE[0x3000]


#define dispon  0x3f    //显示on
#define dispoff 0x3e    //显示off
#define lcdbusy 0x80    //LCD忙判断
#define dispfirst 0xc0  //显示起始行

uchar cbyte;


void lcdinit(void);
void delay(uchar);
//void busy(void);
//void lcdbusyR(void);
void clr_screen(void);
void writedata(uchar);
//uchar readdata();
void writecmd(uchar);
//void Set_XY(uchar,uchar);

uchar code guang[]={
0x00,0x00,0xFC,0x44,0x54,0x54,0x7C,0x55,
0xD6,0x54,0x7C,0x54,0x54,0x44,0x44,0x00,
0x80,0x60,0x1F,0x80,0x9F,0x55,0x35,0x15,
0x1F,0x15,0x15,0x35,0x5F,0x80,0x00,0x00
};

uchar code dong[]={
0x00,0x08,0xE8,0xA8,0xA8,0xA8,0xA8,0xFF,
0xA8,0xA8,0xA8,0xA8,0xE8,0x0C,0x08,0x00,
0x00,0x40,0x23,0x12,0x0A,0x06,0x02,0xFF,
0x02,0x06,0x0A,0x12,0x23,0x60,0x20,0x00
};

uchar code you[]={
0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,
0x24,0x24,0x24,0xF4,0x24,0x06,0x04,0x00,
0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,
0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00
};

uchar code xian[]={
0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,
0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0xFF,
0x42,0x24,0x08,0x14,0x22,0x61,0x20,0x00
};

uchar code gong[]={
0x00,0x00,0x80,0x40,0x30,0x0C,0x00,0xC0,
0x07,0x1A,0x20,0x40,0x80,0x80,0x80,0x00,
0x01,0x01,0x20,0x70,0x28,0x24,0x23,0x20,
0x20,0x28,0x30,0x60,0x00,0x01,0x00,0x00
};

uchar code si[]={
0x10,0x10,0x92,0x92,0x92,0x92,0x92,0x92,
0xD2,0x9A,0x12,0x02,0xFF,0x02,0x00,0x00,
0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,
0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00
};

void main()
{
elcd=0;
lcdinit();
while(1)
{
uchar n;
uchar i;
for(i=63;i>0;i--)
{
writecmd(dispfirst+i);
writecmd(0xb8);//第一页
delay(100);
writecmd(0x40);  //设置列地址,第一列
cs1=1;cs2=0;
for(n=0;n<16;n++)
{
writedata(guang[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x40);  //设置列地址,第一列
cs1=1;cs2=0;
for(n=16;n<32;n++)
{
writedata(guang[n]);
delay(100);
}


writecmd(0xb8);//第一页
delay(100);
writecmd(0x50);  //设置列地址,第17列
cs1=1;cs2=0;
for(n=0;n<16;n++)
{
writedata(dong[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x50);  //设置列地址,第17列
cs1=1;cs2=0;
for(n=16;n<32;n++)
{
writedata(dong[n]);
delay(100);
}


writecmd(0xb8);//第一页
delay(100);
writecmd(0x60);  //设置列地址,第33列
cs1=1;cs2=0;
for(n=0;n<16;n++)
{
writedata(you[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x60);  //设置列地址,第33列
cs1=1;cs2=0;
for(n=16;n<32;n++)
{
writedata(you[n]);
delay(100);
}


writecmd(0xb8);//第一页
delay(100);
writecmd(0x70);  //设置列地址,第49列
cs1=1;cs2=0;
for(n=0;n<16;n++)
{
writedata(xian[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x70);  //设置列地址,第49列
cs1=1;cs2=0;
for(n=16;n<32;n++)
{
writedata(xian[n]);
delay(100);
}

writecmd(0xb8);//第一页
delay(100);
writecmd(0x40);  //设置列地址,第一列
cs1=0;cs2=1;
for(n=0;n<16;n++)
{
writedata(gong[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x40);  //设置列地址,第一列
cs1=0;cs2=1;
for(n=16;n<32;n++)
{
writedata(gong[n]);
delay(100);
}

writecmd(0xb8);//第一页
delay(100);
writecmd(0x50);  //设置列地址,第17列
cs1=0;cs2=1;
for(n=0;n<16;n++)
{
writedata(si[n]);
delay(100);
}

writecmd(0xb9);//第二页
delay(100);
writecmd(0x50);  //设置列地址,第17列
cs1=0;cs2=1;
for(n=16;n<32;n++)
{
writedata(si[n]);
delay(100);
}


}
}
}

/*
void busy(void)
{
P1=0xff;
while(1)
{
cs1=1;cs2=1;
elcd=0;
rs=0;
rw=1;
elcd=1;
if(P1<0x80)break;
elcd=0;
}
elcd=0;
}

/*
void lcdbusyR(void)
{  /*
datalcd=0xff;
cs1=0;cs2=1;
rw=1;
rs=0;//elcd=0;
_nop_();
elcd=1;
_nop_();_nop_();
//elcd=0;
getdata=datalcd;
while(datalcd&lcdbusy);
elcd=0;
//
P0=0xff;
//rs=0;rw=1;

}
*/

void delay(uchar MS)
{
while(MS!=0)MS--;
}


void writecmd(uchar Reg_Code)
{
cs1=1;cs2=1;
elcd=0;
 rs=0;
 rw=0;
 datalcd=Reg_Code;
// elcd=0;
// delay(10);
 elcd=1;
// delay(10);
 elcd=0;
}


void writedata(uchar Disp_Data)
{
 rs=1;
 rw=0;
 elcd=0;
 datalcd=Disp_Data;
// elcd=0;
// delay(10);
 elcd=1;
// delay(10);
 elcd=0;
}
/*
uchar readdata()
{
uchar Disp_Data;

rs=1;
rw=1;
// datalcd=0xff;
 elcd=1;
 delay(5);
 Disp_Data=datalcd;
 elcd=0;
//读第二次,第一次为虚读
elcd=0;
rs=1;
rw=1;
// datalcd=0xf0;
 elcd=1;
 delay(10);
 Disp_Data=datalcd;
 elcd=0;

 return Disp_Data;
}
*/
void clr_screen()
{
  uchar j,k;

  for(k=0;k<8;k++){
  writecmd(0xb8+k);
  writecmd(0x40);
  for(j=0;j<64;j++)
  {writedata(0x00);
  delay(1000);}
 }
}



void lcdinit(void)
{
rst=0;
delay(1000);
rst=1;
_nop_();
_nop_();


//cs1=1;cs2=1;
cbyte=dispon;
writecmd(cbyte);
//delay(10);


cbyte=dispfirst; //显示起始行
writecmd(cbyte);
//delay(10);

cs1=1;cs2=1;
clr_screen();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -