最完整的12864测试程序
12864模块ST7565R串口画点画线测试程序

新建文本文档 (2).txt for(z=0;z<5;z++) { DispByte(page,col+z,ASCII_5X8_12864[dat+z]); } } //---------------------------------------------------------void DispStr(Uchar page,Uchar col,Uchar *_char) //指定位 置写5*8字符串 { while(*_char!='\0') { DispChar(page,col,*_char++); col+=5; } } //---------------------------------------------------------void DispHZ(Uchar page,Uchar col,Uchar *charr) //指定位置写 16*16汉字 { Uint z,cc; for(cc=0;cc<2;cc++) { for(z=0;z<16;z++) { DispByte(page,col+z,*charr++); } page++; } } //---------------------------------------------------------//------------------1~64 com, 1~128seg---------------------//-----浮点运算和除法会降低显示速度,此处避开浮点和乘除法------void DrawLines(Uint Hx1,Uint Hy1,Uint Hx2,Uint Hy2) //指定2个坐标点 画线 { Uint temp; Uchar inc,dx,dy; if(Hx2>=Hx1) else dx=Hx2-Hx1; dx=Hx1-Hx2; //x轴方向增量
12864显示

#include "msp430g2553.h"//12864液晶串行显示测试程序//P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚)//4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式//17脚(RST信号)根据注释提示悬空extern unsigned char table[];void int_port(void) //管脚初始化{P1SEL&=~BIT4 ; //P1.4模拟SID,设置为i/o口输出方向&=~BIT4P1DIR|=BIT4;P1OUT&=~BIT4 ;P1SEL&=~BIT5; //P1.5模拟SCLK,设置为i/o口输出方向P1DIR|=BIT5;P1OUT&=~BIT5;}void delay(unsigned int t) //延时函数{ //粗略延时,满足时序要求unsigned int i,j;for(i=0; i<t; i++)for(j=0; j<10; j++);}void sendbyte(unsigned char zdata) //数据传送函数{unsigned char m;unsigned char n;m=zdata;for(n=0; n<8; n++){if(m&0x80){P1OUT|=BIT4; //SID为1}else{P1OUT&=~BIT4; //SID为0}P1OUT&=~BIT5; //产生时钟信号下沿P1OUT|=BIT5; //产生时钟信号上沿m<<=1; //准备发送下一位数据serial_shift=serial_shift>>1;}}void write_com(unsigned char cmdcode) //写命令函数{ //串口控制格式(11111AB0)//A数据方向控制,A=H时读,A=L时写//B数据类型选择,B=H时为显示数据,B=L 时为命令sendbyte(0xf8); //MCU向LCD发命令1111 1000sendbyte(cmdcode & 0xf0); //发高四位数据(数据格式D7D6D5D4_0000) sendbyte((cmdcode << 4) & 0xf0);//发低四位数据(数据格式D3D2D1D0_0000)delay(2); //延时等待}void write_data(unsigned char Dispdata)//写数据函数{sendbyte(0xfa); //MCU向LCD发数据1111 1010sendbyte(Dispdata & 0xf0); //发高四位数据sendbyte((Dispdata << 4) & 0xf0);//发低四位数据delay(2);}void lcdinit() //LCD初始化{delay(200); //复位等待(内部自带上电复位电路),时间较长write_com(0x30); //功能设定:基本指令集操作delay(1); //延时等待write_com(0x0c); //整体显示,关游标//write_com(0x0f);// delay(50);write_com(0x01); // 清除显示内容,否则刷新时出乱码delay(50);}void display(unsigned char *s) //发送字符串{while(*s > 0) //C语言里字符串末尾自动加“\0”(ASCII码值为0) {write_data(*s); //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址s++;delay(50);}}void Test( ){// write_com(0x03); //发指令,地址归位//delay(5); //延时write_com(0x01); // 清除显示内容,否则刷新时出乱码delay(50);write_com(0x80); //第一行首地址0x80display("电压:"); //第一行显示write_com(0x90); //第一行首地址0x80display(table); //第一行显示write_com(0x96);display("V ");write_com(0x98);display("电压正常测试");delay(50);delay(500); //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态}。
LCD12864液晶屏测试程序

/////LCD12864液晶屏测试程序(已通过)//////////////液晶屏型号:HJ12864M-1//////////#include <reg52.h>#define uchar unsigned char#define uint unsigned int//8bit数据接入IO口#define Part P0 //P0接8位数据线//控制数据端sbit LCD_RS=P2^5; //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器sbit LCD_RW=P2^6; //定义12864液晶RW端,读/写信号 H:读 L:写sbit LCD_EN=P2^7; //定义12864液晶LCDEN端, 片选信号下降沿触发,锁存数据sbit LCD_PSB=P3^2; //定义12864液晶PSB端, H:并行 L:串行sbit LCD_RST=P3^4; //定义12864液晶RST端, H:不复位 L:复位uchar code dis1[]={"床前明月光"};uchar code dis2[]={"疑是地上霜"};uchar code dis3[]={"举头望明月"};uchar code dis4[]={"低头思故乡"};//毫秒延时函数void delay(uint xms){uint i,j;for(j=0;i<xms;j++)for(i=0;i<110;i++);}//LCD忙检测函数bit lcd_busy(){bit result;LCD_RS=0;LCD_RW=1;LCD_EN= 1;result=(bit)(Part & 0x80); LCD_EN=0;return result;}//液晶写命令函数void lcd_write_cmd(uchar com) {while(lcd_busy());LCD_RS=0; //选择指令寄存器LCD_RW=0; //写LCD_EN=0;Part=com; //指令值赋给P0口delay(5);LCD_EN=1;delay(5);LCD_EN=0;}//液晶写一个字符数据函数void lcd_write_dat(uchar date){while(lcd_busy());LCD_RS=1; //选择数据寄存器LCD_RW=0; //写LCD_EN=0;P0=date; //数据值赋给P0口delay(5);LCD_EN=1;delay(5);LCD_EN=0;}//液晶写一个字符串函数void lcd_write_string(uchar *str){while(*str!='\0') //未结束{lcd_write_dat(*str++);delay(5);}}//液晶显示位置函数void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示{uchar pos;if(x==1) //第一行{ x=0x80;}else if(x==2) //第二行{ x=0x90;}else if(x==3) //第三行{ x=0x88;}else if(x==4) //第四行{ x=0x98;}pos=x+y-1; //首地址为0X80lcd_write_cmd(pos);}//液晶初始化函数void lcd_init(){LCD_PSB=1; //并行方式LCD_RST=1; //不复位lcd_write_cmd(0x30);delay(5);lcd_write_cmd(0x0c); //开显示,不显示光标delay(5);lcd_write_cmd(0x06); //写一个字符后地址指针自动加1 delay(5);lcd_write_cmd(0x01); //清屏delay(5);}//主函数函数void main(){// uchar i;lcd_init();while(1){lcd_pos(1,1);// lcd_write_string(dis1);lcd_write_string("床前明月光");delay(5);lcd_pos(2,1);// lcd_write_string(dis2);lcd_write_string("疑是地上霜");delay(5);lcd_pos(3,1);// lcd_write_string(dis3);lcd_write_string("举头望明月");delay(5);lcd_pos(4,1);// lcd_write_string(dis4);lcd_write_string("低头思故乡");delay(500);}}。
12864点阵液晶显示测试程序(带字库)

12864点阵液晶显示测试程序(带字库)接口说明1 12864-1测试程序:#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1sbit rs = P1^1; //H=data; L=command;sbit rw = P1^2; //H=read; L=write;sbit e = P1^3; //input enable;sbit psb= P1^4; //H=并口; L=串口;sbit rst= P1^5; //Reset Signal 低电平有效sbit busy=P2^7; //lcd busy bitvoid wr_lcd (uchar dat_comm,uchar content);void chk_busy (void);void delay (uint us);uchar code tab1[]={" 床前明月光, "" 疑是地上霜, ""举头望明月, ""低头思故乡。
"};uchar code tab31[]={"你的选择""没有错"};uchar code tab32[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名1.bmp --*//*-- 宽度x高度=128x32 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x FF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF,0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};uchar code tab5[]={/*-- 调入了一幅图像:D:\Backup\桌面\未命名.bmp --*//*-- 宽度x高度=128x64 --*/0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x01,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x06,0x06,0xFF,0xFF, 0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x04,0x04,0x02,0xFF,0xFF, 0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0xF3,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x04,0x83,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x04,0x06,0x07,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x24,0xE6,0x3F,0xFF,0xFF, 0xFF,0xFD,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x64,0xE4,0x3F,0xFF,0xFF, 0xFF,0x03,0xF7,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0xE4,0x3F,0xFF,0xFF, 0xFF,0x0F,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x02,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xE4,0x04,0x82,0xFF,0xFF, 0xFF,0x1F,0xF0,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFC,0xFF,0xFF,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x3D,0xF0,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0xFF,0xFF, 0xFF,0x79,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };/*------------------初始化-----------------*/void init_lcd (void){rst=1;psb=1;wr_lcd (comm,0x30); /*30---基本指令动作*/wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/}/*---------------显示汉字或字符----------------*/ void chn_disp (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);for (j=0;j<4;j++){for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}}/*-----------上半屏显示汉字或字符------------*/ void chn_disp1 (uchar code *chn){uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);}/*----------------显示图形-----------------*/void img_disp (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x1+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j-32);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*-------------下半屏显示图形--------------*/ void img_disp1 (uchar code *img){uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x2+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);}/*--------------显示点阵----------------*/void lat_disp (uchar data1,uchar data2) {uchar i,j,k,x;x=x1;for(k=0;k<2;k++){for(j=0;j<16;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data1);}for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j*2+1);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,data2);wr_lcd (dat,data2);}}x=x2;}wr_lcd (comm,0x36);}/*-----------------------------------------------*///当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) {uchar i,j;for(j=0;j<yl;j++){for(i=0;i<xl;i++){wr_lcd (comm,0x34);wr_lcd (comm,y0+j);wr_lcd (comm,x0+i);wr_lcd (comm,0x30);wr_lcd (dat,data1);wr_lcd (dat,data2);}}wr_lcd (comm,0x36);}/*--------------清DDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);}/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content) {chk_busy ();if(dat_comm){rs=1; //datarw=0; //write}else{rs=0; //commandrw=0; //write}P2=content; //output data or comme=1;;e=0;}void chk_busy (void){P2=0xff;rs=0;rw=1;e =1;while(busy==1);e =0;}void delay (uint us) //delay time{while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)delay(1);}/*------------------主程序--------------------*/void main (){SP=0x5f;init_lcd ();while (1){lat_disp (0x00,0x00);chn_disp (tab1);con_disp (0xff,0xff,0x8c,0x80,2,16);delay1 (28000);clrram();lat_disp (0xcc,0xcc);delay1 (28000);lat_disp (0x00,0x00);chn_disp1 (tab31);img_disp1 (tab32);delay1 (28000);clrram();lat_disp (0xff,0x00);delay1 (28000);img_disp (tab5);delay1 (28000);}}。
最完整的12864测试程序

以下是RT12864引脚功能定义 引脚号管脚 说明 1Vss 电源地(0V)。
2VDD 电源正(+5V)。
3V0 LCD 驱动电压,应用时在VEE 与V0之间加一20K 可调电阻。
4 D/I 数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。
5 R/W 读\写选择:高电平:读数据;低电平:写数据。
6 E 读写使能,高电平有效,下降沿锁定数据。
7 DB0数据输入输出。
8 DB1 9 DB2 10DB3 11DB4 12DB5 13DB6 14DB7 15CS1 片选择信号,低电平时选择前64列。
16CS2 片选择信号,低电平时选择后64列。
17RET 复位信号,低电平有效。
18VOUT LCD 驱动电源(-10V )。
19LED+ 背光电源,LED+(+5V)。
20LED- 背光电源,LED-(0V)。
以下是RT12864引脚功能定义引脚号管脚说明1Vss电源地(0V)。
2VDD电源正(+5V)。
3V0LCD驱动电压,应用时在VEE与V0之间加一20K可调电阻。
4D/I数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。
5R/W读\写选择:高电平:读数据;低电平:写数据。
6E读写使能,高电平有效,下降沿锁定数据。
7DB0数据输入输出。
8DB19DB210DB311DB412DB513DB614DB715CS1片选择信号,低电平时选择前64列。
16CS2片选择信号,低电平时选择后64列。
17RET复位信号,低电平有效。
18VOUTLCD驱动电源(-10V )。
19LED+背光电源,LED+(+5V)。
20LED-背光电源,LED-(0V)。
/********************************************/ /* 12864系列测试程序*//********************************************/ #include <reg51.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <math.h>/* LCD寄存器命令代码*/#define Disp_On 0x3f#define Disp_Off 0x3e#define Col_Add 0x40#define Page_Add 0xb8 //每页是8行#define Start_Line 0xc0//LCD和51连接#define Lcd_Bus P0 //MCU P1<------> LCMsbit Mcs=P2^6; //Master chip enablesbit Scs=P2^5; //Slave chip enablesbit Enable=P3^7; //mode Enable singlesbit Di=P2^4; //Data or Instrument Selectsbit RW=P2^3; //Write or Readsbit Lcd_Rst=P1^0; //Lcm resetchar code HANZI[7][32]={{0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00},//"电"{0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00},//"流"{0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00},//"压"{0x00,0xFF,0x11,0x29,0xC7,0x01,0xFE,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x00,0xFF,0x02,0x04,0x43,0x40,0x7F,0x42,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00},//"阻"{0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00},//温{0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00},//度{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00} //力};char code shu[14][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//"0" {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//"1" {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//"2" {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//"3" {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//"4" {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//"5" {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//"6" {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//"7" {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//"8" {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//"9" {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//"+"{0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"-" {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//"." {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00}//"v"};/*------------------延时子程序-----------------------------*/void delay(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}/**********************************************************************数原型:void write_com(unsigned char cmdcode)入口参数: cmdcode 写入的命令出口参数: 无返回值:无说明:写命令到LCD**********************************************************************/void write_com(unsigned char cmdcode){Di=0;RW=0;Lcd_Bus=cmdcode;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:void write_data(unsigned char Dispdata)入口参数: Dispdata 写入的数据出口参数: 无返回值:无说明:写数据到LCD**********************************************************************/void write_data(unsigned char Dispdata){Di=1;RW=0;Lcd_Bus=Dispdata;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:Clr_Scr()入口参数: 无出口参数: 无返回值:无说明:清除显示内存**********************************************************************/void Clr_Scr(){unsigned char j,k;Mcs=1;Scs=1;write_com(Page_Add+0);write_com(Col_Add+0);for(k=0;k<8;k++){ write_com(Page_Add+k);for(j=0;j<64;j++)write_data(0x00);}}/**********************************************************************数原型:DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH)入口参数: CharType: 显示的字符类型1:16x16汉字2:8x16 字符3: 4x16pag :显示在第几行;col :显示在第几列;MH : 显示的内容代码;出口参数: 无返回值:无说明:在指定的行列显示字符,可以跨区域显示**********************************************************************/void DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH){ unsigned char tcol,j=0,i=0;unsigned char twidth,tpag;tpag=pag;if (CharType==1){tcol=48; // 16*16 汉字twidth=16;}if (CharType==2){tcol=56; // 8*16 字符twidth=8;}if (col<=tcol) //1区够显示{ Mcs=1;Scs=0;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if (col>=64) //0区够显示{ Mcs=0;Scs=1;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col-64);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if ((col>tcol)&&(col<64)) //介于1,0区之间显示{for(j=0;j<2;j++){ Mcs=1;Scs=0;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<(64-col);i++) write_data(MH[twidth*j+i]);Mcs=0;Scs=1;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+0);for(i=(64-col);i<twidth;i++) write_data(MH[twidth*j+i]);}}}/********************************************************************** 数原型:void DISP_float(unsigned char pag,unsigned char col, float fData)入口参数: pag :显示在第几行;col :显示在第几列;fData : 显示的数据;出口参数: 无返回值:无说明:在指定的行列上显示数据,可以跨区域显示**********************************************************************/ void DISP_float(unsigned char pag,unsigned char col, float fData){ unsigned long int tData;unsigned char wei,i,j,tbit,fuhao,dai;unsigned char wei_shu[5];if (fData>0)fuhao=1;elsefuhao=0;if ((fData<1) &&(fData>-1))dai=1;elsedai=0;tData=(unsigned int)(abs(fData*10));if (tData<=9) wei=1;if ((tData>9) && (tData<=99)) wei=2;if ((tData>99) && (tData<=999)) wei=3;if ((tData>999) && (tData<=9999)) wei=4;if ((tData>9999) && (tData<=99999)) wei=5;for(i=wei;i>=1;i--){ tbit=tData%10;wei_shu[i-1]=tbit;tData/=10;}if (fuhao==0) //显示0>x{DispChart(2,pag,col,shu[11]);if (dai==1) //显示0>x>-1{DispChart(2,pag,col+8,shu[0]); DispChart(2,pag,col+16,shu[12]);j=3;}else j=1;}elseif (fuhao==1)//显示x>0{if (dai==1)//显示1>x>0{DispChart(2,pag,col,shu[0]);DispChart(2,pag,col+8,shu[12]);j=2;}else j=0;}for (i=0;i<wei;i++){ DispChart(2,pag,col+j*8,shu[wei_shu[i]]);if ((i==(wei-1))&&(dai==0)){DispChart(2,pag,col+j*8,shu[12]); DispChart(2,pag,col+(j+1)*8,shu[wei_shu[i]]); goto bbreak;}j=j+1;}bbreak:;}/********************************************************************** 数原型:void init_lcd()入口参数: 无出口参数: 无返回值:无说明:初始化LCD屏**********************************************************************/ void init_lcd(){Lcd_Rst=0;delay(100);Lcd_Rst=1;delay(100);Mcs=1; Scs=1;delay(100);write_com(Disp_Off);write_com(Page_Add+0);write_com(Start_Line+0);write_com(Col_Add+0);write_com(Disp_On);}//主程序main(){unsigned char i=0;float ff;init_lcd();Clr_Scr();ff=-0.9;// ff=0.4;//ff=2121.4;//ff=-1452;DISP_float(0,55,ff);while(1){ DispChart(1,2,0,HANZI[4]);DispChart(1,2,15+10,HANZI[0]); DispChart(1,2,31+10,HANZI[1]);DispChart(2,2,47+10,shu[8]); DispChart(2,2,55+10,shu[4]);DispChart(2,2,63+10,shu[2]); DispChart(2,2,71+10,shu[4]);DispChart(2,2,79+10,shu[1]);DispChart(2,2,87+10,shu[0]); delay(1000);}}。
12864程序

硬件连接方式是:并口直接访问。
这是汉字显示程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define datawr 0x1200 //写数据通道#define comwr 0x1000 //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100 //读忙通道uchar code disp_data[]={" 浙江大学" //第一行,第一页"04级通信工程一班" //第三行" 宁波理工学院" //第二行" 竞赛小组" //第四行"128X64液晶显示器" //第一行,第二页" 测试程序" //第三行" 07年07月25日" //第二行" Tornado "}; //第四行void set12864();void write_command(uchar command);void write_page(uchar data_add);void read_page(uchar data_add);void delays(uchar cont);void main(){while(1){set12864(); //初始化12864write_page(0); //写入一页数据read_page(0x30); //读出一页数据到内部RAMdelays(2); //延时2swrite_page(64); //写入下一页数据delays(2); //延时2s}}//初始化12864子程序void set12864(){write_command(0x30); //功能设定控制字write_command(0x0c); //显示开关控制字write_command(0x01); //清除屏幕控制字write_command(0x06); //进入设定点控制字}//写控制命令子程序void write_command(uchar command){bit flag=1; //12864空闲标志位while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[comwr]=command; //空闲传送控制字}//写一页子程序void write_page(uchar data_add){bit flag=1; //12864空闲标志位uchar num=64; //64个循环,连续写入32个汉字或是64个西文字符write_command(0x80);for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据}}//读一页子程序void read_page(uchar data_add){bit flag=1; //12864空闲标志位uchar num=64; //64个循环,连续写入32个汉字或是64个西文字符write_command(0x80);for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;DBYTE[data_add++]=XBYTE[datare]; //空闲传送数据}}//延时cont秒子程序void delays(uchar count){unsigned char h,i,j,k;do{for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}while(--count);}这是图象显示程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define datawr 0x1200 //写数据通道#define comwr 0x1000 //写控制命令通道#define datare 0x1300 //读数据通道#define comre 0x1100 //读忙通道uchar code disp_data[] = // 数据表{0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00 ,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00 ,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00 ,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00 ,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00 ,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x0 0,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x8 0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0 3,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0 0,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8 0,0x00,0x0B,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8 0,0x00,0x00,0x1F,0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC 0,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xF3,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC 0,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xE6,0x62,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE 1,0x60,0x00,0x68,0x01,0xFF,0xFF,0xFE,0x00,0x60,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1 ,0x00,0x00,0x0E,0x01,0xFF,0xFF,0xF8,0x00,0x4B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0 ,0x8E,0x08,0x79,0x07,0xFF,0xFF,0xF0,0x00,0x41,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6 ,0xC0,0x07,0x61,0xC3,0xFF,0xFE,0xC0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xED,0xEF,0x3F,0x83,0xFF,0xFE,0x60,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xC0,0xFF,0xFD,0xFC,0x6C,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xFF,0xF0,0x7F,0xF3,0xFF,0xFE,0x60,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0x50,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFF,0xFF,0xC9,0xFB,0xFF,0xF1,0xF8,0x8C,0xD8,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF F,0xFB,0x6F,0xD9,0xC2,0x3F,0xF8,0x40,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6 ,0xDF,0x1E,0xFF,0xFF,0x7F,0xFC,0x38,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x64 ,0x2F,0x6F,0xFF,0xFD,0x7B,0xFC,0x1F,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x5 F,0x7C,0xEE,0xFF,0xC7,0xFF,0xBC,0x0F,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xD F,0xFE,0xEF,0xFF,0xFF,0xE7,0xDC,0x07,0xE7,0xF8,0x12,0x7F,0xFF,0xFF,0xFF,0xFF,0x4 7,0xFF,0xFF,0xFF,0xFF,0xE7,0x80,0x03,0xF4,0x00,0x00,0x5F,0xFF,0xFF,0xFE,0xFE,0xE3 ,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0x01,0xC0,0x00,0x00,0x1B,0xFF,0xFF,0xFB,0xFF,0xF F,0xFF,0xFF,0xFF,0x7F,0xEE,0xC0,0x00,0xC0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF ,0xFF,0xFF,0xFF,0xFE,0x98,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF, 0xFF,0xFF,0xFF,0x20,0x0E,0x60,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x8F,0xFF,0xFF, 0xFF,0xFF,0xFF,0x05,0x80,0xE0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFD,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0x09,0x80,0xA0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7F,0xFF,0xFF, 0xFF,0xFF,0xFF,0x85,0x2A,0xC0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFB,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFE,0xBF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xF7,0xFF,0xFF,0xFF, 0xFF,0xFF,0xF8,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xC0,0x1F,0xFF,0xFF,0x80,0x00,0x40,0x00,0x00,0x00,0xFF,0x80,0xFF,0xFF,0xFF, 0x80,0x07,0xFF,0xFF,0xFF,0xC0,0x00,0xC0,0x00,0x00,0x01,0xFF,0x01,0xFF,0xFF,0xF8 ,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x63,0x80,0x00,0x00,0x01,0xFE,0x01,0xFF,0x18,0x00, 0x3F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x01,0xCC,0x01,0xFE,0x00,0x07, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0xA0,0x03,0xFC,0x00,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x05,0xC0,0x03,0xC8,0x00,0x7F, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x88,0x0C,0x07, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xC0, 0x7F,0xFF,0xFF,0xFF,0xFF,0xF8,0x07,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0 x0F,0xFF,0xFE,0xFF,0xFF,0xD0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F, 0x03,0xFF,0xF8,0xFF,0xFC,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x3F,0xFF,0xC0,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0 x00,0xFF,0xF8,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0 x00,0x1F,0xFE,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0 x00,0x0F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x78,0x00,0x00,0x00,0x00,0 x00,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0 x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x27,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x04,0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x01};void set12864();void setxy(uchar x,uchar y);void write_command(uchar command);void write_16byte(uint data_add);void delays(uchar count);void main(){uchar x,y,i;while(1){y="0x80"; //设置液晶上半部分坐标x="0x80";delays(2); //延时2sset12864(); //初始化12864delays(2);for(i=0;i<32;i++) //写入液晶上半图象部分{ //写入坐标setxy(x,y);write_16byte(i*16); //连续写入16字节数据y++; //y轴地址加1}y="0x80"; //设置液晶下半部分坐标x="0x88";for(i=0;i<32;i++) //写入液晶下半图象部分{setxy(x,y); //写入坐标write_16byte((32+i)*16);//连续写入16字节数据y++; //y轴地址加1}write_command(0x34); //写入扩充指令命令write_command(0x36); //显示图象}}//初始化12864子程序void set12864(){write_command(0x30); //功能设定控制字write_command(0x0c); //显示开关控制字write_command(0x01); //清除屏幕控制字write_command(0x06); //进入设定点控制字}//设置绘图坐标void setxy(uchar x,uchar y){write_command(0x34); //写入扩充指令命令write_command(y); //写入y轴坐标write_command(x); //写入x轴坐标write_command(0x30); //写入基本指令命令}//写控制命令子程序void write_command(uchar command){bit flag="1"; //12864空闲标志位while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[comwr]=command; //空闲传送控制字}void write_16byte(uint data_add){bit flag="1"; //12864空闲标志位uchar num="16"; //16个循环,连续写入16个字节for(;num>0;num--){while(flag) //检查12864是否空闲flag="XBYTE"[comre]&0x80;XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据}}//延时count秒子程序void delays(uchar count){unsigned char h,i,j,k;do{for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--);}while(--count);}程序代码如下:#include <reg52.h>#include"INTRINS.H"#define uint unsigned int#define uchar unsigned char#define x1 0x80#define x2 0x88#define y 0x80#define comm 0#define dat 1sbit cs = P0^0;sbit std = P0^1;sbit sclk = P0^2;//sbit rst = P0^3; //Reset Signal 低电平有效void wr_lcd (uchar dat_comm,uchar content);void delay (uint us);void lcd_char(uchar x0,uchar y0,uchar k,uchar *chn); void init_lcd (void);void lcd_string(uchar x0,uchar y0,uchar k,uchar *chn);/*------------------初始化-----------------*/void init_lcd (void){// rst=1;wr_lcd (comm,0x30); /*30---基本指令动作*/wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/delay (100);wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/}/*--------------清DDRAM------------------*/void clrram (void){wr_lcd (comm,0x30);wr_lcd (comm,0x01);delay (180);}/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content){uchar a,i,j;delay (500);a=content;cs=1;_nop_();sclk=0;_nop_();std=1;_nop_();for(i=0;i<5;i++){sclk=1;_nop_();_nop_();_nop_();sclk=0;}std=0;_nop_();sclk=1;_nop_();_nop_();_nop_();sclk=0;_nop_();if(dat_comm)std=1; //data elsestd=0; //command sclk=1;_nop_();_nop_();_nop_();sclk=0;std=0;_nop_();sclk=1;_nop_();_nop_();_nop_();sclk=0;for(j=0;j<2;j++){for(i=0;i<4;i++) {a=a<<1;std=CY;sclk=1;_nop_();_nop_();_nop_();sclk=0;}std=0;for(i=0;i<4;i++) {sclk=1;_nop_();_nop_();_nop_();sclk=0;}}}/*-----------------------------------*/void delay (uint us) //delay time{while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<15;j++)delay(1);}/*-------在任意位置显示一串汉字------X0为行,Y0为列,chn为所要显示的汉字串 ,k为汉字个数*/void lcd_char(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);wr_lcd (comm,adr);for(i=0;i<2*k;i++)wr_lcd (dat,chn[i]);}//在任意位置显示字符串,k为字符个数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);wr_lcd (comm,adr);for(i=0;i<k;i++)wr_lcd (dat,chn[i]);}/*------------------主程序--------------------*/ void main (){ uchar chn[4]={0x31,0x32,0x35,0x36};uchar b[]={"欢迎使用本程序"};init_lcd ();while (1){clrram();lcd_char(0,0,7,b);lcd_string(1,0,4,chn);delay1 (8000);}}/*********************************************************************//*文件名称:12864-01-8x8.asm SIDE: 128 X 64 DOTS */ /*模块名:12864-1 模块CONTROLLER: KS0108 */ /*创建人:zmlceo 日期:2008-12-01 *//*QQ:527717539 日期:2008-12-01 *//*功能描述:*//*其他说明:*//*版本:V1.0 *//*********************************************************************///显示/*****************//* *//* 12864lcd *//* *//* *//*****************/#include <reg52.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <math.h>/* Define the register command code */#define Disp_On 0x3f#define Disp_Off 0x3e#define Col_Add 0x40#define Page_Add 0xb8#define Start_Line 0xc0#define Lcd_Bus P0 //MCU P1 LCM/*sbit Mcs="P2"^3; //Master chip enablesbit Scs="P2"^4; //Slave chip enablesbit Enable="P2"^0; //6800 mode Enable singlesbit Di="P2"^5; //Data or Instrument Selectsbit RW="P2"^6; //Write or Readsbit Lcd_Rst=P2^2; //Lcm resetsbit Test_Key=P2^1;*/sbit Mcs="P2"^3; //Master chip enablesbit Scs="P2"^4; //Slave chip enablesbit Enable="P2"^2; //6800 mode Enable singlesbit Di="P2"^0; //Data or Instrument Selectsbit RW="P2"^1; //Write or Readsbit Lcd_Rst=P2^5; //Lcm resetsbit Test_Key=P1^0;//;****************************************************************/*;RS REG P2.0 DEFINE LCM DATA/INSTRUCTION PIN ;R/W REG P2.1 DEFINE LCM READ/WRITE PIN;E REG P2.2 DEFINE LCM CHIP ENABLE PIN;CS1 REG P2.3 DEFINE LCM CHIP 1 SELECT PIN;CS2 REG P2.4 DEFINE LCM CHIP 2 SELECT PIN;RSTB REG P2.5 DEFINE LCM /RESET PIN*/char code SHU1[]={/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20, 0x00,0x00};char code SHU2[]={/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21, 0x30,0x00};char code SHU8[]={/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22, 0x1C,0x00};char code SHU6[]={/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11, 0x0E,0x00};char code SHU4[]={/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F, 0x24,0x00};char code L[]={/*-- 文字: L --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20, 0x30,0x00};char code C[]={/*-- 文字: C --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00};char code D[]={/*-- 文字: D --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10, 0x0F,0x00};/*****************//* *//* 12864LCD *//* *//* *//*****************//*------------------延时子程序-----------------------------*/void delay(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}/*------------------写命令到LCD------------------------------*/void write_com(unsigned char cmdcode){Di=0;RW=0;Lcd_Bus=cmdcode;delay(0);Enable=1;delay(0);Enable=0;}/*-------------------写数据到LCD----------------------------*/ void write_data(unsigned char Dispdata){Di=1;RW=0;Lcd_Bus=Dispdata;delay(0);Enable=1;delay(0);Enable=0;}/*-------------------读LCD数据----------------------------*/ unsigned char read_data(){unsigned char tmpin;Di=1;RW=1;delay(0);Enable=1;delay(0);Enable=0;tmpin=Lcd_Bus;return tmpin;}/*------------------清除内存---------------*/void Clr_Scr(){unsigned char j,k;Mcs=1;Scs=1;write_com(Page_Add+0);write_com(Col_Add+0);for(k=0;k<8;k++){write_com(Page_Add+k);for(j=0;j<64;j++)write_data(0x00);}}/*---------------------指定位置显示字符8*16-----------------------*/void hz_disp816(unsigned char pag,unsigned char col, unsigned char cod e *hzk){unsigned char j="0",i=0;for(j=0;j<2;j++){write_com(Page_Add+pag+j);write_com(Col_Add+col);for(i=0;i<8;i++) write_data(hzk[8*j+i]);}}。
12864串口测试程序

#include <reg51.h>#include <intrins.h>typedef unsigned char u8;typedef unsigned int u16;typedef unsigned long u32;#define uchar unsigned char#define uint unsigned int#define nop _nop_()#define xtal 11.0592 //11.0592M//==========================================================//函数声明void Delay(uint ms); //延时子程序sfr INT_CLKO = 0x8F;sfr WDT_CONTR = 0xC1; //看门狗sfr P4 = 0xC0;sfr P5 = 0xC8;sfr P6 = 0xE8;sfr P7 = 0xF8;sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain sfr P0M1 = 0x93;sfr P0M0 = 0x94;sfr P2M1 = 0x95;sfr P2M0 = 0x96;sfr P3M1 = 0xB1;sfr P3M0 = 0xB2;sfr P4M1 = 0xB3;sfr P4M0 = 0xB4;sfr P5M1 = 0xC9;sfr P5M0 = 0xCA;sfr P6M1 = 0xCB;sfr P6M0 = 0xCC;sfr P7M1 = 0xE1;sfr P7M0 = 0xE2;sfr P1ASF = 0x9D; //只写,模拟输入(AD或LVD)选择sfr ADC_CONTR = 0xBC; //带AD系列sfr AUXR = 0x8E;sbit CS= P4^3; //CS=RSsbit SID = P3^6; //RW=SIDsbit SCLK =P3^4; //E=SCLK//==========================================================/********** 12864LCD引脚定义**********//* sbit CS = P4^3; //4脚--VCC, 片选高电平有效单片LCD使用时可固定高电平RS P4.3 CS = P3^5;sbit SID = P3^6; //5脚,数据WR(SID) P4.5 SID = P3^6;sbit SCLK = P3^4; //6脚,时钟E(CLK) P4.6 SCLK = P3^4;sbit PSB = P3^7; //15脚--GND,低电平时表示用串口驱动,可固定低电平//sbit RESET = P2^5; //LCD复位,LCD模块自带复位电路。
12864液晶测试程序

#include <REG52.h>#define uint unsigned int#define uchar unsigned charsbit CS=P2^0;sbit SID=P2^1;sbit SCLK=P2^2;sbit PSB=P2^3;void delay_1ms(uint x)//延时xms{uint i,j;for(j=0;j<x;j++)for(i=0;i<110;i++);}void send_command(uchar command_data){uchar i;uchar i_data;i_data=0xf8;CS=1;SCLK=0;for(i=0;i<8;i++) //第一字节,发送命令,11111000-些指令{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data; /*获取命令的高四位,低四位补零*/ i_data&=0xf0;for(i=0;i<8;i++) //第二字节{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data<<=4;for(i=0;i<8;i++) //第三字节{SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;delay_1ms(10);}void send_data(uchar command_data){uchar i;uchar i_data;i_data=0xfa;CS=1;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data&=0xf0;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}i_data=command_data;i_data<<=4;for(i=0;i<8;i++){SID=(bit)(i_data&0x80);SCLK=0;SCLK=1;i_data=i_data<<1;}CS=0;delay_1ms(10);}void lcd_init(){ PSB=0;delay_1ms(100);send_command(0x30); /*设置8位数据接口,基本指令模式。
12864程序

#include"lcd12864.h"/****************************************************************************** ** 函数名: LCD12864_Delay1ms* 函数功能: 延时1MS* 输入: c* 输出: 无******************************************************************************* /void LCD12864_Delay1ms(uint c){uchar a,b;for(; c>0; c--){for(b=199; b>0; b--){for(a=1; a>0; a--);}}}/****************************************************************************** ** 函数名: LCD12864_Busy* 函数功能: 检测LCD是否忙* 输入: 无* 输出: 1或0(1表示不忙,0表示忙)******************************************************************************* /uchar LCD12864_Busy(void){uchar i = 0;LCD12864_RS = 0; //选择命令LCD12864_RW = 1; //选择读取LCD12864_EN = 1;LCD12864_Delay1ms(1);while((LCD12864_DATAPORT & 0x80) == 0x80) //检测读取到的值{i++;if(i > 100){LCD12864_EN = 0;return 0; //超过等待时间返回0表示失败}}LCD12864_EN = 0;return 1;}/****************************************************************************** ** 函数名: LCD12864_WriteCmd* 函数功能: 写命令* 输入: cmd* 输出: 无******************************************************************************* /void LCD12864_WriteCmd(uchar cmd){uchar i;i = 0;while( LCD12864_Busy() == 0){LCD12864_Delay1ms(1);i++;if( i>100){return; //超过等待退出}}LCD12864_RS = 0; //选择命令LCD12864_RW = 0; //选择写入LCD12864_EN = 0; //初始化使能端LCD12864_DATAPORT = cmd; //放置数据LCD12864_EN = 1; //写时序LCD12864_Delay1ms(1);LCD12864_EN = 0;}/****************************************************************************** ** 函数名: LCD12864_WriteData* 函数功能: 写数据* 输入: dat* 输出: 无******************************************************************************* /void LCD12864_WriteData(uchar dat){uchar i;i = 0;while( LCD12864_Busy() == 0){LCD12864_Delay1ms(1);i++;if( i>100){return; //超过等待退出}}LCD12864_RS = 1; //选择数据LCD12864_RW = 0; //选择写入LCD12864_EN = 0; //初始化使能端LCD12864_DATAPORT = dat; //放置数据LCD12864_EN = 1; //写时序LCD12864_Delay1ms(1);LCD12864_EN = 0;}/****************************************************************************** ** 函数名: LCD12864_ReadData* 函数功能: 读取数据* 输入: 无* 输出: 读取到的8位数据*******************************************************************************/#ifdef LCD12864_PICTUREuchar LCD12864_ReadData(void){uchar i, readValue;i = 0;while( LCD12864_Busy() == 0){LCD12864_Delay1ms(1);i++;if( i>100){return 0; //超过等待退出}}LCD12864_RS = 1; //选择命令LCD12864_RW = 1;LCD12864_EN = 0;LCD12864_Delay1ms(1); //等待LCD12864_EN = 1;LCD12864_Delay1ms(1);readValue = LCD12864_DATAPORT;LCD12864_EN = 0;return readValue;}#endif/****************************************************************************** ** 函数名: LCD12864_Init* 函数功能: 初始化LCD12864* 输入: 无* 输出: 无******************************************************************************* /void LCD12864_Init(){LCD12864_PSB = 1; //选择并行输入LCD12864_RST = 1; //复位LCD12864_WriteCmd(0x30); //选择基本指令操作LCD12864_WriteCmd(0x0c); //显示开,关光标LCD12864_WriteCmd(0x01); //清除LCD12864的显示内容}/****************************************************************************** ** 函数名: LCD12864_ClearScreen* 函数功能: 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清* * 屏函数* 输入: 无* 输出: 无******************************************************************************* /#ifdef LCD12864_PICTUREvoid LCD12864_ClearScreen(void){uchar i,j;LCD12864_WriteCmd(0x34); //开启拓展指令集for(i=0;i<32;i++) //因为LCD有纵坐标32格所以写三十二次{LCD12864_WriteCmd(0x80+i); //先写入纵坐标Y的值LCD12864_WriteCmd(0x80); //再写入横坐标X的值for(j=0;j<32;j++) //横坐标有16位,每位写入两个字节的的数据,也{ //就写入32次以为当写入两个字节之后横坐标会自LCD12864_WriteData(0x00); //动加1,所以就不用再次写入地址了。
最完整的12864中文资料

目前最完整的12864中文资料IC资料2007-07-29 23:08:52 阅读674 评论0 字号:大中小订阅一、OCM12864液晶显示模块概述OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。
采用KS0107控制IC。
二、最大工作范围1、逻辑工作电压(Vcc):4.5~5.5V2、电源地(GND):0V3、LCD驱动电压(Vee):0~-10V4、输入电压:Vee~Vdd5、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温)6、保存温度(Tstg):-10~65℃三、电气特性(测试条件Ta=25,Vdd=5.0 /-0.25V)1、输入高电平(Vih):3.5Vmin2、输入低电平(Vil):0.55Vmax3、输出高电平(Voh):3.75Vmin4、输出低电平(Vol):1.0Vmax5、工作电流:2.0mAmax四、接口说明12864-1,12864-2接口说明表1 VSS 0V 逻辑电源地。
2 VDD 5.0V 逻辑电源正。
3 V0 LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻。
4 D/I H/L 数据\指令选择:高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令寄存器执行。
5 R/W H/L 读\写选择:高电平:读数据;低电平:写数据。
6 E H.H/L 读写使能,高电平有效,下降沿锁定数据。
7 DB0 H/L 数据输入输出引脚。
8 DB1 H/L 数据输入输出引脚。
9 DB2 H/L 数据输入输出引脚。
10 DB3 H/L 数据输入输出引脚。
11 DB4 H/L 数据输入输出引脚。
12 DB5 H/L 数据输入输出引脚。
13 DB6 H/L 数据输入输出引脚。
14 DB7 H/L 数据输入输出引脚。
15 CS1 H/L 片选择信号,低电平时选择前64列。
12864液晶测试程序

num=0;
switch(x)
{
case 0:wei=0x80;break;
case 1:wei=0x90;break;
case 2:wei=0x88;break;
case 3:wei=0x98;break;
}
write_cmd(wei+y);
while(*(p+num)!='\0')
LCD_RW=0;//
LCD_EN=0;
LCD_data=cmd;
LCD_EN=1;
delay_1ms(1);
LCD_EN=0;
delay_1ms(1);
}
/*****************************************
写数据到指令寄存器
******************************************/
#include<reg51.h>
#include<intrins.h>
#include<stdlib.h>
#defineucharunsigned char
#defineuintunsignedint
#defineLCD_dataP0
sbitLCD_RS=P3^5;
sbitLCD_RW=P3^6;
sbitLCD_EN=P3^4;
sbitDS18B20_DQ=P2^7;
sbitFM=P2^0;//蜂鸣器端口
sbitkey=P2^1;
ucharcode str1[]="床前明月光";
ucharcode str2[]="疑似地上霜";
12864串口程序

4.串口程序5.6.PSB接低时,串口模式被选择。
在该模式下,只用两根线(SID与SCLK)来完成数据传输。
当同时使用多颗ST7920时,CS线被配合使用,CS 是高有效。
ST7920 的他不时钟SCLK 有独立的操作时序,当多个连续的指令需要被送入时,指令执行时间需要被考虑。
必须等待上一个指令执行完毕才送入下一个指令,因为ST7920内部没有传送/接收缓冲区一个完整的串行传输周期由一下部分组首先送入启动字节,送入5 个连续的“数被重置,并且串行传输被同步。
紧接的两是写)和传输性质(RS,确定是命令寄存器一个“0” 。
送完启动字节之后,可以送入指令或是者代码是以字节为单位的,每个字节的内容字节来处理:高四位放在第一个字节的高四无关位都补“0” 。
请参照第四章串行通讯时示例程序如下:;*************************************;CONTROLLER:ST7920(串行接口);128×64点阵;EDITOR: JACK;CRYSTAL:12MHz;CS=P3.0 SID=P3.1 SCLK=P3.2;**************************************CS EQU P3.0 ;H=DA TA,L=COM SID EQU P3.1 ;H=READ,L=WRITESCLK EQU P3.2 ;COM EQU 30H ;控制字暂存单元DAT EQU 31H ;显示数据暂存单元CODER EQU 32H ;字符代码暂存单元ADDR EQU 33H ;地址暂存单元ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60HLCALL DEL_40MSLCALL INIMOV ADDR,#80HMOV DPTR,#WEL_1LCALL W_LINEMOV ADDR,#90HMOV DPTR,#WEL_2LCALL W_LINEMOV ADDR,#88HMOV DPTR,#WEL_3LCALL W_LINEMOV ADDR,#98HMOV DPTR,#WEL_4LCALL W_LINELCALL DEL_1500MSMOV ADDR,#80HMOV DPTR,#WEL_5LCALL W_LINEMOV ADDR,#90HMOV DPTR,#WEL_6LCALL W_LINEMOV ADDR,#88HMOV DPTR,#WEL_7LCALL W_LINEMOV ADDR,#98HMOV DPTR,#WEL_8LCALL W_LINELCALL DEL_1500MSMOV ADDR,#80H ;MOV DPTR,#HZ_1 ;LCALL W_LINEMOV ADDR,#90H ;MOV DPTR,#HZ_2 ;LCALL W_LINEMOV ADDR,#88H ;MOV DPTR,#HZ_3 ;LCALL W_LINEMOV ADDR,#98H ;MOV DPTR,#HZ_4 ;LCALL W_LINELCALL DEL_1500MS ;延时后显示下一页MOV ADDR,#80H ;MOV DPTR,#HZ_5 ;LCALL W_LINEMOV ADDR,#90H ;MOV DPTR,#HZ_6 ;LCALL W_LINEMOV ADDR,#88H ;MOV DPTR,#HZ_7 ;LCALL W_LINEMOV ADDR,#98H ;MOV DPTR,#HZ_8 ;LCALL DEL_1500MSLJMP MAININI:MOV COM,#30H ;功能设定,基本指令LCALL WCOMMOV COM,#30H ;基本指令,8-bit模式,基本指令LCALL WCOMMOV COM,#0CH ;显示开,游标关,反白关LCALL WCOMMOV COM,#01H ;清除显示LCALL WCOMMOV COM,#06H ;进入设定点,游标7右移,画面不移动LCALL WCOMRETW_LINE:MOV COM,ADDRLCALL WCOMMOV R4,#16 ;连续写入8个中文或者16个西文字符W_L1:MOV A,#00HMOVC A,@A+DPTRMOV CODER,ALCALL WCODEINC DPTRDJNZ R4,W_L1RETWCOM:LCALL STWCMOV A,COMLCALL W4_D ;送入高四位指令LCALL W4_0 ;连续送入四个0LCALL W4_D ;送入高四位指令LCALL W4_0 ;连续送入四个0CLR CSLCALL DEL_2MSRETWCODE:LCALL STWDMOV A,CODERLCALL W4_0LCALL W4_DLCALL W4_0CLR CSLCALL DEL_2MSRETSTWC:SETB CSSETB SIDMOV R3,#5 ;连续送入5个"1",起始STWC1:SETB SCLKCLR SCLKDJNZ R3,STWC1CLR SIDMOV R3,#3STWC2:SETB SCLK ;RW=0,RS=0,第八位"0"CLR SCLKDJNZ R3,STWC2RETSTWD:SETB CSSETB SIDMOV R3,#5 ;连续送入5个"1",起始STWD1:SETB SCLKCLR SCLKDJNZ R3,STWD1CLR SID ;RW=0SETB SCLKCLR SCLKSETB SID ;RS=1SETB SCLKCLR SCLKCLR SID ;第八位"0"SETB SCLKCLR SCLKRETW4_D:MOV R3,#4W4_D1:RLC AMOV SID,CSETB SCLKCLR SCLKDJNZ R3,W4_D1RETW4_0:MOV R3,#4W4_01:CLR SIDSETB SCLKCLR SCLKDJNZ R3,W4_01RETDEL_2MS:MOV R0,#2D1:MOV R1,#200D2:NOPNOPNOPDJNZ R1,D2DJNZ R0,D1RETDEL_40MS:MOV R2,#20D3:LCALL DEL_2MSDJNZ R2,D3RETDEL_200MS:MOV R2,#100 D4:LCALL DEL_2MSDJNZ R2,D4RETDEL_500MS:MOV R2,#250D5:LCALL DEL_2MSDJNZ R2,D5RETDEL_1500MS:LCALL DEL_500MSLCALL DEL_500MSLCALL DEL_500MSRETWEL_1:DB "WWW.Y AB_" WEL_2:DB "欢迎使用亚斌液晶"WEL_3:DB "086-755-28072527"WEL_4:DB "支持图形和文本显"WEL_5:DB "示,可显示8X4 行" WEL_6:DB "共32 个中文,内带" WEL_7:DB "标准中文字库,内"WEL_8:DB "含8192个中文字型"HZ_1:DB " 桃夭"HZ_2:DB "诗经·国风·周南"HZ_3:DB "桃之夭夭灼灼其华"HZ_4:DB "之子于归宜其室家"HZ_5:DB "桃之夭夭有蕡其实"HZ_6: DB "之子于归宜其家室" HZ_7:DB "桃之夭夭其叶蓁蓁"HZ_8:DB "之子于归宜其家人"END。
12864液晶测试程序.c

12864液晶测试程序.c#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define LCD12864_DB P0sbit rs = P1^0;sbit rw = P1^1;sbit e = P1^5;void delay_50ms(uint t);void write_12864com(uchar com);void write_12864dat(uchar dat);void LcdSetCursor(unsigned char x, unsigned char y);void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void initinal(void); //初始化液晶//************************************//主程序//*************************************void main(void){unsigned char str[] = "zuan zhu";initinal();LcdShowStr(0, 0, str);LcdShowStr(4, 0,":");LcdShowStr(0, 1, "youwen");LcdShowStr(4, 1,":");LcdShowStr(0, 2,"杭州之行东川有感");LcdShowStr(0, 3,"身体是革命的本钱");LcdShowStr(5, 0,"137051");while (1);}/* 等待液晶准备好*/void LcdWaitReady(){unsigned char sta;LCD12864_DB = 0xFF;rs = 0;rw = 1;do {e = 1;sta = LCD12864_DB; //读取状态字e = 0;} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}//********************************//对液晶写指令//*****************************void write_12864com(uchar com){LcdWaitReady();rw=0;rs=0;delay_50ms(1);P0=com;e=1;delay_50ms(10);e=0;delay_50ms(2);}//***********************************//对液晶写数据//content为要写入的数据//***********************************void write_12864dat(uchar dat){LcdWaitReady();rw=0;rs=1;delay_50ms(1);P0=dat;e=1;delay_50ms(10);e=0;delay_50ms(2);}//**********************************//液晶初始化//**********************************void initinal(void){delay_50ms(2);write_12864com(0x30);delay_50ms(4);write_12864com(0x30);delay_50ms(4);write_12864com(0x0f);delay_50ms(4);write_12864com(0x01);delay_50ms(240);write_12864com(0x06);delay_50ms(10);}/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/ void LcdSetCursor(unsigned char x, unsigned char y){unsigned char addr;if (y == 0) //由输入的屏幕坐标计算显示RAM的地址addr = 0x80 + x; //第一行字符地址从0x00起始else if (y == 1) //由输入的屏幕坐标计算显示RAM的地址addr = 0x90 + x; //第二行字符地址从0x90起始else if (y == 2) //由输入的屏幕坐标计算显示RAM的地址addr = 0x88 + x; //第三行字符地址从0x90起始else if (y == 3) //由输入的屏幕坐标计算显示RAM的地址addr = 0x98 + x; //第四行字符地址从0x90起始write_12864com(addr | 0x80); //设置RAM地址}/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){LcdSetCursor(x, y); //设置起始地址while (*str != '\0') //连续写入字符串数据,直到检测到结束符{write_12864dat(*str++); //先取str指向的数据,然后str自加1 }}//************************************************//延时子程序模块12MHz的晶振频率//********************************************** void delay_50ms(uint t){uchar j;for(;t>0;t--){for(j=6246;j>0;j--); //50ms延时.}}。
LCD12864显示程序(汇编语言)

;实验目的:熟悉12864LCD的使用;12864LCD带中文字库;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“5”,公司传真“6”;硬件设置:;关断所有拨码开关。
#include<p16f877a.inc>;__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择#DEFINE RW PORTA,4 ;读/写选择#DEFINE E PORTA,3 ;使能信号#DEFINE PSB PORTA,2 ;并口/串口选择(H/L)#DEFINE RST PORTA,0 ;复位信号;-----------------------------------------------LCD_X EQU 30H ;页地址LCD_Y EQU 31H ;Y地址COUNT EQU 32H ;循环计数用COUNT1 EQU 33H ;循环计数用COUNT2 EQU 34H ;循环计数用POINT EQU 35H ;查表偏移地址POINT1 EQU 36H ;查表偏移地址POINT2 EQU 37H ;查表偏移地址TEMP EQU 38H ;临时寄存器TEMP1 EQU 39H ;临时寄存器;-----------------------------------------------ORG 0000H ;复位地址NOP ;ICD需要的空指令GOTO MAIN ;跳转到主程序;**********************主程序************************MAINBANKSEL TRISACLRF TRISA ;A口输出CLRF TRISD ;D口输出BANKSEL ADCON1MOVLW 06HMOVWF ADCON1 ;A口全为数字口CLRF STATUSBCF RST ;复位LCDCALL DELAY ;延时一段时间BSF RST ;清除复位信号NOPBSF PSB ;并口通讯;**************************初始化**********************MOVLW 30H ;基本指令操作CALL SEND_IMOVLW 01H ;清除显示CALL SEND_IMOVLW 06H ;指定在写入或读取时,光标的移动方向 CALL SEND_IMOVLW 0CH ;开显示,关光标,不闪烁CALL SEND_I;***********************显示汉字************************HAN_WR2CALL CLEAR_P ;清屏HAN_WR2A ;“深圳乾龙盛电子”MOVLW LOW(TAB1A)MOVWF POINTMOVLW HIGH(TAB1A)MOVWF POINT1 ;获取表格的首地址MOVLW 0eH ;数数据字节个数(7个汉字共14字节) MOVWF COUNTMOVLW 81H ;页地址CALL SEND_ICALL QUSHUHAN_WR2B ;“。
带字库12864显示(已测试)

/*********************必要的变量定义****************/#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define DATA P0sbit RS=P2^2;sbit RW=P2^1;sbit EN=P2^0;sbit cs1=P2^3;sbit cs2=P2^4;/*******************定义字库********************/uchar code Hzk[]={/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00, 0x00,0x00,0x90,0x20,0x20,0x20,0x20,0x00,0x90,0x70,0x20,0x20,0x89,0x00,0x00,0x00,/*-- 文字: --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x20,0x20,0x20,0x20,0x20,0x89,0xF870x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x80,0x80,0x40,0x20,0x88,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x00,0x80,0x00,/*-- 文字: 电--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*-- 文字: 工--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*-- 文字: 电--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*-- 文字: 子--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: 中--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00, 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00,/*-- 文字: 心--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x00,0x00,0xE0,0x02,0x04,0x18,0x00,0x00,0x00,0x40,0x80,0x00,0x00, 0x10,0x0C,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x01,0x0E,0x00};/**********************延时子程序****************/void delay(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}/********************LCD忙检查子程序**************/void CheckState(){uchar dat;RS=0;RW=1;do {DA TA=0x00;EN=1;_nop_();EN=0;dat=DATA;dat=0x80&dat; //检查忙信号} while(!(dat==0x00)); //当忙信号为0是才可继续操作}/*********************写命令子程序****************/void SendCommandToLCD(uchar com){CheckState();RS=0; //写命令RW=0;DA TA=com;EN=1; //利用EN下降沿完成命令写操作_nop_();_nop_();EN=0;}/****************设置页码子程序******************/void SetLine(uchar page) //设置页码,页码为0~7{page=0xb8|page;SendCommandToLCD(page);}/****************设置起始行************************/void SetStartLine(uchar startline) //设置起始行,行号为0~63{startline=0xc0|startline;SendCommandToLCD(startline);}/********************设置列*****************/void SetColumn(uchar column) //设置列,列号为0~63{column=column&0x3f;column=0x40|column;SendCommandToLCD(column);}/********************开关显示屏******************************/ void SetOnOff(uchar onoff) //开关显示屏,onoff只能为0或1 {onoff=0x3e|onoff;SendCommandToLCD(onoff);}/************************写数据子程序*****************/void WriteByte(uchar dat){CheckState();RS=1;RW=0;DA TA=dat;EN=1;_nop_();_nop_();EN=0;}/**************************选屏子程序****************/ void SelectScreen(uchar screen) //选屏,screen=0,1,2{switch(screen){case 0: cs1=0; //选全屏_nop_();_nop_();_nop_();cs2=0;_nop_();_nop_();_nop_();break;case 1: cs1=0; //左屏显示_nop_();_nop_();_nop_();cs2=1;_nop_();_nop_();_nop_();break;case 2: cs1=1; //右屏显示_nop_();_nop_();_nop_();cs2=0;_nop_();_nop_();_nop_();break;}}/****************************清屏子程序****************/void ClearScreen(uchar screen) //清屏,screen=0,1,2{uchar i,j;SelectScreen(screen);for (i=0;i<8;i++){SetLine(i);SetColumn(0);for(j=0;j<64;j++){WriteByte(0x00); //写数据列地址将自动加1}}}/*************************初始化子程序****************/void InitLCD(){CheckState();SelectScreen(0);SetOnOff(0); //关屏SelectScreen(0);SetOnOff(1); //开屏SelectScreen(0);ClearScreen(0); //清屏SetStartLine(0); //开始行为0}/*********************显示全角汉字****************/void Display(uchar ss,uchar page,uchar column,uchar number){int i;SelectScreen(ss); //ss为屏号column=column&0x3f; //column为列号SetLine(page); //page 为页号,显示第number个汉字的上半部分,//page可理解为要显示的汉字位于屏幕的第page行SetColumn(column);for(i=0;i<16;i++) //i为一个字里面的各个列{WriteByte(Hzk[i+32*number]); //number为字号,取第number个汉字的第i列数据编码值}SetLine(page+1); //显示第number个汉字的下半部分SetColumn(column);for(i=0;i<16;i++){WriteByte(Hzk[i+32*number+16]); //取第number个汉字的下半部分}}/********************************主程序****************************/void main(){uint i;InitLCD();ClearScreen(0);while(1){for(i=0;i<128;i++){SetStartLine(i);Display(1,0,2*16,2); //显示第2号字,"电"Display(1,0,3*16,3); //显示第3号字,"工"Display(2,0,4*16,4); //显示第4号字,"电"Display(2,0,5*16,5); //显示第5号字,"子"Display(2,0,6*16,6); //显示第6号字,"中"Display(2,0,7*16,7); //显示第7号字,"心"SelectScreen(0);delay(50);}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下是RT12864引脚功能定义 引脚号管脚 说明 1Vss 电源地(0V)。
2VDD 电源正(+5V)。
3V0 LCD 驱动电压,应用时在VEE 与V0之间加一20K 可调电阻。
4 D/I 数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。
5 R/W 读\写选择:高电平:读数据;低电平:写数据。
6 E 读写使能,高电平有效,下降沿锁定数据。
7 DB0数据输入输出。
8 DB1 9 DB2 10DB3 11DB4 12DB5 13DB6 14DB7 15CS1 片选择信号,低电平时选择前64列。
16CS2 片选择信号,低电平时选择后64列。
17RET 复位信号,低电平有效。
18VOUT LCD 驱动电源(-10V )。
19LED+ 背光电源,LED+(+5V)。
20LED- 背光电源,LED-(0V)。
以下是RT12864引脚功能定义引脚号管脚说明1Vss电源地(0V)。
2VDD电源正(+5V)。
3V0LCD驱动电压,应用时在VEE与V0之间加一20K可调电阻。
4D/I数据\指令选择:高电平:数据D0-D7将送入显示RAM低电平:数据D0-D7将送入指令寄存器执行。
5R/W读\写选择:高电平:读数据;低电平:写数据。
6E读写使能,高电平有效,下降沿锁定数据。
7DB0数据输入输出。
8DB19DB210DB311DB412DB513DB614DB715CS1片选择信号,低电平时选择前64列。
16CS2片选择信号,低电平时选择后64列。
17RET复位信号,低电平有效。
18VOUTLCD驱动电源(-10V )。
19LED+背光电源,LED+(+5V)。
20LED-背光电源,LED-(0V)。
/********************************************/ /* 12864系列测试程序*//********************************************/ #include <reg51.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <math.h>/* LCD寄存器命令代码*/#define Disp_On 0x3f#define Disp_Off 0x3e#define Col_Add 0x40#define Page_Add 0xb8 //每页是8行#define Start_Line 0xc0//LCD和51连接#define Lcd_Bus P0 //MCU P1<------> LCMsbit Mcs=P2^6; //Master chip enablesbit Scs=P2^5; //Slave chip enablesbit Enable=P3^7; //mode Enable singlesbit Di=P2^4; //Data or Instrument Selectsbit RW=P2^3; //Write or Readsbit Lcd_Rst=P1^0; //Lcm resetchar code HANZI[7][32]={{0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00},//"电"{0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00},//"流"{0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00},//"压"{0x00,0xFF,0x11,0x29,0xC7,0x01,0xFE,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x00,0xFF,0x02,0x04,0x43,0x40,0x7F,0x42,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00},//"阻"{0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00},//温{0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00},//度{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00} //力};char code shu[14][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//"0" {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//"1" {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//"2" {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//"3" {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//"4" {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//"5" {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//"6" {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//"7" {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//"8" {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//"9" {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//"+"{0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//"-" {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//"." {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00}//"v"};/*------------------延时子程序-----------------------------*/void delay(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}/**********************************************************************数原型:void write_com(unsigned char cmdcode)入口参数: cmdcode 写入的命令出口参数: 无返回值:无说明:写命令到LCD**********************************************************************/void write_com(unsigned char cmdcode){Di=0;RW=0;Lcd_Bus=cmdcode;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:void write_data(unsigned char Dispdata)入口参数: Dispdata 写入的数据出口参数: 无返回值:无说明:写数据到LCD**********************************************************************/void write_data(unsigned char Dispdata){Di=1;RW=0;Lcd_Bus=Dispdata;delay(0);Enable=1;delay(0);Enable=0;}/**********************************************************************数原型:Clr_Scr()入口参数: 无出口参数: 无返回值:无说明:清除显示内存**********************************************************************/void Clr_Scr(){unsigned char j,k;Mcs=1;Scs=1;write_com(Page_Add+0);write_com(Col_Add+0);for(k=0;k<8;k++){ write_com(Page_Add+k);for(j=0;j<64;j++)write_data(0x00);}}/**********************************************************************数原型:DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH)入口参数: CharType: 显示的字符类型1:16x16汉字2:8x16 字符3: 4x16pag :显示在第几行;col :显示在第几列;MH : 显示的内容代码;出口参数: 无返回值:无说明:在指定的行列显示字符,可以跨区域显示**********************************************************************/void DispChart(unsigned char CharType,unsigned char pag,unsigned char col, unsigned char code *MH){ unsigned char tcol,j=0,i=0;unsigned char twidth,tpag;tpag=pag;if (CharType==1){tcol=48; // 16*16 汉字twidth=16;}if (CharType==2){tcol=56; // 8*16 字符twidth=8;}if (col<=tcol) //1区够显示{ Mcs=1;Scs=0;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if (col>=64) //0区够显示{ Mcs=0;Scs=1;for(j=0;j<2;j++){write_com(Page_Add+tpag+j);write_com(Col_Add+col-64);for(i=0;i<twidth;i++) write_data(MH[twidth*j+i]);}}if ((col>tcol)&&(col<64)) //介于1,0区之间显示{for(j=0;j<2;j++){ Mcs=1;Scs=0;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+col);for(i=0;i<(64-col);i++) write_data(MH[twidth*j+i]);Mcs=0;Scs=1;delay(10);write_com(Page_Add+tpag+j);write_com(Col_Add+0);for(i=(64-col);i<twidth;i++) write_data(MH[twidth*j+i]);}}}/********************************************************************** 数原型:void DISP_float(unsigned char pag,unsigned char col, float fData)入口参数: pag :显示在第几行;col :显示在第几列;fData : 显示的数据;出口参数: 无返回值:无说明:在指定的行列上显示数据,可以跨区域显示**********************************************************************/ void DISP_float(unsigned char pag,unsigned char col, float fData){ unsigned long int tData;unsigned char wei,i,j,tbit,fuhao,dai;unsigned char wei_shu[5];if (fData>0)fuhao=1;elsefuhao=0;if ((fData<1) &&(fData>-1))dai=1;elsedai=0;tData=(unsigned int)(abs(fData*10));if (tData<=9) wei=1;if ((tData>9) && (tData<=99)) wei=2;if ((tData>99) && (tData<=999)) wei=3;if ((tData>999) && (tData<=9999)) wei=4;if ((tData>9999) && (tData<=99999)) wei=5;for(i=wei;i>=1;i--){ tbit=tData%10;wei_shu[i-1]=tbit;tData/=10;}if (fuhao==0) //显示0>x{DispChart(2,pag,col,shu[11]);if (dai==1) //显示0>x>-1{DispChart(2,pag,col+8,shu[0]); DispChart(2,pag,col+16,shu[12]);j=3;}else j=1;}elseif (fuhao==1)//显示x>0{if (dai==1)//显示1>x>0{DispChart(2,pag,col,shu[0]);DispChart(2,pag,col+8,shu[12]);j=2;}else j=0;}for (i=0;i<wei;i++){ DispChart(2,pag,col+j*8,shu[wei_shu[i]]);if ((i==(wei-1))&&(dai==0)){DispChart(2,pag,col+j*8,shu[12]); DispChart(2,pag,col+(j+1)*8,shu[wei_shu[i]]); goto bbreak;}j=j+1;}bbreak:;}/********************************************************************** 数原型:void init_lcd()入口参数: 无出口参数: 无返回值:无说明:初始化LCD屏**********************************************************************/ void init_lcd(){Lcd_Rst=0;delay(100);Lcd_Rst=1;delay(100);Mcs=1; Scs=1;delay(100);write_com(Disp_Off);write_com(Page_Add+0);write_com(Start_Line+0);write_com(Col_Add+0);write_com(Disp_On);}//主程序main(){unsigned char i=0;float ff;init_lcd();Clr_Scr();ff=-0.9;// ff=0.4;//ff=2121.4;//ff=-1452;DISP_float(0,55,ff);while(1){ DispChart(1,2,0,HANZI[4]);DispChart(1,2,15+10,HANZI[0]); DispChart(1,2,31+10,HANZI[1]);DispChart(2,2,47+10,shu[8]); DispChart(2,2,55+10,shu[4]);DispChart(2,2,63+10,shu[2]); DispChart(2,2,71+10,shu[4]);DispChart(2,2,79+10,shu[1]);DispChart(2,2,87+10,shu[0]); delay(1000);}}。