📄 jlx12864g-0088-1.c
字号:
#include <iom128v.h>
#include <macros.h>
#define unsingt int u8
#define CS PA0//片选
#define RESET PA1//复位
#define RS PA2//寄存器操作选择(0-传送命令 1-传送数据)
#define SCLK PA3//时钟
#define SID PA4//数据
#define SET_CS PORTA|=BIT(PA0)
#define SET_RESET PORTA|=BIT(PA1)
#define SET_RS PORTA|=BIT(PA2)
#define SET_SCLK PORTA|=BIT(PA3)
#define SET_SID PORTA|=BIT(PA4)
#define CLR_CS PORTA&=~BIT(PA0)
#define CLR_RESET PORTA&=~BIT(PA1)
#define CLR_RS PORTA&=~BIT(PA2)
#define CLR_SCLK PORTA&=~BIT(PA3)
#define CLR_SID PORTA&=~BIT(PA4)
char quan[];
char tao[];
char ye[];
char jing[];
char jie[];
char jue[];
char fang[];
char an[];
char lian[];
char xun[];
char mo[];
char kuai[];
char chang[];
char num0[];
char num1[];
char num2[];
char num3[];
char num4[];
char num5[];
char num6[];
char num7[];
char num8[];
char num9[];
void LCM_Delay(int time) /*LCM延时,用于LCM显示输出时序控制*/
{
long int j;
for(j=0;j<time;j++)
;
}
void LCM_DelayLong(long int i)
{
int j,k;
for(k=0;k<i;k++)
{
for(j=0;j<0xff;j++)
;
}
}
void LCM_DelayShort(int i)
{
int j=0;
while(i--)
{
for(j=0;j<10;j++);
}
}
void LCM_WrCmd(char cmd) /*向LCM写命令*/
{
int i;
CLR_RS;
CLR_CS;
for(i=0;i<8;i++) /*从高到低取位*/
{
CLR_SCLK;
if(cmd & 0x80)
{
SET_SID;
}
else
{
CLR_SID;
}
SET_SCLK;
cmd <<= 1;
}
}
void LCM_WrData(int data)/*向LCM写数据*/
{
int i;
CLR_CS;
SET_RS;/*传送数据*/
for(i=0;i<8;i++)/*从高到低取位*/
{
CLR_SCLK;
if(data & 0x80)
{
SET_SID;
}
else
{
CLR_SID;
}
SET_SCLK;
data <<= 1;
}
}
void LCM_Init(void)/*LCM初始化*/
{
CLR_RESET;
LCM_DelayLong(20);
SET_RESET;
LCM_DelayLong(20);
LCM_WrCmd(0xE2);/*软件复位*/
LCM_DelayLong(5);
LCM_WrCmd(0x2C);
LCM_WrCmd(0x2E);
LCM_WrCmd(0x2F);
LCM_DelayLong(20);
LCM_WrCmd(0x23);/*粗调对比度(0x20-0x27)(即设置内部调压电阻值)*/
LCM_WrCmd(0x81);/*微调对比度*/
LCM_WrCmd(0x28);/*微调对比度的值(0x00-0x3F)*/
LCM_WrCmd(0xA2);/*偏压比(0xA2 - 1/9; 0xA3 - 1/7)*/
LCM_WrCmd(0xA0);/*列扫描顺序(0xA0-常规(从左到右); 0xA1-反转(从右到左))*/
LCM_WrCmd(0xC8);/*行扫描顺序(0xC0-普通(从下到上); 0xC8-反向(从上到下))*/
LCM_WrCmd(0xAF);/*开启LCD显示(0xAF-开; 0xAE-关)*/
}
void clear_screen(void)/*全屏填充(data: 0x00-清屏; 0xFF-黑屏; 其他-间距不同的黑白相间的图案)*/
{
int i=0, j=0;
for(i=0;i<8;i++)
{
CLR_CS;
LCM_WrCmd(0xB0+i);/*设置页地址*/
LCM_WrCmd(0x10);
LCM_WrCmd(0x00);
for(j=0;j<128;j++)
{
LCM_WrData(0x00);
}
}
}
/*在指定行和列位置显示指定的汉字(16*16点阵的汉字)*/
void disp_grap(int line,int column,char *dp)
{
int i,j,k,col_l,col_h;
for(i=0;i<2;i++)
{
CLR_CS;
LCM_WrCmd(0xb0+i+2*(line-1)); //set page address,
k=column-1;
k=k*0x10;
col_h=k&0xf0;
col_h=col_h>>4;
col_l=k&0x0f;
LCM_WrCmd(0x10+col_h);
LCM_WrCmd(0x00+col_l);
for(j=0;j<16;j++)
{
LCM_WrData(*dp);
dp++;
}
}
}
/*在指定行和列位置显示指定的字母、数字(8*16点阵的)*/
void disp_char(int line,int column,char *dp)
{
int i,j,k,col_l,col_h;
for(i=0;i<2;i++)
{
CLR_CS;
LCM_WrCmd(0xb0+i+2*(line-1)); //set page address,
k=column-1;
k=k*0x08;
col_h=k&0xf0;
col_h=col_h>>4;
col_l=k&0x0f;
LCM_WrCmd(0x10+col_h);
LCM_WrCmd(0x00+col_l);
for(j=0;j<8;j++)
{
LCM_WrData(*dp);
dp++;
}
}
}
void main(void)
{
DDRA = 0xff;
LCM_Init();
while(1)
{
clear_screen(); //clear all dots
disp_grap(1,1,quan); /*在第1行第1列显示一个 16*16 点阵汉字:全*/
//delay(20);
disp_grap(1,2,tao); /*在第1行第2列显示一个 16*16 点阵汉字:套*/
//delay(20);
disp_grap(1,3,ye); /*显示一个 16*16 点阵汉字:液*/
//delay(20);
disp_grap(1,4,jing); /*显示一个 16*16 点阵汉字:晶*/
//delay(20);
disp_grap(1,5,jie); /*显示一个 16*16 点阵汉字:解*/
//delay(20);
disp_grap(1,6,jue); /*显示一个 16*16 点阵汉字:决*/
//delay(20);
disp_grap(1,7,fang); /*显示一个 16*16 点阵汉字:方*/
//delay(20);
disp_grap(1,8,an); /*显示一个 16*16 点阵汉字:案*/
//delay(20);
disp_grap(2,1,jing); /*显示一个 16*16 点阵汉字:晶*/
//delay(20);
disp_grap(2,2,lian); /*显示一个 16*16 点阵汉字:联*/
//delay(20);
disp_grap(2,3,xun); /*显示一个 16*16 点阵汉字:讯*/
//delay(20);
disp_grap(2,4,ye); /*显示一个 16*16 点阵汉字:液*/
//delay(20);
disp_grap(2,5,jing); /*显示一个 16*16 点阵汉字:晶*/
//delay(20);
disp_grap(2,6,mo); /*显示一个 16*16 点阵汉字:模*/
//delay(20);
disp_grap(2,7,kuai); /*显示一个 16*16 点阵汉字:块*/
//delay(20);
disp_grap(2,8,chang); /*显示一个 16*16 点阵汉字:厂*/
LCM_DelayLong(1000);
clear_screen(); //clear all dots
disp_char(1,1,num0); /*在第1行第1列显示一个 8*16 点阵数字:0*/
disp_char(1,2,num1); /*在第1行第2列显示一个 8*16 点阵数字:1*/
disp_char(1,3,num2); /*在第1行第3列显示一个 8*16 点阵数字:2*/
disp_char(1,4,num3); /*在第1行第4列显示一个 8*16 点阵数字:3*/
disp_char(1,5,num4); /*在第1行第5列显示一个 8*16 点阵数字:4*/
disp_char(1,6,num5); /*以下类同*/
disp_char(1,7,num6);
disp_char(1,8,num7);
disp_char(1,9,num8);
disp_char(1,10,num9);
disp_char(1,11,num0);
disp_char(1,12,num1);
disp_char(1,13,num2);
disp_char(1,14,num3);
disp_char(1,15,num4);
disp_char(1,16,num5);
disp_char(2,1,num0); /*在第2行第1列显示一个 8*16 点阵数字:0*/
disp_char(2,2,num1); /*在第2行第2列显示一个 8*16 点阵数字:1*/
disp_char(2,3,num2); /*在第2行第3列显示一个 8*16 点阵数字:2*/
disp_char(2,4,num3); /*在第2行第4列显示一个 8*16 点阵数字:3*/
disp_char(2,5,num4); /*在第2行第5列显示一个 8*16 点阵数字:4*/
disp_char(2,6,num5); /*以下类同*/
disp_char(2,7,num6);
disp_char(2,8,num7);
disp_char(2,9,num8);
disp_char(2,10,num9);
disp_char(2,11,num0);
disp_char(2,12,num1);
disp_char(2,13,num2);
disp_char(2,14,num3);
disp_char(2,15,num4);
disp_char(2,16,num5);
LCM_DelayLong(1000);
}
}
char quan[]={
/*-- 文字: 全 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x40,0x60,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x70,0x60,0x20,0x00,0x00,
0x00,0x40,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x46,0x44,0x60,0x40,0x00
};
char tao[]={
/*-- 文字: 套 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x44,0x24,0x24,0xF4,0x5C,0x57,0x54,0x54,0x5C,0x54,0x24,0x64,0xC4,0x44,0x00,
0x04,0x04,0x44,0x64,0x57,0x4D,0x45,0x65,0x25,0x25,0x35,0xE4,0x44,0x04,0x04,0x00
};
char ye[]={
/*-- 文字: 液 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00,
0x04,0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00
};
char jing[]={
/*-- 文字: 晶 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,
0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00
};
char jie[]={
/*-- 文字: 解 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0xF4,0x57,0x54,0xFC,0x54,0xF0,0x42,0xA2,0x1E,0x02,0xA2,0x62,0x3E,0x00,0x00,
0x80,0x7F,0x02,0x02,0x5F,0x82,0x7F,0x0A,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x00
};
char jue[]={
/*-- 文字: 决 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x04,0xD8,0x08,0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x02,0xFE,0x01,0x80,0x41,0x21,0x11,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00
};
char fang[]={
/*-- 文字: 方 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0x08,0x08,0x08,0x08,0xF9,0x4A,0x4C,0x48,0x48,0xC8,0x08,0x08,0x08,0x00,
0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x40,0x40,0x3F,0x00,0x00,0x00,0x00
};
char an[]={
/*-- 文字: 案 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x2C,0x24,0x64,0x74,0xAD,0xA6,0xE4,0x34,0x24,0x24,0x2C,0x24,0x00,0x00,
0x00,0x24,0x24,0x25,0x15,0x15,0x0D,0xFE,0x04,0x0D,0x17,0x14,0x24,0x64,0x24,0x00
};
char lian[]={
/*-- 文字: 联 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xFE,0x92,0x92,0x92,0xFE,0x12,0x11,0x12,0x1C,0xF0,0x18,0x17,0x12,0x10,0x00,
0x08,0x1F,0x08,0x08,0x04,0xFF,0x05,0x81,0x41,0x31,0x0F,0x11,0x21,0xC1,0x41,0x00
};
char xun[]={
/*-- 文字: 讯 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x21,0x2E,0xE4,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x02,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x7F,0x00,0x00,0x00,0x00,0x3F,0x40,0x38,0x00
};
char mo[]={
/*-- 文字: 模 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0xD0,0xFF,0x50,0x90,0x04,0xF4,0x54,0x5F,0x54,0x54,0x5F,0xF4,0x04,0x00,0x00,
0x03,0x00,0xFF,0x00,0x00,0x84,0x85,0x45,0x35,0x0F,0x15,0x25,0x65,0xC4,0x44,0x00
};
char kuai[]={
/*-- 文字: 块 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0xFF,0x10,0x10,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x08,0x18,0x0F,0x04,0x85,0x41,0x31,0x0D,0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00
};
char chang[]={
/*-- 文字: 厂 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
char num0[]={
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00
};
char num1[]={
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00
};
char num2[]={
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00
};
char num3[]={
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00
};
char num4[]={
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00
};
char num5[]={
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00
};
char num6[]={
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00
};
char num7[]={
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
};
char num8[]={
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00
};
char num9[]={
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -