📄 main.c
字号:
//******************************************************
//Beijing Winsilicon Technology LT.CO,
//File Name: main.c
//Description: LCD Test
//Author: JuGuang,Lee
//Date:
//******************************************************
#include "char.h"
#define LCD_Base1_I (*(volatile unsigned char *)0x03F00040) //LCD左半屏指令地址
#define LCD_Base1_D (*(volatile unsigned char *)0x03F00044) //LCD左半屏数据地址
#define LCD_Base2_I (*(volatile unsigned char *)0x03F00050) //LCD右半屏指令地址
#define LCD_Base2_D (*(volatile unsigned char *)0x03F00054) //LCD右半屏数据地址
void Delay(unsigned int);
void LCDInit(void);
void LCDTest(unsigned char Data);
void DispData(unsigned char);
void SetPageAddress(unsigned char);
void SetY(unsigned char);
void DispChinese(unsigned char Data[],int Pos,int Line,int Index);
//*********************************************************
//函数名: C_Entry();
//描述: 循环显示汉字信息;
//参数: 无;
//返回值: 0;
//*********************************************************
int C_Entry()
{
//LCD初始化;
LCDInit();
while(1)
{
//显示第一行的信息;
LCDTest(0x00);
DispChinese(ChE,0,0,0);
DispChinese(Ch2,0,0,1);
DispChinese(Ch3,0,0,2);
DispChinese(Ch4,0,0,3);
DispChinese(Ch5,1,0,0);
DispChinese(Ch6,1,0,1);
DispChinese(ChE,1,0,2);
DispChinese(ChE,1,0,3);
//显示第二行的信息;
DispChinese(ChE,0,1,0);
DispChinese(ChE,0,1,1);
DispChinese(ChE,0,1,2);
DispChinese(ChE,0,1,3);
DispChinese(ChE,1,1,0);
DispChinese(ChE,1,1,1);
DispChinese(ChE,1,1,2);
DispChinese(ChE,1,1,3);
//显示第三行的信息;
DispChinese(ChE,0,2,0);
DispChinese(Ch7,0,2,1);
DispChinese(Ch8,0,2,2);
DispChinese(Ch9,0,2,3);
DispChinese(Ch10,1,2,0);
DispChinese(Ch11,1,2,1);
DispChinese(Ch12,1,2,2);
DispChinese(Ch13,1,2,3);
//显示第四行的信息;
DispChinese(ChE,0,3,0);
DispChinese(ChE,0,3,1);
DispChinese(ChE,0,3,2);
DispChinese(ChE,0,3,3);
DispChinese(ChE,1,3,0);
DispChinese(ChE,1,3,1);
DispChinese(ChE,1,3,2);
DispChinese(ChE,1,3,3);
Delay(500000);
}
return 0;
}
//*********************************************************
//函数名: Delay();
//描述: 软件延时;
//参数: 延时时间;
//返回值: 无;
//*********************************************************
void Delay(unsigned int x)
{
int i;
for(i=0;i<x;i++);
}
//*********************************************************
//函数名: DispChinese();
//描述: 在LCD屏的某个位置显示一个16×16点阵的汉字;
//参数: 汉字字模;左右半屏选择;行信息;列信息
//返回值: 无;
//*********************************************************
void DispChinese(unsigned char Data[],int Pos,int Line,int Index)
{
int i;
if(Pos==0)
{SetPageAddress(0xB8+Line*2);
SetY(0x40+16*Index);
for(i=0;i<16;i++){
LCD_Base1_D=Data[i];
Delay(5000);
}
SetPageAddress(0xB9+Line*2);
SetY(0x40+16*Index);
for(i=16;i<32;i++){
LCD_Base1_D=Data[i];
Delay(5000);
}
}
else
{SetPageAddress(0xB8+Line*2);
SetY(0x40+16*Index);
for(i=0;i<16;i++){
LCD_Base2_D=Data[i];
Delay(5000);
}
SetPageAddress(0xB9+Line*2);
SetY(0x40+16*Index);
for(i=16;i<32;i++){
LCD_Base2_D=Data[i];
Delay(5000);
}
}
}
//*********************************************************
//函数名: DispData();
//描述: 向显示缓冲区写入一个字符;
//参数: 写入的字符信息;
//返回值: 无;
//*********************************************************
void DispData(unsigned char Data)
{
int i;
for(i=0;i<64;i++){
LCD_Base1_D=Data;
Delay(1000);
LCD_Base2_D=Data;
Delay(1000);
}
}
//*********************************************************
//函数名: LCDInit();
//描述: 初始化LCD显示屏;
//参数: 无;
//返回值: 无;
//*********************************************************
void LCDInit()
{
//首先关闭左、右半屏
LCD_Base1_I=0x3E;
Delay(5000);
LCD_Base2_I=0x3E;
Delay(5000);
//然后打开
LCD_Base1_I=0x3F;
Delay(5000);
LCD_Base2_I=0x3F;
Delay(5000);
//设置起始行数
LCD_Base1_I=0xC0;
Delay(5000);
LCD_Base2_I=0xC0;
Delay(5000);
//设置Y地址(Y=0)
LCD_Base1_I=0x40;
Delay(5000);
LCD_Base2_I=0x40;
Delay(5000);
return;
}
//*********************************************************
//函数名: LCDTest();
//描述: 向全屏发送同一个字符,用于测试;
//参数: 要发送的字符;
//返回值: 无;
//*********************************************************
void LCDTest(unsigned char Data)
{
int i;
for(i=0;i<8;i++)
{SetPageAddress(0xB8+i);
DispData(Data);}
}
//*********************************************************
//函数名: SetY();
//描述: 设置Y地址;
//参数: Y地址信息;
//返回值: 无;
//*********************************************************
void SetY(unsigned char YAddress)
{
LCD_Base1_I=YAddress;
Delay(5000);
LCD_Base2_I=YAddress;
Delay(5000);
}
//*********************************************************
//函数名: SetPageAddress();
//描述: 设置页地址;
//参数: 页地址信息;
//返回值: 无;
//*********************************************************
void SetPageAddress(unsigned char PageAddress)
{
LCD_Base1_I=PageAddress;
Delay(5000);
LCD_Base2_I=PageAddress;
Delay(5000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -