📄 main.c
字号:
#include "config.h"
#define LCD_DI 0x00000100 //指令选择线P0.8
#define LCD_RW 0x00000200 //读写选择线P0.9
#define LCD_E 0x00000400 //使能线P0.10
#define LCD_CS1 0x00000800 //左屏选择线P0.11
#define LCD_CS2 0x00001000 //左屏选择线P0.11
#define IO_USE 0x00001FFF //13个GPIO口传输方
#define LCD_RESET 0x00002000
#define LCD_DISP_ON 0x3f
#define LCD_DISP_OFF 0x3e
#define LCD_START_ROW 0xc0 //显示起始行0,可以用LCM12864_START_ROW+x设置起始行。(x<64)
#define LCD_PAGE_START_ADDR 0xb8 // 页起始地址,可以用LCM12864_PAGE_START_ADDR+x设置当前页。(x<8)
#define LCD_COL_START_ADDR 0x40 //列起始地址,可以用LCM12864_COL_START_ADDR+x设置当前列。(x<64)
uint8 huan1[]={
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
};
uint8 ying2[]=
{
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
};
uint8 shi3[]={
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
};
uint8 yong4[]={
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
};
/********************************************************************************************
* 函数名称:Delay()
* 功 能:软件延时
* 入口参数:count 延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(uint16 count)
{
uint8 i;
while(--count != 0)
{
for(i = 0;i < 125; i++); //";" 表示空语句,CPU空转。
} //i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************/
void SendData(uint8 data)
{
IOSET=data;
IOCLR=~data&0x000000FF;
}
/********************************************************************************************
写命令
*********************************************************************************************/
void wcodel(uint8 code)
{
IO0CLR=LCD_RW;
IO0CLR=LCD_DI;
SendData(code);
IO0SET=LCD_E;
IO0CLR=LCD_E;
}
/********************************************************************************************
写数据
*********************************************************************************************/
void wdata1(uint8 data)
{
IO0CLR=LCD_RW;
IO0SET=LCD_DI;
SendData(data);
IO0SET=LCD_E;
IO0CLR=LCD_E;
}
/********************************************************************************************
空读一次 从LCD读一字节数据
*********************************************************************************************/
uint8 Readwdata1(void)
{ uint8 data;
IO0SET=LCD_RW;
IO0SET=LCD_DI;
IO0SET=LCD_E;
IO0PIN=IO0PIN&data;
return data;
}
/********************************************************************************************
向LCD指定点写一字节数据。
*********************************************************************************************/
void Write1_x_y(uint8 x,uint8 y,uint8 data)
{
IO0CLR=LCD_CS1;
IO0CLR=LCD_CS2;
if(x<64)
{
IO0SET=LCD_CS1;
}
else
{
IO0SET=LCD_CS2;
x = x-64;
}
wcodel(LCD_COL_START_ADDR+x); // 设置当前列地址,即x坐标
wcodel(LCD_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
wdata1(data);
}
/********************************************************************************************
从LCD指定点上读取一字数据
*********************************************************************************************/
uint8 Read1_x_y(uint8 x,uint8 y)
{ uint8 data;
IO0CLR=LCD_CS1;
IO0CLR=LCD_CS2;
if(x<64)
{
IO0SET=LCD_CS1;
}
else
{
IO0SET=LCD_CS2;
x = x-64;
}
wcodel(LCD_COL_START_ADDR+x); // 设置当前列地址,即x坐标
wcodel(LCD_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
data=Readwdata1();
IO0PIN=IO0PIN&data;
return data;
}
/********************************************************************************************
LCD初始化
*********************************************************************************************/
void LCD_Init(void)
{
IO0CLR=LCD_RESET;
IO0SET=LCD_RESET;
IO0SET=LCD_CS1;
IO0SET=LCD_CS2;
wcodel(LCD_DISP_OFF);
wcodel(LCD_PAGE_START_ADDR+0);
wcodel(LCD_START_ROW+0);
wcodel(LCD_COL_START_ADDR+0);
wcodel(LCD_DISP_ON);
//IO0SET=LCD_LEDK;
//IO0CLR=LCD_LEDK;
}
/********************************************************************************************
向LCD填充数据
*********************************************************************************************/
void LCD_Fill_Screen(uint8 LCD_FillData)
{
uint8 x,y;
IO0SET=LCD_CS1;
IO0SET=LCD_CS2;
wcodel(LCD_START_ROW+0);
for(x=0;x<8;x++)
{
wcodel(LCD_PAGE_START_ADDR+x);
wcodel(LCD_COL_START_ADDR);
for(y=0;y<64;y++)
wdata1(LCD_FillData);
}
IO0CLR=LCD_CS2;
}
/********************************************************************************************
在LCD的指定点上显示16*16点阵汉字
*********************************************************************************************/
void LCD_Disp_Chinese_16_16(uint8 LCD_page,uint8 LCD_col, uint8 *Chinese_16_16)
{
uint8 j=0,i=0;
for(j=0;j<2;j++)
{
wcodel(LCD_PAGE_START_ADDR+LCD_page+j);
wcodel(LCD_COL_START_ADDR+LCD_col);
for(i=0;i<16;i++)
wdata1(Chinese_16_16[16*j+i]);
}
}
void main(void)
{ PINSEL0=0x00000000;
PINSEL1=0x00000FFF;
while(1)
{
LCD_Init();
IO0SET=LCD_CS1;
IO0CLR=LCD_CS2;
LCD_Disp_Chinese_16_16(1,32,huan1);
Delay(300);
LCD_Disp_Chinese_16_16(1,48,ying2);
Delay(300);
IO0CLR=LCD_CS1;
IO0SET=LCD_CS2;
LCD_Disp_Chinese_16_16(1,0,shi3);
Delay(300);
LCD_Disp_Chinese_16_16(1,16,yong4);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -