12864.c
来自「在Keil uVision3环境下开发的」· C语言 代码 · 共 552 行 · 第 1/2 页
C
552 行
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/*软件延时 Delay()*/
void Delay(unsigned int count)
{
unsigned char i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";" 表示空语句,CPU空转。
} // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/*LCM12864测忙函数 LCM12864_TestBusy()*/
void LCM12864_TestBusy(void)
{
LCM12864_RW = 1;
LCM12864_RS = 0;
LCM12864_E = 0;
LCM12864_E = 1;
while(LCM12864_DB7_DB0 & LCM12864_STATUS_BUSY);
}
/*写指令到LCM12864 LCM12864_WriteCMD()*/
void LCM12864_WriteCMD(unsigned char LCM12864_command)
{ //LCM12864_command 欲写入指令
LCM12864_TestBusy();
LCM12864_RW = 0; LCM12864_RS = 0;
LCM12864_DB7_DB0 = LCM12864_command;
LCM12864_E = 0;
LCM12864_E = 1;
LCM12864_TestBusy();
}
/*写数据到LCM12864 LCM12864_WriteData()*/
void LCM12864_WriteData(unsigned char LCM12864_data)
{ //LCM12864_command 欲写入数据
LCM12864_RW = 0; LCM12864_RS = 1;
LCM12864_DB7_DB0 = LCM12864_data;
LCM12864_E = 0;
LCM12864_E = 1;
LCM12864_TestBusy(); //读LCM忙
}
/*向LCM12864填充数据 LCM12864_Fill_Screen()*/
void LCM12864_Fill_Screen( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
unsigned char LCM12864_FillData)//欲写入的数据
{
unsigned char x,y;
LCM12864_CS1 = 0;LCM12864_CS2 = 0; // 选中左半屏及右半屏
LCM12864_WriteCMD(LCM12864_START_ROW+0); // 设置显示起始行为0
for(x=0;x<8;x++)
{
Delay(t); // 涮屏速度延时
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+x); // 设置页地址
// // 设置列地址
for(y=0;y<64;y++)
{
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+y);
LCM12864_WriteData(LCM12864_FillData);
}
}
LCM12864_CS1 = 1; // 不选中右半屏
LCM12864_CS2 = 1; // 不选中右半屏
}
/*LCM12864清屏 LCM12864_Clear_Screen()*/
void LCM12864_Clear_Screen(void)
{
LCM12864_Fill_Screen(60,0x00); //写入0到每个显示区
}
/*显示128*64图片 LCM12864_Disp_Bitmap_12864()*/
void LCM12864_Disp_Bitmap_12864( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
unsigned char code *bitmap_12864)//128*64点阵图像所在数组表
{
unsigned char j,k;
for(k=0;k<8;k++)
{ //设置8页的显示
Delay(t);
LCM12864_CS1 = 0;LCM12864_CS2 = 1; //半屏选中
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k); //选中页
//选中列
for(j=0;j<64;j++)
{
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j);
LCM12864_WriteData(bitmap_12864[k*128+j]); //开始写入数据
}
LCM12864_CS1 = 1;LCM12864_CS2 = 0;
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k);
for(j=64;j<128;j++)
{
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j-64);
LCM12864_WriteData(bitmap_12864[k*128+j]);
}
}
}
/*在LCM12864的指定点显示16*16点阵汉字 LCM12864_Disp_Chinese_16_16()*/
void LCM12864_Disp_Char_x_16(
unsigned char t, //设置书写速度(为1直接显示,默认为12)
unsigned char b, //输入8:8*16字符,16:16*16字符
unsigned char LCM12864_page, //LCM12864的页地址(0~7)
unsigned char LCM12864_col, //LCM12864的列地址(0~128)注意:右半屏起始是64
unsigned char *Char_x_16) //16*16点阵汉字字模(纵向取模,字节倒序)
{
unsigned char j=0,i=0;
if(LCM12864_col < 64 )
{
LCM12864_CS1 = 0; LCM12864_CS2 = 1; //判断屏幕使能
}
else
{
LCM12864_CS1 = 1; LCM12864_CS2 = 0;
LCM12864_col = LCM12864_col - 64;
}
for(j=0;j<2;j++)
{
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
for(i=0;i<b;i++)
{
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+LCM12864_col+i);
LCM12864_WriteData(Char_x_16[b*j+i]);
Delay(t);
}
}
}
/*用一个一维数组time[]来存储时间,时间格式00:00:00*/
/*void disbuftime(void)
{
time[7]=second%10;
time[6]=second/10;
time[5]=10;
time[4]=minute%10;
time[3]=minute/10;
time[2]=10;
time[1]=hour%10;
time[0]=hour/10;
}*/
/*写时间*/
/*void distime(unsigned char timecode)
{
unsigned char j=0,i=0;
LCM12864_CS1 = 0; LCM12864_CS2 = 1; //左屏
disbuftime();
for(j=6;j<8;j++)//页
{
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+j);
for(i=0;i<8;i++)
{
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+i);
LCM12864_WriteData(timecode[time[i]][16]);
}
}
} */
/*LCM12864初始化 LCM12864_Init()*/
void LCM12864_Init(void)
{
LCM12864_RESET = 0; //复位
Delay(300);
LCM12864_RESET = 1;
Delay(300);
LCM12864_Clear_Screen(); //清除屏幕
LCM12864_CS1 = 0; LCM12864_CS2 = 0; //选中双屏
LCM12864_WriteCMD(LCM12864_DISP_OFF); //关显示
LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0); //第0页位置
LCM12864_WriteCMD(LCM12864_START_ROW+0); //第0行
LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0); //第0列
LCM12864_WriteCMD(LCM12864_DISP_ON); //开显示
/* TMOD = 0x01; // 定时器0,, 16位定时方式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
hour=00;
minute=00;
second=00;
EA=1;
ET0=1;
TR0=1; */
}
/* 以上是 LCM12864液晶模块驱动程序*/
/*LCM12864液晶模块驱动演示 main()*/
void main (void)
{
unsigned char /*lx = 32,*/i;
LCM12864_Init(); // LCM12864初始化
while(1)
{
LCM12864_Disp_Bitmap_12864(60,tuxin); //显示图像
Delay(3000); //延时3秒
LCM12864_Clear_Screen(); //清除屏幕
LCM12864_Disp_Char_x_16(12,16,0,5,chuang);
Delay(500);
LCM12864_Disp_Char_x_16(12,16,0,25,xin);
Delay(500);
LCM12864_Disp_Char_x_16(12,16,0,45,shi);
Delay(500);
LCM12864_Disp_Char_x_16(12,16,0,65,ya);
Delay(500);
LCM12864_Disp_Char_x_16(12,16,0,85,si);
Delay(500);
for(i=0;i<3;i++)
{ //显示字符串“Dy1286
LCM12864_Disp_Char_x_16(1,16,2,32+16*i,nAsciiDot+32*i); //显示"12864",从第二行32列开始
// Delay(1000);
}
for(i=0;i<15;i++)
{
LCM12864_Disp_Char_x_16(12,8,4,8*i,Tel+16*i);
Delay(100);
}
// LCM12864_Disp_Char_x_8(6,0,timecode[time[i]][16]);
//Delay(1000);
}
}
/*定时器中断0的方式1来处理时钟显示*/
/*void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)//每进入一次为1秒
{
count=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
} */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?