📄 lcd12864.c
字号:
#include "config.h"
#include "zimu.h"
/*******************************************************************************************/
#define Disp_On 0x3f // 显示开指令 //
#define Disp_Off 0x3e // 显示关指令 //
#define Col_Add 0x40 // 定位到第0列指令 //
#define Page_Add 0xb8 // 定位到第0页指令 //
#define Start_Line 0xc0 // 定位从DDROM中的第0行开始往屏幕上显示 //
//uchar chip_select=1;
/*******************************************************************************************/
#define E 1<<8 // 使能端 //
#define RW 1<<9 // 读写控制端 //
#define RS 1<<10 // 数据或指令寄存器选择端 //
#define CS2 1<<11 // 右屏使能 //
#define CS1 1<<12 // 左屏使能 /
#define RST 1<<13 // 复位端 //
#define PORT 0xff<<0
/*************************************************************************************************/
/*-------------------延时子程序-----------------------------*/
void delay( uint32 t)
{
uint32 i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
/*-------------------------写命令到LCD------------------------------*/
void write_command(uint8 cmdcode)
{
IO0CLR=RS;
IO0CLR=RW;
IO0SET = (cmdcode)<<0; //////******//数据 P0
delay(0);
IO0SET=E;
delay(0);
IO0CLR=E;
}
/*-------------------------写数据到LCD----------------------------*/
void write_data( uint8 Dispdata)
{
IO0SET=RS;
IO0CLR=RW;
IO0SET=(Dispdata)<<0;
delay(0);
IO0SET=E;
delay(0);
IO0CLR=E;
}
/*-------------------------读LCD数据----------------------------*/
/*
UINT8 read_data()
{
UINT8 tmpin;
IO0SET=PORT;
IO0SET=RS;
IO0SET=RW;
delay(0);
IO0SET=E;
delay(0);
IO0CLR=E;
IO0SET=E;//???????
tmpin = P0;//????????
return tmpin;
}*/
/*------------------------清显示屏--------------------------------*/
void Clr_Scr(void)
{
uint8 j,k;
IO0CLR=CS2;IO0SET=CS1; // 清左半屏 //
{
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清左上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
{
write_command(Col_Add+j);
write_data(0x00);
}
}
}
IO0SET=CS2; IO0CLR=CS1; // 清右半屏 //
{
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清右上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
{
write_command(Col_Add+j);
write_data(0x00);
}
}
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd(void)
{
IO0CLR=RST;
delay(100);
IO0SET=RST;
delay(100);
IOSET=CS2;
IOSET=CS1;
delay(100);
write_command(Disp_Off);
write_command(Page_Add+0);
write_command(Start_Line+0);
write_command(Col_Add+0);
write_command(Disp_On);
}
/*********************************************************************/
void sz_disp16(uint8 pag,uint8 col, uint8 const *szk)
{
uint8 j=0,i=0;
for(j=0;j<2;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+col);
for(i=0;i<8;i++)
write_data(szk[8*j+i]);
}
}
void sz_disp8(uint8 pag,uint8 col, uint8 const *szk)
{
uint8 j=0,i=0;
for(j=0;j<1;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+col);
for(i=0;i<8;i++)
write_data(szk[8*j+i]);
}
}
/*---------------------指定位置显示汉字16*16-----------------------*/
void hz_disp16(uint8 pag,uint8 col, uint8 const *hzk)
{
uint8 j=0,i=0;
for(j=0;j<2;j++)
{
write_command(Page_Add+pag+j);
write_command(Col_Add+col);
for(i=0;i<16;i++)
write_data(hzk[16*j+i]);
}
}
/********************************************************************/
/*------------------显示12864图片---------------------------*/
void Disp_Img(uint8 const *img)
{
uint8 j,k;
for(k=0;k<8;k++)
{
IO0SET=CS2;
IO0CLR=CS1;
delay(10);
write_command(Page_Add+k);
write_command(Col_Add+0);
for(j=0;j<64;j++)
write_data(img[k*128+j]);
IO0CLR=CS2;
IO0SET=CS1;
delay(10);
write_command(Page_Add+k);
write_command(Col_Add+0);
for(j=64;j<128;j++)
write_data(img[k*128+j]);
}
}
/**********************************************************************/
void show(void)
{
Clr_Scr();
IO0SET=CS2;IO0CLR=CS1;
hz_disp16(0,32,gong);
delay(1000);
hz_disp16(0,48,neng);
delay(1000);
IO0CLR=CS2;IO0SET=CS1;
hz_disp16(0,0,xuan);
delay(100);
hz_disp16(0,16,ze);
delay(1000);
IO0SET=CS2;IO0CLR=CS1;
hz_disp16(2,0,yi1);
delay(1000);
hz_disp16(2,32,shou);
delay(1000);
hz_disp16(2,48,dong);
delay(1000);
IO0CLR=CS2;IO0SET=CS1;
hz_disp16(2,0,mo);
delay(2000);
hz_disp16(2,16,shi1);
delay(1000);
//hz_disp16(2,48,fbfan);
// delay(100);
IO0SET=CS2;IO0CLR=CS1;
hz_disp16(4,0,er);
delay(1000);
hz_disp16(4,32,zi);
delay(1000);
hz_disp16(4,48,dong);
delay(1000);
IO0CLR=CS2;IO0SET=CS1;
hz_disp16(4,0,mo);
delay(1000);
hz_disp16(4,16,shi1);
delay(1000);
//hz_disp16(4,48,fbhui);
// delay(100);
IO0SET=CS2;IO0CLR=CS1;
hz_disp16(6,0,san);
delay(1000);
hz_disp16(6,32,yu1);
delay(1000);
hz_disp16(6,48,le);
delay(1000);
IO0CLR=CS2;IO0SET=CS1;
hz_disp16(6,0,mo);
delay(1000);
hz_disp16(6,16,shi1);
delay(1000);
}
void shuzishow(unsigned char arr)
{
IO0CLR=CS2;IO0SET=CS1;
write_command(Page_Add+0);
sz_disp16(0,0,shuzi[arr]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -