字符型12964例程.docx
《字符型12964例程.docx》由会员分享,可在线阅读,更多相关《字符型12964例程.docx(12页珍藏版)》请在冰豆网上搜索。
![字符型12964例程.docx](https://file1.bdocx.com/fileroot1/2022-12/14/4936a3fb-eaa2-4362-a9b4-0090d43634ec/4936a3fb-eaa2-4362-a9b4-0090d43634ec1.gif)
字符型12964例程
主程序文件:
main.c
/*************************************************
名 称:
LCD12864_ST7920串行测试程序
试验功能:
测试基于ST7920控制芯片的LCD12864的显示
串行方式连接;晶振11.0592M
编 写:
JiangX.net
*************************************************/
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint //宏定义
/*****LCD接口定义*****/
sbitCS =P2^0; //片选信号
sbitSID=P2^1; //串行数据
sbitSCLK=P2^2; //串行同步时钟
sbitPSB=P2^3; //串并口选择1:
并口模式;0:
串口模式;
/*****LCD功能初始化指令*****/
#defineCLEAR_SCREEN 0x01 //清屏指令:
清屏且AC值为00H
#defineAC_INIT 0x02 //将AC设置为00H。
且游标移到原点位置
#defineCURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#defineFUN_MODE 0x30 //工作模式:
8位基本指令集
#defineDISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#defineDISPLAY_OFF 0x08 //显示关
#defineCURSE_DIR 0x14 //游标向右移动:
AC=AC+1
#defineSET_CG_AC 0x40 //设置AC,范围为:
00H~3FH
#defineSET_DD_AC 0x80
/*****汉字地址表*****/
ucharcodeaddr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
/*****n(ms)延时子程序*****/
voiddelayms(uintt) //约延时n(ms)
{
uinti;
while(t--)
{
for(i=0;i<125;i++);
}
}
/*****串行发送一个字节*****/
voidSendByte(ucharDbyte)
{
uchari;
for(i=0;i<8;i++)
{
SCLK=0;
Dbyte=Dbyte<<1; //左移一位
SID=CY; //移出的位给SID
SCLK=1;
SCLK=0;
}
}
/*****串行接收一个字节*****/
ucharReceiveByte(void)
{
uchari,temp1,temp2;
temp1=0;
temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
SCLK=0;
SCLK=1;
SCLK=0;
if(SID)temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
SCLK=0;
SCLK=1;
SCLK=0;
if(SID)temp2++;
}
return((0xf0&temp1)+(0x0f&temp2));
}
/*****检测LCD忙状态*****/
voidCheckBusy(void)
{
do SendByte(0xfc); //11111,RW
(1),RS(0),0
while(0x80&ReceiveByte()); //BF(.7)=1Busy
}
/*****写指令*****/
voidLcd_WriteCmd(ucharCbyte)
{
CS=1;
CheckBusy();
SendByte(0xf8); //11111,RW(0),RS(0),0
SendByte(0xf0&Cbyte); //高四位
SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)
CS=0;
}
/*****写数据*****/
voidLcd_WriteData(ucharDbyte)
{
CS=1;
CheckBusy();
SendByte(0xfa); //11111,RW(0),RS
(1),0
SendByte(0xf0&Dbyte); //高四位
SendByte(0xf0&Dbyte<<4); //低四位(先执行<<)
CS=0;
}
/*****初始化LCD*****/
voidLcd_Init(void)
{
PSB=0;
delayms(50);
Lcd_WriteCmd(0x30); //选择基本指令集
delayms
(1);
Lcd_WriteCmd(0x30); //选择8bit数据流
delayms
(1);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delayms
(1);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delayms(20);
}
/*****显示汉字*****/
voidhanzi_Disp(ucharx,uchary,ucharcode*s)
{
Lcd_WriteCmd(addr_tab[8*x+y]); //写地址
while(*s>0)
{
Lcd_WriteData(*s); //写数据
s++;
}
}
/*****显示图片(显示Gdram内容)*****/
/*绘图显示的步骤
1关闭绘图显示功能
2先将垂直的坐标(Y)写入绘图RAM地址
3再将水平的位元组坐标(X)写入绘图RAM地址
4将D15-D8写入RAM中
5将D7-D0写入到RAM中
6打开绘图显示功能*/
//图片取模方式:
横向取模,字节正序
voidpic_Disp(uchar*pic) //显示Gdram内容(显示图片)
{
ucharx,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<32;y++)
{
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //扩充指令,开绘图显示
Lcd_WriteCmd(0x80+y); //行地址
Lcd_WriteCmd(0x80+x+i); //列地址
Lcd_WriteData(*pic++); //写数据D15-D8
Lcd_WriteData(*pic++); //写数据D7-D0
Lcd_WriteCmd(0x30);
}
}
}
/*****整屏显示竖条*****/
//当i=0时显示上面128×32,当i=8时显示下面128×32
//当i=0时显示上面128×32,当i=8时显示下面128×32
voidLcdFill_Vertical()
{
ucharx,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<0x20;y++)
{
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //扩充指令绘图显示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+i); //列地址
Lcd_WriteData(0x55); //写数据D15-D8
Lcd_WriteData(0x55); //写数据D7-D0
Lcd_WriteCmd(0x30);
}
}
}
/*****整屏显示横条*****/
voidLcdFill_Level()
{
ucharx,y,i;
uchark;
for(i=0;i<9;i+=8)
for(y=0;y<0x20;y++)
{
if((y%2)==1)k=0xff;
elsek=0;
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //扩充指令绘图显示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+i); //列地址
Lcd_WriteData(k);
Lcd_WriteData(k);
Lcd_WriteCmd(0x30);
}
}
}
/*****整屏充满亮点或暗点*****/
//当i=0时显示上面128×32,当i=8时显示下面128×32
//当i=0时显示上面128×32,当i=8时显示下面128×32
voidLcd_Fill(uchartest)
{
ucharx,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<0x20;y++)
{
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //扩充指令绘图显示
Lcd_WriteCmd(y+0x80); //行地址
Lcd_WriteCmd(x+0x80+i); //列地址
Lcd_WriteData(test); //写数据D15-D8
Lcd_WriteData(test); //写数据D7-D0
Lcd_WriteCmd(0x30);
}
}
}
/*****主函数*****/
voidmain(void)
{
Lcd_Init();
while
(1)
{
Lcd_Init();
hanzi_Disp(0,0,"ST7920型液晶模块");
hanzi_Disp(1,1,"串行测试程序");
hanzi_Disp(2,0,"www.JiangX.net");
hanzi_Disp(3,3,"");
delayms(2000);
Lcd_Init();
// Lcd_Fill(0xff);
hanzi_Disp(1,2,"坏点检测");
delayms(500);
Lcd_Init();
Lcd_Fill(0xff);
delayms(1500);
Lcd_Init();
LcdFill_Vertical();
delayms(750);
Lcd_Init();
LcdFill_Level();
delayms(750);
Lcd_Init();
hanzi_Disp(1,2,"显示汉字");
delayms(500);
Lcd_Init();
hanzi_Disp(0,0,tangshi);
delayms(1500);
Lcd_Init();
hanzi_Disp(1,2,"显示图片");
delayms(500);
Lcd_Init();
pic_Disp(LCDsheji);
delayms(1000);
Lcd_Init();
pic_Disp(rmb);
delayms(1000);
Lcd_Init();
pic_Disp(qiche);
delayms(1000);
Lcd_Init();
pic_Disp(gongji);
delayms(1000);
Lcd_Fill(0x00); //清显示RAM
delayms(500);
}
}
以下是字库头文件:
ziku.h
unsignedcharcodetangshi[]={"黄河远上白云间,羌笛何须怨杨柳,一片孤城万仞山。
春风不度玉门关。
"};
//图片取模方式:
横向取模,字节正序
unsignedcharcodermb[1024]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,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,0x10,0x00,0x00,0x08,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,0x07,0xFF,0x00,0x04,0xE7,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xC0,0x05,0x34,0xC0,
0x01,0xF8,0x00,0x38,0x7C,0x00,0x70,0x48,0x6C,0x01,0xFF,0xFF,0xE0,0x07,0x1C,0x40,
0x03,0xDD,0x00,0x3E,0x7C,0x30,0x70,0xF8,0x7C,0x0F,0xFF,0xFF,0xF0,0x07,0x1C,0x40,
0x07,0x76,0x00,0x28,0x58,0x5C,0x70,0x50,0x48,0x1F,0xF0,0xFF,0xF8,0x05,0xF7,0x80,
0x07,0xFE,0x00,0x08,0x6C,0x06,0x78,0x5C,0x18,0x1F,0xC0,0x1F,0xFE,0x04,0xEF,0x00,
0x03,0xFE,0x00,0x08,0x04,0x00,0x0C,0x10,0x00,0x3F,0x80,0x07,0xFF,0x00,0x36,0x00,
0x07,0xCE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x07,0xFF,0x00,0xFF,0x00,
0x05,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0x80,0xFF,0x00,
0x02,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x03,0xFF,0x80,0xFF,0x80,
0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x03,0xFF,0x80,0xFF,0x80,
0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xFF,0x80,0xFF,0x80,
0x01,0xF4,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x3C,0x00,0x03,0xFF,0x81,0xFF,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x1F,0x83,0x81,0xFF,0x80,0xF7,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x18,0x43,0x01,0xFF,0x80,0xF7,0x00,
0x00,0x00,0x00,0x00,0x08,0x3E,0x01,0xF0,0x00,0x0C,0x23,0x01,0xFF,0x00,0x7F,0x00,
0x00,0x00,0x00,0x00,0x7C,0xFD,0x87,0x7C,0x00,0x1F,0x23,0xE1,0xFE,0x00,0x7F,0x00,
0x00,0x00,0x00,0x00,0x19,0xC3,0x86,0x1E,0x00,0x16,0x23,0x20,0xF6,0x00,0x32,0x80,
0x00,0x00,0x00,0x00,0x19,0x81,0xCE,0x0F,0x00,0x1C,0x61,0x00,0xEA,0x00,0x5E,0x00,
0x00,0x00,0x00,0x00,0x1B,0x80,0xFC,0x03,0x00,0x10,0xC0,0x00,0xC0,0x00,0x08,0x00,
0x00,0x00,0x00,0x00,0x1D,0x00,0xFC,0x07,0x00,0x11,0xC0,0x01,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x19,0x80,0xFC,0x07,0x00,0x18,0x00,0x01,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x80,0xFC,0x03,0x00,0x18,0x00,0x03,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1B,0x40,0xDE,0x06,0x00,0x18,0xD8,0x01,0xE4,0x00,0x02,0x00,
0x00,0x00,0x00,0x00,0x19,0xE1,0xCF,0x0E,0x00,0x18,0xE0,0x03,0xC4,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x18,0xFF,0x97,0xFC,0x00,0x18,0x80,0x07,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x7F,0x03,0xF8,0x00,0x0D,0x00,0x07,0xC0,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x7E,0x38,0x00,0xE0,0x00,0x0D,0xFC,0x03,0xF0,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xFE,0x43,0xE0,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0xD8,0x00,0x00,0x0C,0xE0,0x03,0xE0,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x7E,0x00,0x00,0x04,0xF0,0x03,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF6,0x6F,0x00,0x00,0x07,0x80,0x07,0xF0,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x06,0xD7,0xD9,0xE0,0x00,0x07,0x80,0x07,0xD0,0x00,0x03,0x00,
0x00,0x00,0x00,0x00,0x0C,0xA9,0x32,0xE0,0x00,0x01,0x80,0x0F,0xD8,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x1A,0x3A,0x80,0x00,0x01,0xC0,0x1F,0xB8,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x07,0x52,0x48,0xC0,0x00,0x00,0xFF,0xFF,0x7C,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x18,0x2A,0x58,0x04,0x00,0x00,0xFD,0xFC,0xFF,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x1B,0x6A,0x78,0x44,0x00,0x01,0xFB,0xF9,0xFF,0xC0,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x19,0x9F,0x54,0x00,0x03,0xBD,0x07,