基于51单片机控制的液晶显示屏C程序设计

时间:2024-04-11 点赞:49399 浏览:100304 作者原创标记本站原创

本文是一篇地址论文范文,地址类毕业论文范文,关于基于51单片机控制的液晶显示屏C程序设计相关毕业论文格式模板范文。适合地址及参考文献及点阵方面的的大学硕士和本科毕业论文以及地址相关开题报告范文和职称论文写作参考文献资料下载。

摘 要点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线和汉字.本文介绍了采用C语言实现对液晶显示器TG12864的控制.

关 键 词单片机;C语言;TG12864;液晶显示

中图分类号:TP271文献标识码:A文章编号:1671—7597(2013)031-017-02

1TG12864液晶原理

1.1TG12864显示原理

点阵式LCD其显示原理是控制LCD点阵中点的亮暗,亮和暗的点阵按一定规律可以组成汉字,组成一幅图形和曲线等.

1.2TG12864内部结构及相关指令

1.2.1TG12864内部结构

TG12864是一种图形点阵液晶显示器,它主要由行驱动器、列驱动器及128×64全点阵液晶显示器组成,有20个外部引脚.可以由单片机控制显示8×4个16×16点阵汉字.

1.2.2TG12864相关指令

该类液晶显示模块的指令系统比较简单,总共有七种.

1)显示开关指令.

功能:设置屏幕显示开/关,DB0等于1,开显示;DB0等于0,关显示.DB7~DB0等于0x3f,开显示;DB7~DB0等于0x3e,关显示.

2)显示起始行设置.

功能:显示起始行是由Z地址计数器控制的,该命令自动将A0~A5位地址送入Z地址计数器,起始地址可以是0~63范围内任意一行.Z地址计数器具有循环计数功能,用于显示行扫面同步,当扫描完一行后自动加一.DB7~DB0等于0xc0,显示从0行开始.

3)页设置.

功能:页地址存储在X地址计数器中,A2~A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号RST可把页地址计数器内容清零.DB7~DB0等于0xb8,显示从0页开始.

4)列地址设置.

功能:列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加一.DB7~DB0等于0x40,显示从0列开始.

5)读状态.

功能:读忙信号标志位BF,复位标志RST以及显示状态(ON/OFF)bf等于1,内部忙;bf等于0,内部空闲;res等于1,正处于复位初始化状态,res等于0,正常状态.

6)写数据.

写数据到DDRAM,DDRAM是存储图形数据的,写数据到DDRAM前,要先执行设置页地址及设置列地址命令.

7)读数据.

从DDRAM读数据,读数据前,要先执行设置页地址及设置列地址命令.

2应用程序设计

#include

#defineucharunsignedchar

#defineuintunsignedint

#definedisp_on0x3f//定义开显示

#definedisp_off0x3e//定义关显示

#definedis_x0xb8//定义显示0页

#definedis_y0x40//定义显示0列

#definedis_z0xc0//定义显示0行

#definedbP0

sbitrs等于P2^0;

sbitrw等于P2^1;

sbite等于P2^2;

sbitcs1等于P2^3;

sbitcs2等于P2^4;

sbitrst等于P2^5;

sbitbf等于P2^6;

sbitres等于P2^7;

ucharcodetab[]等于{/*青海工业职业学校*/0x01,0x00,0x01,0x00,0x3F,0xF8,0x01...};

voidcheck_busy(void);

voidchushihua(void);

voiddelay(uint);

voidwr_lcd(uchar,uchar);

voidclear_lcd(void);

voiddisplay(void);

void_disp(uchar,uchar,uchar,uchar,uchar,uchar*);


voidmain()//主程序

{chushihua();display();while(1);}

voidchushihua(void)//液晶初始化函数

{rst等于0;delay(50);rst等于1;

cs1等于1;cs2等于1;

wr_lcd(0,disp_off);

wr_lcd(0,disp_on);}

voidwr_lcd(uchari,ucharj)//写液晶函数

{check_busy();

rs等于i;rw等于0;

db等于j;e等于1;

delay(1);

e等于0;}

voidcheck_busy(void)//检测忙闲函数

{db等于0xff;

rs等于0;rw等于1;

delay(1);

e等于1;

while(res||bf等于等于1);

e等于0;}

voidclear_lcd(void)//清屏函数{uchari,j;cs1等于1;cs2等于1;

wr_lcd(0,disp_on);

for(j等于0;j<8;j++)

{wr_lcd(0,dis_x+j);

wr_lcd(0,dis_y);

wr_lcd(0,dis_z);

for(i等于0;i<32;i++)

{wr_lcd(1,0x00);

wr_lcd(1,0x00);}

}

}

void_disp(ucharye,ucharlie,ucharhang,ucharls,ucharzs,uchar*ptr1)//液晶显示函数

{uchari,j,m,n,a;

wr_lcd(0,disp_on);

for(m等于0;m

{for(n等于0;n

{for(j等于0;j<2;j++)//每个字显示两页

{wr_lcd(0,dis_x+j+ye+m*2);//显示起始页设置

wr_lcd(0,dis_z);//显示起始行设置

wr_lcd(0,dis_y+lie+n*ls);//显示起始列设置

a等于j*ls+n*2*ls+m*zs*2*ls;//控制字的显示数组位

for(i等于0;i

{wr_lcd(1,*(ptr1+a+i));}

}

}

}

}

voiddisplay(void)//显示主程序

{

uchar*ptr;

clear_lcd();

cs1等于1;cs2等于0;//开左屏显示青海工业

ptr等于&tab[0];//取数组首地址

_disp(0,0,1,16,4,ptr);//显示从0页、0列开始,显示一行,每个字16列显示2个字

cs1等于0;cs2等于1;//开右屏显示职业学校

ptr等于&tab[128];//取数组的第128个元素地址

_disp(0,0,1,16,4,ptr);//显示从0页、0列开始,显示一行,每个字16列显示2个字

}

voiddelay(uintx)//延时函数

{uchari;

for(;x>0;x--)

for(i等于0;i<124;i++);}

以上程序,如果要从3页,4列开始,在左屏显示2行,每个字16列,共显示4个字青海工业,只要将显示主程序改为:

voiddisplay(void)

{uchar*ptr;

clear_lcd();

cs1等于1;cs2等于0;

ptr等于&tab[0];

_disp(3,4,2,16,2,ptr);}

上述液晶显示程序,应用起来灵活、方便,要将汉字显示在液晶的什么位置,只需修改显示主程序中_disp(0,0,1,16,4,ptr)函数中的数据即可.

3结束语

用C语言程序来对液晶显示模块进行编程控制,编程效率高,思路清晰,处理问题灵活方便,相对汇编语言有明显的优势.

相关论文

C程序设计教学中的在线评测系统应用

该文为关于设计类方面毕业论文开题报告范文,与C程序设计教学中的在线评测系统应用相关怎样检测论文抄袭率,可作为抄袭论文专业设计类论文写。

《C程序设计》教学心得

该文是初中教学专业语言论文范文,主要论述了语言方面有关毕业论文模板,与《C程序设计》教学心得相关论文范文检索,适合语言及计算机及参考。

C++程序设计教学改革

这是一篇关于教学改革大学毕业论文范文,与C++程序设计教学改革相关毕业论文题目。是政治教学专业与教学改革及软件工程及计算机方面相关的免。

《C#程序设计》精品课程网站建设

为您写精品课程网站毕业论文和职称论文提供关于精品课程网站类毕业论文开题报告范文,与《C 程序设计》精品课程网站建设相关论文范文集,包括。