当前位置:文档之家› 最完整的12864测试程序

最完整的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);}}。

相关主题