12864的液晶显示程序无字库Word文件下载.docx

上传人:b****5 文档编号:20312891 上传时间:2023-01-21 格式:DOCX 页数:19 大小:19.67KB
下载 相关 举报
12864的液晶显示程序无字库Word文件下载.docx_第1页
第1页 / 共19页
12864的液晶显示程序无字库Word文件下载.docx_第2页
第2页 / 共19页
12864的液晶显示程序无字库Word文件下载.docx_第3页
第3页 / 共19页
12864的液晶显示程序无字库Word文件下载.docx_第4页
第4页 / 共19页
12864的液晶显示程序无字库Word文件下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

12864的液晶显示程序无字库Word文件下载.docx

《12864的液晶显示程序无字库Word文件下载.docx》由会员分享,可在线阅读,更多相关《12864的液晶显示程序无字库Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

12864的液晶显示程序无字库Word文件下载.docx

//向LED写入数据

voidWriteCommandLCD(unsignedcharWCLCD,unsignedcharBusyC,unsignedcharselect);

//向LCD写入命令

voidLcdReset(void);

//初始化函数,完成液晶模块的初始设置

voidclear_LCD(unsignedcharselect);

//清屏函数

voidClr_All_Lcd(void);

//全清屏函数

voidset_XY(unsignedcharColumn,unsignedcharPage);

//设置数据写入或读出的地址,通过页号和列数可以唯一确定一个地址

voidxy_Write(unsignedcharColumn,unsignedcharPage,unsignedchardataW);

//向指定行列写数据

voidLcmPutDots(unsignedcharColumn,unsignedcharPage,unsignedcharDotByte);

//显示点

voidwhiteword(unsignedcharColumn,unsignedcharPage,constunsignedcharputs[][16]);

//显示16×

16点阵的编码

voidWhiteWord_Com(unsignedcharColumn,unsignedcharPage,unsignedcharC_num,

unsignedcharV_num,unsignedchar*puts);

//通用的显示函数

voidDrawing_dot(unsignedcharx,unsignedchary);

voidDrawing_line_vertical(unsignedx);

#endif

12864.c

/****************************************************

LCD12864点阵液晶屏,

通过I/O口直接控制,采用模拟时序控制

****************************************************/

#include"

12864.h"

math.h>

/***********************************************************

功能:

从LCD读取状态位

变量:

select用于选择LCD屏的左右,1选择左屏,2选择右屏

***********************************************************/

voidReadStatusLCD(unsignedcharselect)

{

switch(select)

{

case1:

{LCD_CSA=1;

LCD_CSB=0;

break;

}//左

case2:

{LCD_CSA=0;

LCD_CSB=1;

}//右

default:

break;

}

LCD_Data=0xff;

//置位输入口,已实现输入

LCD_RS=0;

LCD_RW=1;

LCD_E=1;

//高电平读取数据

//_nop_();

//若晶振速度高,可在此作延时处理

while(LCD_Data&

0x80);

//最高位为忙标志,检测忙信号状态

LCD_E=0;

//若晶振速度高,可在此作延时处理

}

从LCD读取数据

unsignedcharReadDataLCD(unsignedcharselect)

unsignedchardataR;

LCD_RW=1;

LCD_RS=1;

LCD_E=1;

//操作允许脉冲信号,高电平读出

//若晶振速度高,可在此作延时处理

dataR=LCD_Data;

LCD_E=0;

returndataR;

向LCD写入数据

参数:

WDLCD待写入的字符数据

select用于选择LCD屏的左右,1选择左屏,2选择右屏

voidWriteDataLCD(unsignedcharWDLCD,unsignedcharselect)

ReadStatusLCD(select);

//检测忙标志

LCD_RS=1;

LCD_RW=0;

LCD_Data=WDLCD;

LCD_E=1;

LCD_E=0;

//下降沿写入数据

向LCD写入命令

BusyC是否要检查忙标志位选择标志,1为进行,0为不检测

voidWriteCommandLCD(unsignedcharWCLCD,unsignedcharBusyC,unsignedcharselect)

if(BusyC)ReadStatusLCD(select);

//根据需要检测忙

LCD_Data=WCLCD;

LCD_RS=0;

/******************************************************************************

清显示RAM区(清屏)

select为驱动控制器选择1为左2为右

********************************************************************************/

voidclear_LCD(unsignedcharselect)

unsignedchari,j;

for(i=0;

i<

8;

i++)

{//8页,换页清零

WriteCommandLCD(0xb8|i,1,select);

//页面地址设置,并分别写入左右模块中

WriteCommandLCD(0x40,1,select);

//列地址设置,设置为0列,并分别写入左右三个模块中

for(j=0;

j<

64;

j++)

{//页内清零

WriteDataLCD(0,select);

}

/*****************************************************************************

清LCD左右屏

*****************************************************************************/

voidClr_All_Lcd(void)

clear_LCD

(1);

clear_LCD

(2);

LCD初始化,分为左,右模块初始化

voidLcdReset(void)

unsignedchari;

5;

WriteCommandLCD(0xc0,0,R);

//设置显示起始行为第一行,并分别写入左右模块中,不检测忙标志

WriteCommandLCD(0xc0,0,L);

//_nop_();

WriteCommandLCD(0xc0,1,R);

//设置显示起始行为第一行,并分别写入左右模块中,检测忙标志

WriteCommandLCD(0xc0,1,L);

WriteCommandLCD(0x3f,1,R);

//开显示设置,并分别写入左右模块中

WriteCommandLCD(0x3f,1,L);

clear_LCD(R);

//清左屏

clear_LCD(L);

//清右屏

设置数据写入或读出的地址,通过页号和列数可以唯一确定一个地址

Column表示列号,Page表示页号

voidset_XY(unsignedcharColumn,unsignedcharPage)

{

unsignedcharx,y;

unsignedcharselect;

switch(Column&

0x40)//完成左右屏的判断,根据列号完成区分,<

64为左屏,>

=64为右屏

{

case0x00:

{select=1;

ReadStatusLCD(select);

}/*为左区*/

case0x40:

{select=2;

}/*为右区*/

x=Column&

0x3F|0x40;

/*col.and.0x3f.or.SetYAddress*/

y=Page&

0x07|0xB8;

/*row.and.0x07.or.setPage*/

WriteCommandLCD(y,1,select);

//设置页面地址

WriteCommandLCD(x,1,select);

//设置列地址

根据地址值(页数和列号),写入数据,即写入显示缓冲区,便可以显示在LCD屏上

Column表示列号,Page表示页号,dataW表示待写入的数据

voidxy_Write(unsignedcharColumn,unsignedcharPage,unsignedchardataW)

set_XY(Column,Page);

LCD_RW=0;

LCD_RS=1;

_nop_();

//若晶振速度高,可在此作延时处理

LCD_Data=dataW;

//送数据

//操作允许脉冲信号,下降沿写入

用于显示点阵

Column表示列号,Page表示页号,

********************************************************************************/

voidLcmPutDots(unsignedcharColumn,unsignedcharPage,unsignedcharDotByte)

unsignedchari;

i=Column;

for(;

Page<

Page++)

{

for(;

Column<

128;

Column++)

{

xy_Write(Column,Page,DotByte);

//DotByte=~DotByte;

}

Column=i;

在指定列,指定页显示待显示的点阵编码,用于显示16*16点阵码

Column表示列号,Page表示页号,puts待显示的点阵编码首指针

voidwhiteword(unsignedcharColumn,unsignedcharPage,constunsignedcharputs[][16])

2;

i++)//此处的2为控制点阵行数,实际点阵行数为2*8=16行,此处的16(对应的点行数)应为8的倍数

for(j=0;

16;

j++)//此处控制每行显示的列数

xy_Write(Column+j,Page+i,puts[i][j]);

在指定列,指定页显示待显示指定点阵的编码

Column表示列号,Page表示页号,C_num为显示点阵的行数(物理行8的倍数),V_num为列(物理列)puts待显示的点阵编码首指针

voidWhiteWord_Com(unsignedcharColumn,unsignedcharPage,unsignedcharC_num,unsignedcharV_num,unsignedchar*puts)

(C_num/8);

V_num;

xy_Write(Column+j,Page+i,*(puts+i*V_num+j));

//注意地址的变化规律

绘点

voidDrawing_dot(unsignedcharx,unsignedchary)

unsignedchary_byte,x_bit,y_bit,reverse_y;

//此处y_byte为page,y_bit为具体行号,x_bit为行号

unsignedchardot;

reverse_y=63-y;

x_bit=x;

y_byte=reverse_y/8;

y_bit=y%8;

//for(;

x_bit<

x_bit++)

if(y_bit==0)dot=0x80;

if(y_bit==1)dot=0x40;

if(y_bit==2)dot=0x20;

if(y_bit==3)dot=0x10;

if(y_bit==4)dot=0x08;

if(y_bit==5)dot=0x04;

if(y_bit==6)dot=0x02;

if(y_bit==7)dot=0x01;

xy_Write(x_bit,y_byte,dot);

/*reverse_y=64-y;

if(y_bit==7)y_byte=y_byte-1;

y_bit=y%8;

if(y_byte==(-1))break;

*/

绘垂直直线

x表示列号

voidDrawing_line_vertical(unsignedcharx)

xy_Write(x,0,0xff);

xy_Write(x,1,0xff);

xy_Write(x,2,0xff);

xy_Write(x,3,0xff);

xy_Write(x,4,0xff);

xy_Write(x,5,0xff);

xy_Write(x,6,0xff);

xy_Write(x,7,0xff);

主程序.c

/**********************************************************************************************

12864液晶屏上显示"

南京绝妙科技发展有限公司,025-84532868开发板欢迎使用"

,"

0~9"

,刷新后重显。

*************************************************************************************************/

zifulib.h"

 

#defineuintunsignedint

#defineucharunsignedchar

sbitadrd=P3^7;

//IO口定义

sbitadwr=P3^6;

sbitcs=P2^5;

unsignedadval;

延时程序

入口参数:

日期:

***************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1