基于单片机的液晶显示程序源码Word格式文档下载.docx
《基于单片机的液晶显示程序源码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的液晶显示程序源码Word格式文档下载.docx(28页珍藏版)》请在冰点文库上搜索。
![基于单片机的液晶显示程序源码Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/cf890e76-98ec-4fa2-9cea-2b24a0f7a961/cf890e76-98ec-4fa2-9cea-2b24a0f7a9611.gif)
main()
主函数,初始化图形液晶模块,在屏幕上的随机位置显示随机数字(0--9),
*然后调用画直线函数以屏幕中心为中点画对称的直线,最后显示一个简单
*的窗口。
***************************************************************/
voidmain(void)
{uint8i;
uint8bak;
while
(1)
{LCM_DispIni();
//初始化图形液晶模块
/*提示加载程序,即显示"
Load..."
*/
LCM_DispStr(6,3,"
Load"
);
for(i=0;
5;
i++)
{LCM_DispChar(6,i+7,'
.'
);
DelayS(10);
/*数字显示演示*/
srand(168);
//初始化随机种子
LCM_DispClr();
250;
{uint8x,y;
x=rand()&
0x07;
//取得随机显示位置
y=rand()&
0x0f;
bak=rand()%10+'
0'
;
//取利随机显示数字'
--'
9'
LCM_DispChar(x,y,bak);
DelayS
(2);
#defineCENTER_X64
#defineCENTER_Y32
/*直线演示。
由于直线要基于中心点,具有对称性,所以只要取出第一个点,
即可推出这条直线。
这样做同样达到不同角度的目的。
{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);
/*画窗口演示*/
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。
/*LCM复位控制脚定义*/
sbitLCM_RST=P1^0;
LCM_Wr1Command()
写命令子程序,所选屏为左半屏(CS1)。
command要写入LCM的命令字
#defineLCM_Wr1Command(command)LCMCS1W_COM=command
LCM_Wr2Command()
写命令子程序,所选屏为右半屏(CS2)。
#defineLCM_Wr2Command(command)LCMCS2W_COM=command
LCM_Wr1Data()
写数据子程序,所选屏为左半屏(CS1)。
wrdata要写入LCM的数据
#defineLCM_Wr1Data(wrdata)LCMCS1W_DAT=wrdata
LCM_Wr2Data()
写数据子程序,所选屏为右半屏(CS2)。
#defineLCM_Wr2Data(wrdata)LCMCS2W_DAT=wrdata
LCM_DispIni()
LCM显示初始化。
使能显示,设置显示起始行为0并清屏。
无
*出口参数:
voidLCM_DispIni(void)
LCM_RST=0;
//复位驱动芯片
500;
LCM_RST=1;
LCM_Wr1Command(LCM_DISPON);
//打开显示
LCM_Wr1Command(LCM_STARTROW);
//设置显示起始行为0
LCM_Wr2Command(LCM_DISPON);
LCM_Wr2Command(LCM_STARTROW);
//清屏
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&
//参数过滤
y=y&
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<
x++);
//短延时
LCM_Wr1Data(wrdata);
else
{x=x-64;
//调整x变量值
LCM_Wr2Command(LCM_ADDRSTRX+x);
LCM_Wr2Command(LCM_ADDRSTRY+y);
LCM_Wr2Data(wrdata);
LCM_DispFill()
向显示屏填充数据
filldata要写入LCM的填充数据
voidLCM_DispFill(uint8filldata)
{uint8x,y;
for(y=0;
y<
8;
y++)
{LCM_Wr1Command(LCM_ADDRSTRY+y);
LCM_Wr1Command(LCM_ADDRSTRX);
//设置列地址
LCM_Wr2Command(LCM_ADDRSTRX);
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&
//参数过滤
disp_cx=disp_cx&
/*先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。