基于单片机的液晶显示程序源码.docx
- 文档编号:11401468
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:28
- 大小:21.36KB
基于单片机的液晶显示程序源码.docx
《基于单片机的液晶显示程序源码.docx》由会员分享,可在线阅读,更多相关《基于单片机的液晶显示程序源码.docx(28页珍藏版)》请在冰豆网上搜索。
基于单片机的液晶显示程序源码
附录
主程序:
/***********************************************************************
*文件名:
LCM_DISP.C
*功能:
DP_51PRO实验仪图形液晶显示实验。
先在屏幕上的随机位置显示随机数字(0--9),
*然后调用画直线函数以屏幕中心为中点画对称的直线,最后显示一个简单的窗口。
***********************************************************************/
#include"CONFIG.H"
/***********************************************************************
*名称:
DelayS()
*功能:
长软件延时。
*入口参数:
delayno延时时间控制
***********************************************************************/
voidDelayS(uint16delayno)
{uint16i;
for(;delayno>0;delayno--)
{for(i=0;i<1000;i++);
}
}
/***************************************************************
*名称:
main()
*功能:
主函数,初始化图形液晶模块,在屏幕上的随机位置显示随机数字(0--9),
*然后调用画直线函数以屏幕中心为中点画对称的直线,最后显示一个简单
*的窗口。
***************************************************************/
voidmain(void)
{uint8i;
uint8bak;
while
(1)
{LCM_DispIni();//初始化图形液晶模块
/*提示加载程序,即显示"Load..."*/
LCM_DispStr(6,3,"Load");
for(i=0;i<5;i++)
{LCM_DispChar(6,i+7,'.');
DelayS(10);
}
/*数字显示演示*/
srand(168);//初始化随机种子
LCM_DispClr();
for(i=0;i<250;i++)
{uint8x,y;
x=rand()&0x07;//取得随机显示位置
y=rand()&0x0f;
bak=rand()%10+'0';//取利随机显示数字'0'--'9'
LCM_DispChar(x,y,bak);
DelayS
(2);
}
#defineCENTER_X64
#defineCENTER_Y32
/*直线演示。
由于直线要基于中心点,具有对称性,所以只要取出第一个点,
即可推出这条直线。
这样做同样达到不同角度的目的。
*/
LCM_DispClr();
for(i=0;i<250;i++)
{uint8x0,y0;
uint8x1,y1;
/*取第一个点坐标*/
x0=rand()&0x7f;//取得随机起点
y0=rand()&0x3f;
/*计算出中心对称点*/
x1=2*CENTER_X-x0;
y1=2*CENTER_Y-y0;
Line(x0,y0,x1,y1,1);
DelayS(5);
}
/*画窗口演示*/
LCM_DispClr();
Rectangle(0,0,127,63,1);//显示窗口
HLine(0,10,127,1);
RLine(10,0,10,1);
Line(0,0,10,10,1);
Line(10,0,0,10,1);
RLine(120,10,63,1);//显示滚动条
RectangleFill(120,20,127,30,1);
LCM_DispStr(4,4,"DP-51PRO");//在窗口中显示内容
LCM_DispStr(5,1,"");
DelayS(1500);
}//endofwhile
(1)...
}
被调用函数:
/***********************************************************************
*文件名:
LCM_DRIVE.C
*功能:
图形液晶TG12864B-2驱动程序。
*说明:
在LCM_DRIVE.H文件中定义了LCM操作地址,左半屏的写命令操作地址为2004H,写
*数据操作地址为2005H,右半屏的写命令操作地址为2000H,写数据操作地址为2001H;
*由于GRAPHICS.C中使用了disp_buf作为作图缓冲区,所以LCM_WriteByte()、LCM_
*DispFill()均要更新disp_buf。
***********************************************************************/
#include"CONFIG.H"
/*LCM复位控制脚定义*/
sbitLCM_RST=P1^0;
/***********************************************************************
*名称:
LCM_Wr1Command()
*功能:
写命令子程序,所选屏为左半屏(CS1)。
*入口参数:
command要写入LCM的命令字
***********************************************************************/
#defineLCM_Wr1Command(command)LCMCS1W_COM=command
/***********************************************************************
*名称:
LCM_Wr2Command()
*功能:
写命令子程序,所选屏为右半屏(CS2)。
*入口参数:
command要写入LCM的命令字
***********************************************************************/
#defineLCM_Wr2Command(command)LCMCS2W_COM=command
/***********************************************************************
*名称:
LCM_Wr1Data()
*功能:
写数据子程序,所选屏为左半屏(CS1)。
*入口参数:
wrdata要写入LCM的数据
***********************************************************************/
#defineLCM_Wr1Data(wrdata)LCMCS1W_DAT=wrdata
/***********************************************************************
*名称:
LCM_Wr2Data()
*功能:
写数据子程序,所选屏为右半屏(CS2)。
*入口参数:
wrdata要写入LCM的数据
***********************************************************************/
#defineLCM_Wr2Data(wrdata)LCMCS2W_DAT=wrdata
/***********************************************************************
*名称:
LCM_DispIni()
*功能:
LCM显示初始化。
使能显示,设置显示起始行为0并清屏。
*入口参数:
无
*出口参数:
无
***********************************************************************/
voidLCM_DispIni(void)
{uint16i;
LCM_RST=0;//复位驱动芯片
for(i=0;i<500;i++);
LCM_RST=1;
LCM_Wr1Command(LCM_DISPON);//打开显示
LCM_Wr1Command(LCM_STARTROW);//设置显示起始行为0
LCM_Wr2Command(LCM_DISPON);
LCM_Wr2Command(LCM_STARTROW);
LCM_DispClr();//清屏
LCM_Wr1Command(LCM_ADDRSTRY+0);//设置页(行)地址
LCM_Wr1Command(LCM_ADDRSTRX+0);//设置列地址,即列
LCM_Wr2Command(LCM_ADDRSTRY+0);
LCM_Wr2Command(LCM_ADDRSTRX+0);
}
/***********************************************************************
*名称:
LCM_WriteByte()
*功能:
向指定点写数据(一字节)。
*入口参数:
xx坐标值(0-127)
*yy坐标值(0-63)
*wrdata所要写的数据
*出口参数:
无
*说明:
会更新disp_buf相应存储单元
***********************************************************************/
voidLCM_WriteByte(uint8x,uint8y,uint8wrdata)
{x=x&0x7f;//参数过滤
y=y&0x3f;
y=y>>3;
disp_buf[y][x]=wrdata;
if(x<64)//选择液晶控制芯片(即CS1--控制前64个点,CS2--控制后64个点)
{LCM_Wr1Command(LCM_ADDRSTRX+x);//设置当前列地址,即x坐标
LCM_Wr1Command(LCM_ADDRSTRY+y);//设置当前页地址,即y坐标
for(x=0;x<5;x++);//短延时
LCM_Wr1Data(wrdata);
}
else
{x=x-64;//调整x变量值
LCM_Wr2Command(LCM_ADDRSTRX+x);
LCM_Wr2Command(LCM_ADDRSTRY+y);
for(x=0;x<5;x++);
LCM_Wr2Data(wrdata);
}
}
/***********************************************************************
*名称:
LCM_DispFill()
*功能:
向显示屏填充数据
*入口参数:
filldata要写入LCM的填充数据
*出口参数:
无
*说明:
会更新disp_buf相应存储单元
***********************************************************************/
voidLCM_DispFill(uint8filldata)
{uint8x,y;
LCM_Wr1Command(LCM_STARTROW);//设置显示起始行为0
LCM_Wr2Command(LCM_STARTROW);
for(y=0;y<8;y++)
{LCM_Wr1Command(LCM_ADDRSTRY+y);//设置页(行)地址
LCM_Wr1Command(LCM_ADDRSTRX);//设置列地址
LCM_Wr2Command(LCM_ADDRSTRY+y);
LCM_Wr2Command(LCM_ADDRSTRX);
for(x=0;x<64;x++)
{LCM_Wr1Data(filldata);
LCM_Wr2Data(filldata);
disp_buf[y][x]=filldata;
disp_buf[y][x+64]=filldata;
}
}
}
/*ASCII码对应的点阵数据表*/
uint8codeASCII_TAB20[80]={0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x9e,0x00,0x00,
0x00,0x0e,0x00,0x0e,0x00,
0x28,0xfe,0x28,0xfe,0x28,
0x48,0x54,0xfe,0x54,0x24,
0x46,0x26,0x10,0xc8,0xc4,
0x6c,0x92,0xaa,0x44,0xa0,
0x00,0x0a,0x06,0x00,0x00,
0x00,0x38,0x44,0x82,0x00,
0x00,0x82,0x44,0x38,0x00,
0x28,0x10,0x7c,0x10,0x28,
0x10,0x10,0x7c,0x10,0x10,
0x00,0xa0,0x60,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,
0x00,0xc0,0xc0,0x00,0x00,
0x40,0x20,0x10,0x08,0x04
};
uint8codeASCII_TAB30[80]={0x7C,0xA2,0x92,0x8A,0x7C,
0x00,0x84,0xFE,0x80,0x00,
0x84,0xC2,0xA2,0x92,0x8C,
0x42,0x82,0x8A,0x96,0x62,
0x30,0x28,0x24,0xFE,0x20,
0x4E,0x8A,0x8A,0x8A,0x72,
0x78,0x94,0x92,0x92,0x60,
0x02,0xE2,0x12,0x0A,0x06,
0x6C,0x92,0x92,0x92,0x6C,
0x0C,0x92,0x92,0x52,0x3C,
0x00,0x6C,0x6C,0x00,0x00,
0x00,0xAC,0x6C,0x00,0x00,
0x10,0x28,0x44,0x82,0x00,
0x28,0x28,0x28,0x28,0x28,
0x00,0x82,0x44,0x28,0x10,
0x04,0x02,0xA2,0x12,0x0C
};
uint8codeASCII_TAB40[80]={0x64,0x92,0xF2,0x82,0x7C,
0xFC,0x22,0x22,0x22,0xFC,
0xFE,0x92,0x92,0x92,0x6C,
0x7C,0x82,0x82,0x82,0x44,
0xFE,0x82,0x82,0x44,0x38,
0xFE,0x92,0x92,0x92,0x82,
0xFE,0x12,0x12,0x12,0x02,
0x7C,0x82,0x92,0x92,0xF4,
0xFE,0x10,0x10,0x10,0xFE,
0x00,0x82,0xFE,0x82,0x00,
0x40,0x80,0x82,0x7E,0x02,
0xFE,0x10,0x28,0x44,0x82,
0xFE,0x80,0x80,0x80,0x80,
0xFE,0x04,0x18,0x04,0xFE,
0xFE,0x08,0x10,0x20,0xFE,
0x7C,0x82,0x82,0x82,0x7C
};
uint8codeASCII_TAB50[80]={0xFE,0x12,0x12,0x12,0x0C,
0x7C,0x82,0xA2,0x42,0xBC,
0xFE,0x12,0x32,0x52,0x8C,
0x8C,0x92,0x92,0x92,0x62,
0x02,0x02,0xFE,0x02,0x02,
0x7E,0x80,0x80,0x80,0x7E,
0x3E,0x40,0x80,0x40,0x3E,
0x7E,0x80,0x70,0x80,0x7E,
0xC6,0x28,0x10,0x28,0xC6,
0x0E,0x10,0xE0,0x10,0x0E,
0xC2,0xA2,0x92,0x8A,0x86,
0x00,0xFE,0x82,0x82,0x00,
0x04,0x08,0x10,0x20,0x40,
0x00,0x82,0x82,0xFE,0x00,
0x08,0x04,0x02,0x04,0x08,
0x80,0x80,0x80,0x80,0x80
};
uint8codeASCII_TAB60[80]={0x00,0x02,0x04,0x08,0x00,
0x40,0xA8,0xA8,0xA8,0xF0,
0xFE,0x90,0x88,0x88,0x70,
0x70,0x88,0x88,0x88,0x40,
0x70,0x88,0x88,0x90,0xFE,
0x70,0xA8,0xA8,0xA8,0x30,
0x10,0xFC,0x12,0x02,0x04,
0x18,0xA4,0xA4,0xA4,0x7C,
0xFE,0x10,0x08,0x08,0xF0,
0x00,0x88,0xFA,0x80,0x00,
0x40,0x80,0x88,0x7A,0x00,
0xFE,0x20,0x50,0x88,0x00,
0x00,0x82,0xFE,0x80,0x00,
0xF8,0x08,0x30,0x08,0xF8,
0xF8,0x10,0x08,0x08,0xF0,
0x70,0x88,0x88,0x88,0x70
};
uint8codeASCII_TAB70[80]={0xF8,0x28,0x28,0x28,0x10,
0x10,0x28,0x28,0x30,0xF8,
0xF8,0x10,0x08,0x08,0x10,
0x90,0xA8,0xA8,0xA8,0x40,
0x08,0x7E,0x88,0x80,0x40,
0x78,0x80,0x80,0x40,0xF8,
0x38,0x40,0x80,0x40,0x38,
0x78,0x80,0x60,0x80,0x78,
0x88,0x50,0x20,0x50,0x88,
0x18,0xA0,0xA0,0xA0,0x78,
0x88,0xC8,0xA8,0x98,0x88,
0x00,0x10,0x6C,0x82,0x00,
0x00,0x00,0xFE,0x00,0x00,
0x00,0x82,0x6C,0x10,0x00,
0x10,0x10,0x54,0x38,0x10,
0x10,0x38,0x54,0x10,0x10
};
/***********************************************************************
*名称:
LCM_DispChar()
*功能:
指定地址显示字符。
*入口参数:
disp_cy显示行值(0-7)
*disp_cx显示列值(0-15)
*dispdata所要显示的字符(ASCII码)
*注:
支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以
*屏幕显示为8*16(共8行,每行16个字符)。
***********************************************************************/
voidLCM_DispChar(uint8disp_cy,uint8disp_cx,chardispdata)
{uint8code*pchardata;
uint8i;
disp_cy=disp_cy&0x07;//参数过滤
disp_cx=disp_cx&0x0f;
/*先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 液晶显示 程序 源码