📄 xs.c
字号:
#include <reg52.h>
#include <intrins.h>
sbit LCD_RS =P2^4; //L:COMMAND; H:DATA
sbit LCD_RW =P2^3; //L:WRITE; H:READ
sbit LCD_E =P2^2; //INPUT ENABLE
sbit LCD_CS1 =P2^1; //CHIP ENABLE L有效
sbit LCD_RES =P2^0; //RESET SIGNAL,L有效
#define data_bus P0
#define uchar unsigned char
#define uint unsigned int
//=====延时N微秒==============
void delay_nus(uint n)
{
while(n--);
return;
}
//=====延时N毫秒==============
void delay_nms(uint n)
{
int i;
for(i=0;i<n;i++)
delay_nus(123);
}
//=====忙检测=================
void check_busy(void)
{
uchar read_data=0xff;
data_bus=0xff;
LCD_RS=0;
LCD_RW=1; //读命令
LCD_CS1=0; //片使能
while((read_data&0x80)==0x80)
{
LCD_E=1;
_nop_();
_nop_();
read_data=data_bus;
LCD_E=0;
}
LCD_E=0;
LCD_CS1=1; //片禁能
}
//=====写命令到寄存器=========
void send_cmd(uchar cmd) small
{
check_busy();
LCD_RS=0;
LCD_RW=0; //写命令
LCD_CS1=0; //片使能
data_bus=cmd;
LCD_E=1;
_nop_();
_nop_();
LCD_E=0;
_nop_();
_nop_();
LCD_CS1=1; //片禁能
}
//=====写数据到DDRAM=========
void send_dat(uchar dat) small
{
check_busy();
LCD_RS=1;
LCD_RW=0; //写数据
LCD_CS1=0; //片使能
data_bus=dat;
LCD_E=1;
_nop_();
_nop_();
LCD_E=0;
_nop_();
_nop_();
LCD_CS1=1; //片禁能
}//=======初始化==============
void lcd_initial(void) small
{
LCD_RES=1;
LCD_E=0;
delay_nms(50);
send_cmd(0xA0);
send_cmd(0xC8);
send_cmd(0xA2);
send_cmd(0x2C);
send_cmd(0x2E);
send_cmd(0x2F);
send_cmd(0x25);
send_cmd(0x81);
send_cmd(0x14);
send_cmd(0xAF);
send_cmd(0xE0);
send_cmd(0x40);
}
//=======写页地址==============
void Set_Page_Address(unsigned char dat)
{
send_cmd(0xb0|dat);
}
//=======写列地址==============
void Set_Colume_Address(unsigned char dat)
{
unsigned char tmp;
tmp=dat>>5;
send_cmd(0x10|tmp); //送列地址高三位
tmp=0x0f&dat;
send_cmd(tmp); //送列地址低四位
}
//=======显示点阵==============
void Display_Grid(uchar data1,uchar data2)
{
uchar i,j;
for(i=0;i<8;i++)
{
Set_Page_Address(i);
Set_Colume_Address(0x00);
for(j=0;j<64;j++)
{
send_dat(data1);
send_dat(data2);
}
}
}
//=======显示图形===============
void Display_Picture(uchar code *pic)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
Set_Page_Address(i);
Set_Colume_Address(0x00);
for(j=0;j<0x80;j++)
{
send_dat(*(pic+0x80*i+j));
}
}
}
/*---指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)---*/
void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn)
{
uchar i,j,k,l,a;
wr_lcd (comm,disp_on);
for(l=0;l<row_xl;l++)
{
for(k=0;k<row_yl;k++)
{
for(j=0;j<xl;j++)
{
wr_lcd (comm,disp_x+x+l*xl+j);
wr_lcd (comm,disp_z);
wr_lcd (comm,disp_y+y+k*yl);
a=l*xl*yl*row_yl+k*xl*yl+j*yl;
for(i=0;i<yl;i++)
wr_lcd (dat,chn[a+i]);
}
}
}
}
uchar code pic[]={
0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x48,0xD4,0xB4,0x62,0xC2,0x82,0x02,
0x02,0x02,0x02,0x84,0xC4,0xE0,0xA0,0xE0,0x60,0x20,0x20,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x04,0x0D,0x1B,0x36,0x6D,0xDB,0xF6,0xED,0xFB,
0xFE,0xFE,0xFF,0x7F,0x1F,0x07,0x01,0x00,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x10,0x20,0x40,0x40,0x80,0x83,0xFF,0xFF,
0xFF,0xFF,0x83,0x40,0x40,0x20,0x10,0x08,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x7C,0x44,0xEC,0x00,0x7C,0x44,0x7C,0x00,0x7C,0x40,0x40,0x00,0x7C,0x44,0x38,0x00,
0x7C,0x14,0x1C,0x00,0x78,0x24,0x78,0x00,0x7C,0x40,0x40,0x00,0x7C,0x18,0x18,0x7C};
uchar code pic1[]={
/*-- 宽度x高度=32x32 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xB7,0x2B,0x4B,0x9D,0x3D,0x7D,0xFD,
0xFD,0xFD,0xFD,0x7B,0x3B,0x1F,0x5F,0x1F,0x9F,0xDF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x01,0xFE,0xFF,0xFB,0xF2,0xE4,0xC9,0x92,0x24,0x09,0x12,0x04,
0x01,0x01,0x00,0x80,0xE0,0xF8,0xFE,0xFF,0xEF,0xEF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFB,0xF7,0xEF,0xDF,0xBF,0xBF,0x7F,0x7C,0x00,0x00,
0x00,0x00,0x7C,0xBF,0xBF,0xDF,0xEF,0xF7,0xFB,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x83,0xBB,0x13,0xFF,0x83,0xBB,0x83,0xFF,0x83,0xBF,0xBF,0xFF,0x83,0xBB,0xC7,0xFF,
0x83,0xEB,0xE3,0xFF,0x87,0xDB,0x87,0xFF,0x83,0xBF,0xBF,0xFF,0x83,0xE7,0xE7,0x83};
//=====主程序===================
void main (void)
{
lcd_initial();
while(1)
{
send_cmd(0xa6);
Display_Picture(pic);
delay_nms(2000);
send_cmd(0xa7);
delay_nms(2000);
send_cmd(0xa6);
Display_Picture(pic1);
delay_nms(2000);
send_cmd(0xa7);
delay_nms(200);
send_cmd(0xa6);
Display_Grid(0xff,0x00);
delay_nms(2000);
send_cmd(0xa7);
delay_nms(2000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -