12864串行显示(字符、字符串)

合集下载

LCD12864中文资料

LCD12864中文资料

12864LCD液晶显示屏中文资料一、概述带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

二、基本特性(1)低电源电压(VDD:+3.0--+5.5V)(2)显示分辨率:128×64点(3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)(4)内置 128个16×8点阵字符(5)2MHZ时钟频率(6)显示方式:STN、半透、正显(7)驱动方式:1/32DUTY,1/5BIAS(8)视角方向:6点(9)背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10(10)通讯方式:串行、并口可选(11)内置DC-DC转换电路,无需外加负压(12)无需片选信号,简化软件设计(13)工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃三、模块接口说明*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。

*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

控制器接口信号说明:1、RS,R/W的配合选择决定控制界面的4种模式:2、E信号● 忙标志:BF BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态.● 字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。

12864液晶显示程序(串口)

12864液晶显示程序(串口)

/*------------------初始化-----------------*/
void init_lcd (void)
{
// rst=1;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
void lcd_string(uchar x0,uchar y0,uchar k,uchar *chn)
{
uchar adr,i;
switch(x0)
{
case 0: adr = 0x80 + y0;
break; //在第1行y列显示
case 1: adr = 0x90 + y0;
break; //在第2行y列显示
case 2: adr = 0x88 + y0;
break; //在第3行y列显示
case 3: adr = 0x98 + y0;
break; //在第4行y列显示
default: ;
}
wr_lcd (comm,0x30);
{
case 0: adr = 0x80 + y0;
break; //在第1行y列显示
case 1: adr = 0x90 + y0;
break; //在第2行y列显示
case 2: adr = 0x88 + y0;
break; //在第3行y列显示
case 3: adr = 0x98 + y0;
#define comm 0
#define dat 1

12864中文图形点阵液晶显示模块使用说明书

12864中文图形点阵液晶显示模块使用说明书

72us
读出 RAM
的值
1 1 D7
D6
D5
D4
D3
D2
D1
D0
从 内 部 RAM 读 取 数 据 (DDRAM/CGRAM/GDRAM)
72us
指令表 2:(RE=1:扩充指令集)
指令
指令码
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
说明
执行 时间 (540K HZ)
功能:设定 CGRAM 地址到地址计数器(AC),需确定扩充指令中 SR=0(卷动地址或 RAM 地址选择)
地址
设定 CGRAM 地址到地址计数器(AC)
1 AC5 AC4 AC3 AC2 AC1 AC0 需确定扩充指令中 SR=0(卷动地址或 72us RAM 地址选择)
设定 DDRAM 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 设定 DDRAM 地址到地址计数器(AC) 72us
I/O
DB5
I/O
DB6
I/O
DB7
I/O
PSB
I
NC
-
/RST
I
VEE
-
LED+
-
LED-
-
说明
电源地
逻辑电源正(+5V)
LCD 对比度调节电压
并行模式时选择数据或指令
H: 数据 L: 指令
串行模式时选择模块与否
H: 选择 L: 不选择
并行模式时控制读写
H: 读
L: 写
串行模式时输入数据
并行模式时使能端
L
L
L
H
DL
X
RE
X

LCD12864串行显示文件

LCD12864串行显示文件

LCD12864串行显示文件1、LCD12864.c文件//===================================== ==========================#include "LCD12864.h"#include/**** 串行控制 *****************/sbit RS = P1^0;sbit RW = P1^1;sbit EN = P1^2;/*-----LCD12864相关声明---------*/#define com_byte 0#define dat_byte 1uchar lcdPosX, lcdPosY; //X,Y坐标uchar halfScr, halfLineCnt, basicBlock; //半屏,半屏行数,N*8块/************************************************************** 函数名称:void LCD12864_Delay_Ms (uchar ms)函数功能: LCD12864延时函数**************************************************************/ void LCD12864_Delay_Ms (uchar ms){uchar i;while (--ms){for (i = 0; i < 125; i++);}/************************************************************** 函数名称:void LCD12864_Write_Byte(uchar byte)函数功能: 写字节**************************************************************/ void LCD12864_Write_Byte(uchar byte){uchar i;for(i = 0; i < 8; i++){EN = 0;byte <<= 1;RW = CY;EN = 1;}}/************************************************************** 函数名称:uchar LCD12864_Read_Byte(void)函数功能: 读字节*************************************************************** /uchar LCD12864_Read_Byte(void){uchar i,temp1,temp2;temp1 = 0;temp2 = 0;for(i = 0; i < 8; i++)temp1 = temp1 << 1;EN = 0;EN = 1;EN = 0;if(RW) temp1++;}for(i=0;i<8;i++){temp2=temp2<<1;EN = 0;EN = 1;EN = 0;if(RW) temp2++;}return ((0xf0 & temp1) + (0x0f & temp2));}/************************************************************** 函数名称:void LCD12864_Is_Busy( void )函数功能: 检测忙函数**************************************************************/ void LCD12864_Is_Busy( void ){doLCD12864_Write_Byte(0xfc); //11111,RW(1),RS(0),0while(0x80 & LCD12864_Read_Byte());}/**************************************************************函数名称:void LCD12864_Write(bit dat_byte_com_byte,uchar byt)函数功能: 写入函数*************************************************************** /void LCD12864_Write(bit dat_byte_com_byte, uchar byt){uchar temp;if(dat_byte_com_byte == 0) //为零,写入指令temp = 0xf8; //11111,RS(0),RW(0),0else //否则,写入数据temp = 0xfa; //11111,RS(1),RW(0),0RS = 1;LCD12864_Is_Busy();LCD12864_Write_Byte(temp);LCD12864_Write_Byte(byt & 0xf0); //写入高四位LCD12864_Write_Byte(byt << 4); //写入低四位RS = 0;}/************************************************************** 函数名称:void LCD12864_Clear_Display (void)函数功能: LCD12864 显示清屏*************************************************************** /void LCD12864_Clear_Display (void){LCD12864_Write(com_byte,0x01);}/**************************************************************函数名称:void LCD12864_Write_Position (void)函数功能: LCD12864 显示位置*************************************************************** /void LCD12864_Write_Position (void){LCD12864_Write(com_byte,0x34);LCD12864_Write(com_byte,lcdPosY);LCD12864_Write(com_byte,lcdPosX);LCD12864_Write(com_byte,0x30);}/************************************************************** 函数名称:void LCD12864_DisplayPhoto (uchar *bmp, uchar bmpCls)函数功能: LCD12864 显示一张图片*************************************************************** /void LCD12864_DisplayPhoto (uchar *bmp, uchar bmpCls) {lcdPosX = 0x80;halfScr = 2;for (; halfScr != 0; halfScr--){lcdPosY = 0x80;halfLineCnt = 32;for (; halfLineCnt != 0; halfLineCnt--){basicBlock = 16;LCD12864_Write_Position();for (; basicBlock != 0; basicBlock--){if (bmpCls == 0){LCD12864_Write(dat_byte, *bmp++);}else if (bmpCls == 1){LCD12864_Write(dat_byte, 0x00);}}lcdPosY++;}lcdPosX = 0x88;}LCD12864_Write(com_byte, 0x36);LCD12864_Write(com_byte, 0x30);}/************************************************************** 函数名称:void convertChar (uchar CX, CY, width)* 字符反白显示* 输入参数:CX=要反白字符的行(0-3)* CY=要反白字符的列(0-7)* width=要反白字符的长度(1-16)函数功能: 转换成字符*************************************************************** /void convertChar (uchar CX, CY, width){LCD12864_DisplayPhoto(0,1);lcdPosY = 0x80;if (CX == 0){CX = 0x80;halfLineCnt = 16;}else if (CX == 1){CX = 0x80;halfLineCnt = 32;}else if (CX == 2){CX = 0x88;halfLineCnt = 16;}else if (CX == 3){CX = 0x88;halfLineCnt = 32;}lcdPosX = CX + CY;for (; halfLineCnt != 0; halfLineCnt--){basicBlock = width;LCD12864_Write_Position();for (; basicBlock != 0; basicBlock--){if (halfLineCnt > 16){LCD12864_Write(dat_byte, 0x00);}else{LCD12864_Write(dat_byte, 0xff);}}lcdPosY++;}LCD12864_Write(com_byte, 0x36);LCD12864_Write(com_byte, 0x30);}/************************************************************** 函数名称:void LCD12864_Display_String(uchar X, uchar Y, uchar speed, uchar *msg)函数功能: LCD12864 显示字符串/void LCD12864_Display_String(uchar X, uchar Y, uchar speed, uchar *msg){if (X == 0){X = 0x80;}else if (X == 1){X = 0x90;}else if (X == 2){X = 0x88;}else if (X == 3){X = 0x98;}Y = X + Y;LCD12864_Write(com_byte, Y);while (*msg){LCD12864_Write(dat_byte, *msg++);LCD12864_Delay_Ms(speed);}}函数名称:void init_12864(void)函数功能:初始化12864*************************************************************** /void init_12864(void){LCD12864_Write(com_byte, 0x30); //基本指令功能.LCD12864_Write(com_byte, 0x0c); //显示打开,关光标,反白关.LCD12864_Write(com_byte, 0x01); //清屏指令.LCD12864_Write(com_byte, 0x06); //AC自动加一LCD12864_Write(com_byte, 0x80);}2、LCD12864.h文件//===================================== ==========================#ifndef __LCD12864_H__#define __LCD12864_H__#define uchar unsigned char#define uint unsigned int/************************************************************** 函数名称:void LCD12864_Write(bit dat_byte_com_byte,uchar byt)函数功能: 写入函数*************************************************************** /void LCD12864_Write(bit dat_byte_com_byte, uchar byt);/************************************************************** 函数名称:void LCD12864_Clear_Display (void)函数功能: LCD12864 显示清屏*************************************************************** /void LCD12864_Clear_Display (void);/************************************************************** 函数名称:void LCD12864_Write_Position (void)函数功能: LCD12864 显示位置*************************************************************** /void LCD12864_Write_Position (void);/************************************************************** 函数名称:void LCD12864_DisplayPhoto (uchar *bmp, uchar bmpCls)函数功能: LCD12864 显示一张图片*************************************************************** /void LCD12864_DisplayPhoto (uchar *bmp, uchar bmpCls);/************************************************************** 函数名称:void LCD12864_Display_String(uchar X, uchar Y, uchar speed, uchar *msg)函数功能: LCD12864 显示字符串*************************************************************** /void LCD12864_Display_String(uchar X, uchar Y, uchar speed, uchar *msg);/************************************************************** 函数名称:void init_12864(void)函数功能:初始化12864*************************************************************** /void init_12864(void);#endif。

LCD12864字符显示

LCD12864字符显示

LCD12864字符显示/********************************************************LCD12864字符显示********************************************************/#include#include#include#include#define uchar unsigned char#define uint unsigned int //宏定义/*****LCD接口定义*****/sbit LCD_RS = P2^0; //1:输入数据;0:输入命令sbit LCD_RW = P2^1; //1:读数据0:写数据sbit LCD_EN = P2^2; //LCM使能端//sbit LCD_PSB = P2^3; //串并口选择1:并口模式; 0:串口模式;#define LCD_DATA P1 //LCD总线端口/*****LCD功能初始化指令*****/#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H #define AC_INIT 0x02 //将AC设置为00H。

且游标移到原点位置#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)#define FUN_MODE 0x30 //工作模式:8位基本指令集#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白#define DISPLAY_OFF 0x08 //显示关#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH#define SET_DD_AC 0x80/*****汉字地址表*****/uchar code addr_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)延时子程序*****/void delayms(uint t) //约延时n(ms){uint i;while(t--){for(i=0;i<150;i++);}}/*****等待LCD忙*****/void WaitBusy(void) //延时一小段时间,等待LCD空闲{ uchar i=5;while(i--);}/*****写指令代码*****/void Lcd_WriteCmd(uchar cmdcode){LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;WaitBusy();LCD_DATA = cmdcode;LCD_EN = 0;}/*****写数据*****/void Lcd_WriteData(uchar dispdata){LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;WaitBusy();LCD_DATA = dispdata;// WaitBusy();// WaitBusy();// WaitBusy();LCD_EN = 0;}/*****初始化LCD*****/void Lcd_Init(){// LCD_PSB = 1;delayms(50);Lcd_WriteCmd(0x30); //选择基本指令集delayms(1);delayms(1);WaitBusy();Lcd_WriteCmd(0x30); //选择8bit数据流delayms(1);delayms(1);Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)delayms(1);delayms(1);Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H delayms(20);}/*****显示汉字*****/void hanzi_Disp(uchar x,uchar y,uchar code *s){ //x、y为汉字坐标Lcd_WriteCmd(addr_tab[8*x+y]); //写地址delayms(1);while(*s>0){Lcd_WriteData(*s);delayms(1); //写数据s++;}}/*****显示图片(显示Gdram内容)*****//*绘图显示的步骤1 关闭绘图显示功能2 先将垂直的坐标(Y)写入绘图RAM地址3 再将水平的位元组坐标(X)写入绘图RAM地址4 将D15-D8写入RAM中5 将D7-D0写入到RAM中6 打开绘图显示功能*///图片取模方式:横向取模,字节正序void pic_Disp(uchar *pic) //显示Gdram内容(显示图片){ uchar x,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-D8Lcd_WriteData(*pic++); //写数据D7-D0Lcd_WriteCmd(0x30);}}}/*****整屏显示竖条*****///当i=0时显示上面128×32,当i=8时显示下面128×32//当i=0时显示上面128×32,当i=8时显示下面128×32 void LcdFill_Vertical(){uchar x,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-D8Lcd_WriteData(0x55); //写数据D7-D0 Lcd_WriteCmd(0x30);}}}/*****整屏显示横条*****/void LcdFill_Level()uchar x,y,i;uchar k;for(i=0;i<9;i+=8)for(y=0;y<0x20;y++){if((y%2)==1) k=0xff;else k=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 void Lcd_Fill(uchar test){uchar x,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-D8Lcd_WriteData(test); //写数据D7-D0 Lcd_WriteCmd(0x30); }}}/*****主函数*****/void main(void){// COM=0x80;Lcd_Init();while(1){Lcd_Init();hanzi_Disp(0,0,"ST7920型液晶模块");hanzi_Disp(2,1,"合肥求精电子");hanzi_Disp(3,0,"/doc/4c13376852.html,"); //hanzi_Disp(3,0," ");delayms(1500);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_Init();pic_Disp(kuzi); // delayms(1000);Lcd_Init();pic_Disp(LCDquijing); // delayms(1000); Lcd_Init();hanzi_Disp(1,1,"科技无所不能!"); delayms(1000);Lcd_Fill(0x00); //清显示RAMdelayms(500);}}。

51单片机12864液晶字符显示

51单片机12864液晶字符显示

51单片机12864液晶字符显示51 单片机的12864 液晶字符显示,采用液晶的并行接法#include#include#include#define uchar unsigned char#define uint unsigned int#define LCD_data P0 //定义数据口sbit LCD_RS=P3 ; //数据命令选择端,高电平为写数据,低电平写命令sbit LCD_RW=P3;//读写控制端,高电平读信息,低电平写信息sbit LCD_EN=P3;// 使能端sbit LCD_PSB=P3;//拉高,选择并行//单片机特殊功能位声明uchar code dis1[]={“姓名:浩泉”};uchar code dis2[]={“性别:男”};uchar code dis3[]={“卡号:050817”};uchar code dis4[]={“”};void delay_1ms(uint x) //延时函数1ms{ uint i,j; for(j=0;jvoid write_cmd(uchar cmd) //写命令函数,请参考12864 液晶手册{ LCD_RS=0; //低电平,写入命令LCD_RW=0;P0=cmd; // 赋值delay_1ms(5); LCD_EN=1;//使能端拉高送入命令delay_1ms(5); LCD_EN=0;}void write_date(uchar date) //写数据{ LCD_RS=1; LCD_RW=0;P0=date; delay_1ms(5); LCD_EN=1; //使能端拉高送入数据delay_1ms(5); LCD_EN=0;}void lcd_pose(uchar X,uchar Y) //液晶显示位置函数{ uchar S,pose; switch (X) { case 0: S=0x80; //液晶第一行显示break;case 1: S=0x90; //第二行显示break;case 2: //第三行显示S=0x88; break;case 3: //第四行显示S=0x98; break;} pose=S+Y; write_cmd(pose);}。

12864串行方式使用体会

12864串行方式使用体会

12864使用心得论文一、硬件连接1.1 12864引脚示意图1.2 本次实验中12864与MCU的连接示意图/****************晶振为11.0592**********************/sbit PSB = P1^0; //并1/串0选择//串行接法sbit CS = P1^3; //串片选sbit DS = P1^2; //串数据口sbit SCK = P1^1; //串时钟信号/*//并行接法sbit RS = P1^3; //数据/命令选择端sbit RW = P1^2; //读写选择端sbit E = P1^1; //使能信号端#define DataIO P0 //并行数据口*/二、底层基本程序(串行方式)2.1 基本写字节程序//写一个字节(以SCK上升沿接收一个位)void sendbyte(uint8 zdata){uint16 i;for(i=0; i<8; i++){if((zdata << i) & 0x80){DS = 1;}else {DS = 0;}SCK = 0;SCK = 1;}}2.2 写命令程序(若晶振频率>11.0592,则需加延时处理)//写命令void writeCmd(uint8 cmdcode){CS = 1;sendbyte(0xf8);sendbyte(cmdcode & 0xf0);sendbyte((cmdcode << 4) & 0xf0);// delayMs(1); //若晶振频率>11.0592,则需延时}2.3 写数据程序(若晶振频率>11.0592,则需加延时处理)//写数据void writeData(uint8 dispdata){CS = 1;sendbyte(0xfa);sendbyte(dispdata & 0xf0);sendbyte((dispdata << 4) & 0xf0);// delayMs(1); //若晶振频率>11.0592,则需延时}2.4 通用软件毫秒延时程序//延时程序void delayMs(uint16 xms){uint16 i,j;for (i=0;i<=xms;i++)for (j=0;j<=123;j++);}三、文本显示3.1 LCD12864初始化//LCD12864初始化void LCD12864Init(){PSB = 0; //串行writeCmd(0x30); //基本指令模式writeCmd(0x04); //游标右移一位writeCmd(0x0c); //显示开,关光标writeCmd(0x01); //清除LCD的内容(仅字符模式) }模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指令表1:(RE=0:基本指令)指令表2:(RE=1:扩充指令)3.2 LCD12864字符串的显示//写字符串函数,参数line第1/2行beSpace字符前面的空格数pString指针uint8 write12864String(uint8 line,uint8 beSpace,char *pString){uint8 i=0;uint8 sLength = strlen(pString); //字符串长度if (pString == NULL) //空字符串return -1;writeCmd(0x30); //基本指令模式//设置写在的位置if (line == 1){writeCmd(0x80 + beSpace); //写在第一行的位置}else if (line == 2){writeCmd(0x90 + beSpace); //写在第二行的位置}else if (line == 3){writeCmd(0x88 + beSpace); //写在第三行的位置}else if (line == 4){writeCmd(0x98 + beSpace); //写在第四行的位置}else{return -1;}//写数据for (i=0;i< sLength;i++){writeData ( *pString );pString ++;}return 0;}12864每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。

12864画圆程序 12864显示任意图形和字符

12864画圆程序  12864显示任意图形和字符

uchar Read_data()
{
uchar shuju;
P0=0xff;
rs=1;
// D/I=1,代表数据
rw=1;
// R/W=1.读取
delayms(10);
en=1;
delayms(100); shuju=P0; //读取当前显示的数据
en=0;
return(shuju);
}
/******************************************* 函数名称:Draw_TX 功 能:显示一个 16*16 大小的图形 参 数:Yaddr--Y 地址
uchar i,j,k;
Write_com(0x34);
//打开扩展指令集
i=0x80;
for(j=0;j<32;j++)
{
Write_com(i++);
Write_com(0x80);
for(k=0;k<16;k++)
{
Write_data(0x00);
}
}
i=0x80;
for(j=0;j<32;j++)
{
Write_com(i++);
Write_com(0x88);
for(k=0;k<16;k++)
{
Write_data(0x00);
}
} Write_com(0x30);
//回到基本指令集
}
/****************************
画点函数:Write_Point() x 表示列,y 表示为行。 ******************************/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

12864串行显示(字符、字符串)/************************************************************** ******* 文件名:串行12864显示.c* 描述 : 该程序实现了12864以串行的方式进行通信。

液晶上的R9。

R10决定液晶的串行或者并行通讯方式。

液晶上的PSB已经拉为高电平。

如果使用串行,需要取掉R9。

* 创建人:* 版本号:*************************************************************** ********/#include#include#define uchar unsigned char#define uint unsigned intsbit CS=P2^5; //片选信号sbit SID=P2^6; //数据信号sbit SCLK=P2^7; //时钟信号sbit RST=P2^2; //复位信号sbit CH = P2^4; //并行、串行选择信号/************************************************************** ******* 名称 : delay()* 功能 : 延时,延时时间为 100us * t。

这是通过软件延时,有一定误差。

* 输入 : t* 输出 : 无*************************************************************** ********/void delay(unsigned int t){unsigned int i,j;for(i=0; ifor(j=0; j<10; j++);}/************************************************************** ******* 名称 : sendbyte()* 功能 : 按照液晶的串口通信协议,发送数据* 输入 : zdata* 输出 : 无*************************************************************** ********/void sendbyte(unsigned char zdata){unsigned int i;for(i=0; i<8; i++){if((zdata << i) & 0x80){SID = 1;}else{SID = 0;}SCLK = 0;SCLK = 1;}}/************************************************************** ******* 名称 : write_com()* 功能 : 写串口指令* 输入 : cmdcode* 输出 : 无*************************************************************** ********/void write_com(unsigned char cmdcode){CS = 1;sendbyte(0xf8);sendbyte(cmdcode & 0xf0);sendbyte((cmdcode << 4) & 0xf0);delay(2);}/************************************************************** ******* 名称 : write_data()* 功能 : 写串口数据* 输入 : cmdcode* 输出 : 无***********************************************************************/void write_data(unsigned char Dispdata){CS = 1;sendbyte(0xfa);sendbyte(Dispdata & 0xf0);sendbyte((Dispdata << 4) & 0xf0);delay(2);}/************************************************************** ******* 名称 : lcdinit()* 功能 : 初始化函数* 输入 : cmdcode* 输出 : 无*************************************************************** ********/void lcdinit(){RST = 0;delay(100);RST = 1;delay(20000);write_com(0x30);delay(50);write_com(0x0c);delay(50);}/************************************************************** ******* 名称 : L1602_num(uchar hang,uchar lie,char sign)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示(0~9) ,调用该函数如下L1602_char(1,5,9)* 输入 : 行,列,需要输入1602的数据* 输出 : 无*************************************************************** ********/void L12864_num(uchar hang,uchar lie,char sign){switch(hang){case 1: write_com(0x80+lie);break;case 2: write_com(0x90+lie);break;case 3: write_com(0x88+lie);break;case 4: write_com(0x98+lie);break;default:break;}write_data(sign+48);}/************************************************************** ******* 名称 : L1602_char(uchar hang,uchar lie,char sign)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下L1602_char(1,5,'b')* 输入 : 行,列,需要输入1602的数据* 输出 : 无*************************************************************** ********/void L12864_char(uchar hang,uchar lie,char sign){switch(hang){case 1: write_com(0x80+lie);break;case 2: write_com(0x90+lie);break;case 3: write_com(0x88+lie);break;case 4: write_com(0x98+lie);break;default:break;}//write_data(00);write_data(sign);}/************************************************************** ******* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下L1602_string(1,5,"ab cd ef;")* 输入 : 行,列,需要输入1602的数据* 输出 : 无*************************************************************** ********/void L12864_string(uchar hang,uchar lie,uchar *p){switch(hang){case 1: write_com(0x80+lie);break;case 2: write_com(0x90+lie);break;case 3: write_com(0x88+lie);break;case 4: write_com(0x98+lie);break;default:break;}while(*p>0){write_data(*p);p++;}}/************************************************************** ******* 名称 : Test()* 功能 : 显示子函数* 输入 : 无* 输出 : 无*************************************************************** ********/void Test(){//write_com(0x03);//delay(50);L12864_num(1,0,8);L12864_char(2,0,'m');L12864_string(3,0,"sffds");L12864_string(4,0,"是电池");}/************************************************************** ******* 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无*************************************************************** ********/void Main(){CH = 0;delay(1);lcdinit();delay(10);while(1){Test();delay(5000);}}。

相关文档
最新文档