LCD12864驱动程序

合集下载

12864液晶显示程序51驱动

12864液晶显示程序51驱动

#include <reg52.h>#include <intrins.h>sbit LCD_RS =P0^0; //L:COMMAND; H:DATA sbit LCD_RW =P0^1; //L:WRITE; H:READ sbit LCD_E =P0^2; //INPUT ENABLEsbit LCD_CS1 =P0^3; //L有效sbit LCD_RES =P0^4; //L有效#define data_bus P2#define control_bus P0#define uchar unsigned char#define uint unsigned int//=====延时N微秒==============void delay_nus(uint n){while(n--);return;}//=====延时N毫秒==============void delay_nms(uint n){int i;for(i=0;i<n;i++)delay_nus(123);}//=====忙检测=================void check_busy(void){uchar read_data=0xff;data_bus=0xff;LCD_RS=0;LCD_RW=1; //读命令LCD_CS1=0; //片使能while((read_data&0x80)==0x80){LCD_E=1;_nop_();_nop_();read_data=data_bus;LCD_E=0;}LCD_E=0;LCD_CS1=1; //片禁能}//=====写命令到寄存器========= void send_cmd(uchar cmd) small{check_busy();LCD_RS=0; //写的是命令LCD_RW=0; //写命令LCD_CS1=0; //片使能data_bus=cmd;LCD_E=1; //使能_nop_();_nop_();LCD_E=0;_nop_();_nop_();LCD_CS1=1; //片禁能}//=====写数据到DDRAM========= void send_dat(uchar dat) small{check_busy();LCD_RS=1; //写的是数据LCD_RW=0; //写数据LCD_CS1=0; //片使能data_bus=dat;LCD_E=1;_nop_();_nop_();LCD_E=0;_nop_();_nop_();LCD_CS1=1; //片禁能}//=======初始化============== void lcd_initial(void) small{LCD_RES=0;delay_nms(50);LCD_RES=1;LCD_E=0;delay_nms(50);send_cmd(0xA0);send_cmd(0xC8);send_cmd(0xA2);send_cmd(0x2C);send_cmd(0x2E);send_cmd(0x2F);send_cmd(0x25);send_cmd(0x81);send_cmd(0x14);send_cmd(0xAF);send_cmd(0xE0);send_cmd(0x40);}//=======写列地址==============void Set_Colume_Address(unsigned char dat){unsigned char tmp;tmp=dat>>4;send_cmd(0x10|tmp); //送列地址高三位tmp=0x0f&dat;send_cmd(tmp); //送列地址低四位}code unsigned char number[][16] = {/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*-- 文字: : --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, /*-- 文字: - --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01}; code unsigned char Hz[][32] = {/*-- 文字: 中--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00, 0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,/*-- 文字: 鼎--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xF8,0x00,0x00,0x7E,0x52,0x66,0x4A,0x52,0x7E,0x00,0x00,0xF8,0x00,0x00, 0x00,0x84,0x65,0x1D,0x05,0x05,0xFF,0x00,0x00,0xFF,0x05,0x05,0x05,0xFD,0x00,0x00,/*-- 文字: 技--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00, 0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00,/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0x10,0x90,0x50,0xFF,0x50,0x90,0x12,0x14,0x10,0x10,0x10,0x00, 0x10,0x10,0x08,0x04,0x02,0x01,0x00,0x7F,0x00,0x00,0x01,0x06,0x0C,0x18,0x08,0x00 };/****显示汉字的程序****/void DisplayHz(unsigned int Page,unsigned int Col,unsigned char Hz[],unsigned int zilie) {unsigned int PageCnt,ColCnt;for(PageCnt = Page;PageCnt < Page+2;PageCnt ++){send_cmd(0xb0|PageCnt); //page addressSet_Colume_Address(Col);for(ColCnt = 0;ColCnt < zilie;ColCnt ++){send_dat(Hz[(PageCnt-Page)*zilie + ColCnt]);}}}//=====主程序===================void main (void){unsigned char month=0,nian=10,yue=1,tian=1,shi=0,fen=0,miao=0,i=0,j=0; unsigned char months[12]={31,28,31,30,31,30,31,31,30,31,30,31};lcd_initial();send_cmd(0xa6);for(i=0;i<8;i++) //清屏{send_cmd(0xb0|i);Set_Colume_Address(0);for(j=0;j<128;j++)send_dat(0);}while(1){if(++miao>59){miao=0;if(++fen>59){fen=0;if(++shi>23){shi=0;if(++tian>months[month]){tian=0;if(++yue>11){yue=1;nian++;}}}}}DisplayHz(0,0,number[nian/10],8);DisplayHz(0,16,number[nian%10],8);DisplayHz(0,32,number[11],8);DisplayHz(0,48,number[yue/10],8);DisplayHz(0,64,number[yue%10],8);DisplayHz(0,80,number[11],8);DisplayHz(0,96,number[tian/10],8);DisplayHz(0,112,number[tian%10],8);DisplayHz(3,0,number[shi/10],8);DisplayHz(3,16,number[shi%10],8);DisplayHz(3,32,number[10],8);DisplayHz(3,48,number[fen/10],8);DisplayHz(3,64,number[fen%10],8);DisplayHz(3,80,number[10],8);DisplayHz(3,96,number[miao/10],8);DisplayHz(3,112,number[miao%10],8);DisplayHz(6,14,Hz[0],16);DisplayHz(6,42,Hz[1],16);DisplayHz(6,70,Hz[2],16);DisplayHz(6,98,Hz[3],16);delay_nms(6000);}}。

LCD12864(ST7920)串行驱动程序

LCD12864(ST7920)串行驱动程序

完整功能版的ST7920驱动的12864液晶(并行驱动),MCU= Mega162007-07-04 23:40:11| 分类:AVR单片机| 标签:avr |字号大中小订阅/**************************************************** 工程:ST7920驱动的12864液晶的并行驱动模式创建日期:2007年7月3日创建人:朱海峰邮箱:ntzhf100@ QQ:543376422 引脚定义:RS(CS)=====>PB0RW(SID)====>PB1EN(SCLK)===>PB2D0=========>PA0::D7=========>PA7PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式****************************************************/#include <iom16v.h>#include <macros.h>#define uint8_t unsigned char#define uint16_t unsigned int#define nop() NOP()#define DATA_PORT PORTA#define Set_RS() DDRB |= (1<<0);PORTB |= (1<<0);#define Set_RW() DDRB |= (1<<1);PORTB |= (1<<1);#define Set_EN() DDRB |= (1<<2);PORTB |= (1<<2);#define Clr_RS() DDRB |= (1<<0);PORTB &= ~(1<<0);#define Clr_RW() DDRB |= (1<<1);PORTB &= ~(1<<1);#define Clr_EN() DDRB |= (1<<2);PORTB &= ~(1<<2);#define Set_output() DDRA = 0XFF#define Set_input() DDRA = 0X00#define PIN_port PINA#define left 0x18#define right 0x1c#define xtal 8 //晶振调整MHzvoid WriteCom(uint8_t CMD);void WriteDat(uint8_t DAT);void Delay(uint16_t ms);uint8_t CheckBusy(void);void Draw_Pic(uint8_t x, uint8_t y, const uint8_t *Draw);void Picture_Set_XY(uint8_t x, uint8_t y);void Char_Set_XY(uint8_t x, uint8_t y, uint8_t *p);void Lcd_Init(void);void Chip_Init(void);void Set_Draw(void);void Lcd_flash(uint16_t delay_t,uint8_t times);void Move(uint8_t step,uint8_t dirction,uint16_t time);const uint8_t PIC1[64][16]={/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\atmel.bmp --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00, 0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xEF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x01,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0x7F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x01,0xFF,0xBF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFE,0x00,0x0F,0xF8,0x00,0x00,0x00, 0x01,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00, 0x03,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00,0x03,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00, 0x07,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00, 0x07,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00, 0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00, 0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00, 0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00, 0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0x1F,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x63,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0x00,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xB6,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xBE,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xB6,0x80,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF7,0x00,0x00, 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x63,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0};const uint8_t PIC2[64][16]={/*-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\AVR.BMP --*//*-- 宽度x高度=128x64 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3 C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4 3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2 7,0x00,0x00,0x1F,0xFF,0x83,0xFF,0xE0,0x00,0x00,0xFF,0xF8,0x3F,0xFF,0xFF,0x01,0x3C, 0x00,0x00,0x3F,0xFF,0x81,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0xC1,0x3E, 0x00,0x00,0x3F,0xFF,0xC1,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0xE0,0xA7, 0x00,0x00,0x3F,0xFF,0xC1,0xFF,0xF0,0x00,0x03,0xFF,0xE0,0x7F,0xFF,0xFF,0xF0,0xE7, 0x00,0x00,0x7F,0xFF,0xE0,0xFF,0xF8,0x00,0x03,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8,0x7E, 0x00,0x00,0x7F,0xFF,0xE0,0xFF,0xF8,0x00,0x03,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x00,0x7F,0xFF,0xE0,0x7F,0xFC,0x00,0x07,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00, 0x00,0x00,0xFF,0xFF,0xF0,0x7F,0xFC,0x00,0x07,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00, 0x00,0x00,0xFF,0xFF,0xF0,0x7F,0xFE,0x00,0x0F,0xFF,0x83,0xFF,0xFF,0xFF,0xFE,0x00, 0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFE,0x00,0x0F,0xFF,0x83,0xFF,0xE0,0x7F,0xFE,0x00, 0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFE,0x00,0x1F,0xFF,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xF8,0x3F,0xFF,0x00,0x1F,0xFF,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xFC,0x1F,0xFF,0x00,0x1F,0xFE,0x07,0xFF,0xC0,0x3F,0xFE,0x00, 0x00,0x03,0xFF,0xFF,0xFC,0x1F,0xFF,0x80,0x3F,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x00, 0x00,0x07,0xFF,0xFF,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x0F,0xFF,0x80,0x3F,0xFE,0x00, 0x00,0x07,0xFF,0x9F,0xFE,0x0F,0xFF,0x80,0x7F,0xFC,0x1F,0xFF,0x00,0x7F,0xFE,0x00, 0x00,0x07,0xFF,0x9F,0xFF,0x07,0xFF,0xC0,0x7F,0xFC,0x1F,0xFF,0x00,0xFF,0xFC,0x00, 0x00,0x0F,0xFF,0x8F,0xFF,0x07,0xFF,0xC0,0x7F,0xF8,0x1F,0xFF,0x01,0xFF,0xFC,0x00,0x00,0x0F,0xFF,0x0F,0xFF,0x03,0xFF,0xC0,0xFF,0xF8,0x3F,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x0F,0xFF,0x0F,0xFF,0x83,0xFF,0xE0,0xFF,0xF8,0x3F,0xFF,0xFF,0xFF,0xF8,0x00, 0x00,0x1F,0xFF,0x07,0xFF,0x83,0xFF,0xE1,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xF0,0x00, 0x00,0x1F,0xFE,0x07,0xFF,0xC1,0xFF,0xF1,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xE0,0x00, 0x00,0x3F,0xFE,0x07,0xFF,0xC1,0xFF,0xF3,0xFF,0xE0,0x7F,0xFF,0xFF,0xFF,0xC0,0x00, 0x00,0x3F,0xFE,0x03,0xFF,0xC0,0xFF,0xFB,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0x80,0x00, 0x00,0x7F,0xFC,0x03,0xFF,0xE0,0xFF,0xFB,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0x00,0x00, 0x00,0x7F,0xFC,0x03,0xFF,0xE0,0x7F,0xFF,0xFF,0xC1,0xFF,0xFF,0xFF,0xFC,0x00,0x00, 0x00,0x7F,0xF8,0x01,0xFF,0xF0,0x7F,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xE0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x83,0xFF,0xFF,0xFF,0xC0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x83,0xFF,0xF3,0xFF,0xC0,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x03,0xFF,0xE3,0xFF,0xE0,0x00,0x00, 0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0x07,0xFF,0xE3,0xFF,0xE0,0x00,0x00, 0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFE,0x07,0xFF,0xC3,0xFF,0xE0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x1F,0xFF,0xFE,0x0F,0xFF,0xC1,0xFF,0xF0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,0xFE,0x0F,0xFF,0x81,0xFF,0xF0,0x00,0x00, 0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xFF,0xFC,0x0F,0xFF,0x81,0xFF,0xF8,0x00,0x00, 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xFC,0x1F,0xFF,0x81,0xFF,0xF8,0x00,0x00, 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xF8,0x3F,0xFF,0x00,0xFF,0xF8,0x00,0x00, 0x0F,0xFF,0xC0,0x00,0x1F,0xFF,0x83,0xFF,0xF8,0x3F,0xFF,0x00,0xFF,0xF8,0x00,0x00, 0x0F,0xFF,0x80,0x00,0x0F,0xFF,0x83,0xFF,0xF0,0x3F,0xFE,0x00,0xFF,0xFC,0x00,0x00, 0x0F,0xFF,0x80,0x00,0x0F,0xFF,0xC3,0xFF,0xF0,0x7F,0xFE,0x00,0x7F,0xFC,0x00,0x00,0x1F,0xFF,0x00,0x00,0x0F,0xFF,0xC1,0xFF,0xF0,0x7F,0xFC,0x00,0x7F,0xFC,0x00,0x00, 0x1F,0xFF,0x00,0x00,0x07,0xFF,0xC1,0xFF,0xE0,0x7F,0xFC,0x00,0x7F,0xFE,0x00,0x00, 0x1F,0xFF,0x00,0x00,0x07,0xFF,0xE0,0xFF,0xE0,0xFF,0xF8,0x00,0x7F,0xFE,0x00,0x00, 0x3F,0xFE,0x00,0x00,0x03,0xFF,0xE0,0xFF,0xC0,0xFF,0xF8,0x00,0x3F,0xFE,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0};/**************************************************/void main(void){uint8_t i;Delay(10);Chip_Init(); //芯片初始化函数Lcd_Init(); //液晶初始化函数while(1)//ST7920的好处就是带字库,所以程序里可以直接写中英文和字符{ //英文和字符为半角的Char_Set_XY(0,0,"ntzhf100@"); //在第0行的第0个位置依次输出文字Char_Set_XY(2,1,"蓝水天下"); //在第1行的第2个位置依次输出文字Char_Set_XY(0,2,"我的天下,我的自"); //在第2行的第0个位置依次输出文字Char_Set_XY(0,3,"由空间!"); //在第3行的第0个位置依次输出文字Delay(2000); //软件延时2SLcd_flash(500,3); //液晶闪烁程序每次500ms的延时,闪动3次//=========液晶内部的地址=============//Line1 80H 81H 82H 83H 84H 85H 86H 87H//Line2 90H 91H 92H 93H 94H 95H 96H 97H//Line3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH//Line4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH//因为液晶本身的缺陷,所以移动显示会很丑Move(8,left,500); //液晶左移程序,移动8步,步与步之间间隔500ms Delay(2000); //软件延时2SMove(8,right,500); //液晶右移程序,移动8步,步与步之间间隔500ms Delay(2000); //软件延时2SSet_Draw(); //设定为绘图模式Draw_Pic(0,0,*PIC1); //第一张图片ATMEL的LOGODelay(3000); //软件延时3SDraw_Pic(0,0,*PIC2); //第一张图片AVR的LOGODelay(3000); //软件延时3SLcd_Init(); //重新设定为普通模式,即输出中英文和字符模式}}/*************************************************/ void Chip_Init(void){DDRA = 0XFF;PORTA = 0X00;DDRB = 0X07;PORTB = 0X00;}/*************************************************/ void Lcd_Init(void){uint8_t cmd;cmd=0x30; //功能设置8位数据,基本指令WriteCom(cmd); //写指令cmd=0x0C; //显示状态ON,游标OFF,反白OFF WriteCom(cmd); //写指令cmd=0x01; //清除显示WriteCom(cmd); //写指令cmd=0x02; //地址归位WriteCom(cmd); //写指令cmd=0x80; //设置DDRAM地址WriteCom(cmd); //写指令Delay(100); //延时}/*************************************************/void Delay(uint16_t ms) //毫秒级延时,当改晶振为几M则xtal设为几{uint16_t i;while(ms--){for(i=1;i<(uint16_t)(xtal*143-2);i++);}}/*************************************************/void Lcd_flash(uint16_t delay_t,uint8_t times){uint8_t j;for(j=0;j<times;j++){WriteCom(0x08); //关闭显示Delay(delay_t); //软件延时WriteCom(0x0c); //开显示Delay(delay_t); //软件延时}}/*************************************************/ void Move(uint8_t step,uint8_t dirction,uint16_t time) {uint8_t i;for(i=0;i<step-1;i++) //移动的步数{WriteCom(dirction); //文字移动方向Delay(time); //控制移动时间}}/*************************************************/ void WriteCom(uint8_t CMD) //写控制命令函数{while(CheckBusy()); //检测液晶内部是否忙Clr_RS();Clr_RW();DATA_PORT = CMD;Set_EN();nop();nop();}/*************************************************/ void WriteDat(uint8_t DAT) //写数据函数{while(CheckBusy()); //检测液晶内部是否忙Set_RS();Clr_RW();DATA_PORT = DAT;Set_EN();nop();nop();Clr_EN();}/*************************************************/ uint8_t CheckBusy(void){uint8_t temp;DATA_PORT = 0XFF;Clr_RS();nop(); //这里的nop不能省略,否则不行Set_RW();Set_EN();nop();Set_input();nop();temp = PINA;nop();Clr_EN();nop();Set_output();temp &= 0x80;return(temp);}/*************************************************/ void Char_Set_XY(uint8_t x, uint8_t y, uint8_t *p) {if(y == 0){WriteCom((0x80+x));}if(y == 1){WriteCom((0x90+x));}if(y == 2){WriteCom((0x88+x));}if(y == 3){WriteCom((0x98+x));}while(*p != 0){WriteDat(*p++);}}/*************************************************/void Set_Draw(void){WriteCom(0x01); //清屏Delay(20); //延时WriteCom(0x36); //8BIT控制界面,扩充指令集,,绘图显示ON Delay(20); //延时}/*************************************************/ void Draw_Pic(uint8_t x, uint8_t y, const uint8_t *Draw) {uint8_t i, j, temp_x, temp_y;temp_x = x;temp_y = y;temp_x |= 0x80;temp_y |= 0x80;for(i=0;i<32;i++ ){WriteCom(temp_y++); //设置绘图区的Y地址坐标WriteCom(temp_x); //设置绘图区的X地址坐标for(j=0;j<16;j++){WriteDat(*Draw);Draw++;}}temp_x = 0x88;temp_y = 0x80;j = 0;for(;i<64;i++ ){WriteCom(temp_y++); //设置绘图区的Y地址坐标WriteCom(temp_x); //设置绘图区的X地址坐标for(j=0;j<16;j++){WriteDat(*Draw);Draw++;}}}/**************************************************/12864串行/*************************************** start51 study board test software** test 12864LCD** using serial interface** author:bluehacker<kernelpaniccrash AT > ** QQ:282074921** Date:2007-11-18**************************************/#ifndef _LZP_START51_12864LCDS_H#define _LZP_START51_12864LCDS_H#include "reg52.h"//12864串行口定义sbit LCD_CS=P2^3;sbit LCD_CLK=P2^5;sbit LCD_SID=P2^4;//12864LCD指令定义#define CMD_CLEAR 0x01#define CMD_RESET 0x02//设置波特率#define OSC_FREQ 11059200L#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255 #define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 #define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253 #define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252 #define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250 #define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248 #define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244 void Delay_us(unsigned char nUs);void Delay_ms(unsigned int nMs);bit lcd_busy(void);void write_command(unsigned char cmd);unsigned char read_data(void);void write_data(unsigned char dat);void clear_lcd();void lcd_init();void lcd_setxy(unsigned char x,unsigned char y);void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str);#endif我的是ST7920控制的.接了RS(CS),与WR(SID)两个至单片机,节约了串口.另外PSB(串行为0,并行接1)跟LED-接GND,RS与LED+接VCC.这个程序可能还有点问题,接上背光(LED+,LED-)显示就不很清晰了,关了之后很清晰. 显示最后三个汉字"李正平"错误,为"李掌"可笑.查查程序哪里有问题了//FileName:12864lcds.c/*************************************** start51 study board test software** test 12864LCD** using serial interface** author:bluehacker<kernelpaniccrash AT > ** QQ:282074921** Date:2007-11-18**************************************/#include "12864.h"void Delay_us(unsigned char nUs){unsigned char i;while(nUs--)for(i=0;i<10;i++);}void Delay_ms(unsigned int nMs){ unsigned char i;while(nMs--)for(i=0;i<120;i++);}bit lcd_busy(){unsigned char i;bit dat;//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'1',表示读操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//Delay_us(1);dat=0;LCD_CLK=0;dat=LCD_SID;LCD_CLK=1;LCD_CS=0;return dat;}void write_command(unsigned char cmd) {unsigned char i;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'0',表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面发送具体指令,先发送高4位for(i=0;i<4;i++){LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}//下面发送指令的低4位for(i=0;i<4;i++){LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}LCD_CS=0;//结束}void write_data(unsigned char dat) {unsigned char i;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'0',表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'1',表示写数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面发送具体数据,先发送高4位for(i=0;i<4;i++){LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}//下面发送数据的低4位for(i=0;i<4;i++){LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat<<=1;}//发送连续4个'0'for(i=0;i<4;i++){LCD_CLK=0;LCD_SID=0;LCD_CLK=1;}LCD_CS=0;//结束}unsigned char read_data() {unsigned char i,dat;while(lcd_busy());//先产生连续5个'1'LCD_CS=1;for(i=0;i<5;i++){LCD_CLK=0;LCD_SID=1;LCD_CLK=1;}//再发送一个'1',表示读操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//再发送一个'1',表示数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;//再发送一个'0',这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;//下面读具体数据//先读高4位dat=0;for(i=0;i<4;i++){LCD_CLK=0;dat<<=1;LCD_CLK=1;dat|=LCD_SID;}//再接受4个连续'0',没什么意义,直接丢掉for(i=0;i<4;i++){LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);}//接受低4位for(i=0;i<4;i++){LCD_CLK=0;dat<<=1;LCD_CLK=1;dat|=LCD_SID;}//再接受4个连续'0',没什么意义,直接丢掉for(i=0;i<4;i++){LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);}LCD_CS=0;return dat;}void clear_lcd(){write_command(CMD_CLEAR);}void lcd_setxy(unsigned char x,unsigned char y) {unsigned char addr;switch(y){case 0:addr=0x80+x;break;case 1:addr=0x90+x;break;case 2:addr=0x88+x;break;case 3:addr=0x98+x;break;}write_command(addr);}void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str) {unsigned char i;lcd_setxy(x,y);for(i=0;str[i]!='\0';i++){write_data(str[i]);}}void lcd_init(){write_command(CMD_RESET);write_command(0x0d);//设置显示状态,整体显示ON,游标与游标位置ON write_command(0x30);//功能设置,基本指令write_command(0x18);//游标与显示移位控制clear_lcd();//write_command(0x80);//设置DDRAM位址,并不必须}void main(){TCON=0;SCON=0x50;/*mode 1,1 start bit ,8 data bit ,1 stop bit,enable receive*/ PCON=0x80;/*SMOD=1, Baud Rate twice*/TMOD=0x21;/*timer 0--mode 1 and timer 1 ---mode2*///set baud rate,use timer 1 as baud rate generatorTH1=BAUD_19200;TL1=TH1;TR1=1;// ET1=0;//disable timer 1 interruptEA=0;lcd_init();Delay_ms(100);//显示武林外传lcd_setxy(1,2);write_data(0xce);write_data(0xe4);lcd_setxy(2,2);write_data(0xc1);write_data(0xd6);lcd_setxy(3,2);write_data(0xcd);write_data(0xe2);lcd_setxy(4,2);write_data(0xb4);write_data(0xab);Delay_ms(5000);clear_lcd();write_command(CMD_RESET); Delay_ms(5000);lcd_display_str(2,0,"bluehacker"); lcd_display_str(1,1,"QQ:282074921"); lcd_display_str(3,2,"李正平");LCD12864(ST7920)串行驱动程序作者:L_jeary 文章来源:L_jeary 点击数:286 更新时间:2011-6-23/*==================================================== ================LCD12864对应的C文件,定义了相关的LCD驱动函数主要有:串行驱动LCD12864,内置的控制器为ST7920和ST7921LCD初始化函数读写函数0xf8为写命令的命令字;0xfa为写数据的命令字,这里用的是TI_F28027在编写和调试过程中借鉴了一些网上的程序,在此表示感谢,这里是已经调好的,在移植过程中,调试时注意先要通过示波器对函数void send_data(Uint16 D_Ctrl,Uint16 D_data)的时序检测一下,是否满足要求,不行的话可改一下延时值或者查看硬件是否连好===================================================== ===============*/#include "LCD12864.h" //LCD12864的头文件typedef unsigned int Uint16;/*==================================================== =================管脚的初始化,主要定义复用管脚功能方向等===================================================== =================*/void Init_guanjiao(void){EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;//通用IO 片选CS管脚GpioCtrlRegs.GPADIR.bit.GPIO16=1;//输出GpioCtrlRegs.GPAPUD.bit.GPIO16=1;//禁止上拉电阻GpioCtrlRegs.GPBMUX1.bit.GPIO33=0; //数据管脚SIDGpioCtrlRegs.GPBDIR.bit.GPIO33=1;GpioCtrlRegs.GPBPUD.bit.GPIO33=1;GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//时钟CLK管脚GpioCtrlRegs.GPADIR.bit.GPIO2=1;GpioCtrlRegs.GPAPUD.bit.GPIO2=1;EDIS;}/*==================================================== =================LCD串行数据传送程序函数名:void send_data(Uint16 D_Ctrl,Uint16 D_data)功能:串行数据传送共分三个字节完成:第一字节:串口控制-格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节分两次传送第一次:(并行)8位数据的高4位-格式DDDD0000 放在一个字节中的高四位第二次:(并行)8位数据的低4位-格式0000DDDD 放在一个字节中的高四位===================================================== =================*/void send_data(Uint16 D_Ctrl,Uint16 D_data)//LCD_CLK一个脉冲写一位{Uint16 i,j;Uint16 temp;//LCD_CS=1; //片选使能GpioDataRegs.GPADAT.bit.GPIO16=1;for(i=0;i<3;i++) // 串行数据的传送{if(i==0) //写第一个字节格式1111 1ABC{temp=D_Ctrl;}if(i==1) //写第二个字节第一次写高四位放在第一次传送的高四位{temp=(D_data&0xf0);}if(i==2) //写第二个字节第二次写低四位放在第二次传送的高四位{temp=(D_data&0x0f);temp=temp<<4;for(j=0;j<8;j++) //串行写8位二进制数据{//LCD_CLK=0; //时钟输入置低GpioDataRegs.GPADAT.bit.GPIO2=0; F_delay(3);if((temp&0x80)==0){//LCD_SID=0; //数据SID GpioDataRegs.GPBDAT.bit.GPIO33=0; }else{//LCD_SID=1; //数据SID GpioDataRegs.GPBDAT.bit.GPIO33=1; }//LCD_CLK=1; //时钟输入置高GpioDataRegs.GPADAT.bit.GPIO2=1; temp=temp<<1;F_delay(5);}//LCD_CLK=0; //时钟输入置低GpioDataRegs.GPADAT.bit.GPIO2=0;//LCD_CS=0; //片选禁止GpioDataRegs.GPADAT.bit.GPIO16=0;}/*==================================================== ===================LCD初始化程序函数名:void lcd_initial()功能:===================================================== ===================*/void lcd_initial(void)//写命令第一字节为0xf8,表示写的是命令//0xfa则表示写数据{Init_guanjiao();send_data(0xf8,0x30); //功能设定//F_delay(10);send_data(0xf8,0x0C); //显示状态开/关//F_delay(10);send_data(0xf8,0x01); //清屏显示//F_delay(10);//send_data(0xf8,0x06); //进如点设定,整体显示设定//F_delay(10);send_data(0xf8,0x02); //地址归位//F_delay(10);//send_data(0xf8,0x40); //设定CGRAM//F_delay(10);send_data(0xf8,0x80); //设定DDRAM//F_delay(10);}/*==================================================== =====================函数名:void write_one_word(Uint16 x,Uint16 y,Uint16 word0, Uint16 word1)功能:实现在任意坐标写一个字X列;Y行===================================================== ======================*/void write_one_word(Uint16 x,Uint16 y,Uint16 word0, Uint16 word1){x &= 0x0f;y &= 0x0f;switch(y){case 0:x+=0x80;break;case 1:x+=0x90;break;case 2:x+=0x88;break;case 3:x+=0x98;break;default:break;}send_data(0xf8,x);//F_delay(80L);send_data(0xfa,word0);//F_delay(80L);send_data(0xfa,word1);}/*==================================================== ========================函数名:void write_list_word(Uint16 x,Uint16 y,Uint16 flash *hanzi)。

LCD12864(T6963)驱动程序

LCD12864(T6963)驱动程序

液晶显示模块的应用一、结构特点内藏T6963C 的液晶显示模块上已经实现了T6963C 与行、列驱动器及显示缓冲区RAM 的接口,同时也已用硬件设置了液晶屏的结构(单双屏、数据传输方式、显示窗口长度、宽度等等。

我们常用的液晶显示模块一般都是单屏结构,因此我们这里只讨论单屏结构的液晶显示模块。

内藏T6963C 的单屏结构点阵图形液晶显示模块的方框图如下:二、T6963C 的特点(1) T6963C 是点阵式液晶图形显示控制器它能直接与8 位微处理器接口;(2) T6963C 的字符字体可由硬件或软件设置,其字体有4 种5X8 、6X8、7X8、8X8;(3) T6963C 的占空比可从1/16 到1/128;(4) T6963C 可以图形方式、文本方式及图形和文本合成方式进行显示,以及文本方式下的特征显示,还可以实现图形拷贝操作等等;(5) T6963C 具有内部字符发生器CGROM,共有128 个字符。

T6963C 可管理64K显示缓冲区及字符发生器CGRAM,并允许MPU 随时访问显示缓冲区,甚至可以进行位操作。

 三、该类液晶模块的管脚定义见下表:说明:对于单电源模块,标志为V0/POFF。

当该管脚为高或悬空时,内部DC/DC功能开启;为低时,内部DC/DC 功能关闭。

该功能可用作屏幕保护和休眠方式。

如果用其直接替代双电源模块,该管脚直接悬空即可。

四、液晶显示模块的供电说明1. 如果您所选用的液晶模块是双电源(VDD/V0)供电的就需要提供一个负电压(液晶驱动电压V0/VEE),用以调节对比度,接在液晶模块的V0 引脚上。

因为液晶材料的物理特性,液晶的对比度会随着温度的变化而相应变化,所以,您加的负电压值应该随温度作相应的调整,大致是温度变化10°C 电压变化1伏左右。

为满足这一要求您要选择较大值的负电源,然后做一个温度补偿电路,或者安排一个电位器调整负电压值。

例如对于QH12864T-HT-LED04,当室温(VDD=5V)时,V0=-10.5V,如果要用到-20°C,液晶驱动电压将要变到V0=-14.5V,再考虑到负载消耗所以您提供的负电源应该为-16V 左右。

stm32驱动lcd12864程序

stm32驱动lcd12864程序

stm32驱动lcd12864程序预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制#include "12864.h"#include "sys.h"#include "delay.h"#include "usart.h"void p_out(void) //把PB命令端口配置成输出{rs();wr();en();psb();}void wr_outite_cmd(u8 cmd) //写命令{p_out();data_out(); //把PB数据端口配置成输出rs_out=0;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(cmd<<8));delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void wr_outite_data(u8 dat) //写数据{p_out();data_out();rs_out=1;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(dat<<8)); //把dat 给PB高八位delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void LCDClear(void){wr_outite_cmd(0x01); //显示清屏delay_ms(5);wr_outite_cmd(0x34); // 显示光标移动设置delay_ms(5);wr_outite_cmd(0x30); // 显示开及光标设置delay_ms(5);}void locate_x_y(u8 x,u8 y)//指定显示坐标{u8 x2=0;x2=x;if(y<1) y=1;if(y>4) y=4;x&=0x0f;switch(y){case 1:x2|=0x80;break;case 2:x2|=0x90;break;case 3:x2|=0x88;break;case 4:x2|=0x98;break;}wr_outite_cmd(x2);delay_ms(10);}void lcd_init(void){wr_outite_cmd(0x30);delay_ms(10);wr_outite_cmd(0x01);delay_ms(10);wr_outite_cmd(0x06);delay_ms(10);wr_outite_cmd(0x0c);delay_ms(10);}void DisInt(u8 x,u8 y,int fnum) //显示整型变量的函数,最多显示16位的整数。

LCD12864驱动程序(带字库的)

LCD12864驱动程序(带字库的)
/*void delayuS(uchar buf)
{
while(buf--);
}*/
/***********忙检测********************/
void Busy()
{
DataPort=0xFF;
RS=0;
RW=1;
while (1)
{
E =1;
if (P0^7==0) break;
}
E=0;
}
void main(void)
{
TMOD=0x01; ///选择定时器模式
TR0=1; //开中断,并允许T0中断
ET0=1;
EA=1; //总开关
Init_LCቤተ መጻሕፍቲ ባይዱ();
Clear_LCD();
while(1);
}
void t0(void) interrupt 1 using 0
{
//delay(100);
/*void Line_Num(uchar k)
{
//uint l;
if(k>=128&&k<=135)l=1;
if(k>135&&k<=143) l=3;
if(k>143&&k<=151) l=2;
if(k>151&&k<=159) l=4;
}*/
/*******************逐行显示***************************************/
void Write_Data(uchar Data)
{
Busy();
RS=1;
RW=0;

lcd12864程序

lcd12864程序

//用户版//描述: LCD12864液晶显示模块,对于芯片KS0108(HD61202)驱动程序.//编写:微控设计网 DC版主日期:2007.9.//编译环境:IAR EW430 V3.42A//验证平台: MC430F14+开发板 V1.0//声明:此程序只供微控用户使用.在未得到DC版主的许可请勿将资料外公开和用于商业用途.//******************************************************************* ***********#include "lcd12864.h"extern unsigned char ASCII86[][6];//******************************************************************* ***********//LCD12864函数声明void Lcd12864delay(); //延时void CheckState(); //忙状态检查void WriteByte(unsigned char dat); //写显示数据void SEdCommandToLCD(unsigned char command); //向LCD发送命令void SetLine(unsigned char line); //设定行地址(页)--X 0-7void SetColumn(unsigned char column); //设定列地址--Y 0-63void SetOnOff(unsigned char onoff); //开关显示void SetStartLine(unsigned char startline); //设定显示开始行--XXvoid ClearScreE(unsigned char screE); //清屏void SelectScreE(unsigned char screE); //选择屏幕unsigned char ReadByte(); //读显示数据//显示8*6字符串void ShowString86(unsigned char lin,unsigned char column, unsigned char *string); //反显一个8*6字块void ReverseShow86(unsigned char lin,unsigned char column);//反显某行某几个字符void ReverseLinChar(unsigned char lin,unsigned char startcolumn,unsigned char ShowQuantity);void InitLCD(void); //初始化LCD//******************************************************************* ***********//初级函数列表//******************************************************************* ***********//延时void Lcd12864delay(){unsigned int i=500;while(i--) {;}}void LcdDelay(){unsigned int i=2;while(i--) {;}}//******************************************************************* ***********//忙状态检查(已整理)void CheckState(){MCU_BUS_DIR_IN; //设置BUS口为输入LVC4254_5Vto3V; //LVC4254数据方向为5V往3VRS0;RW1;E1;while(BUSIN & busy) _NOP(); //等待LCD_DB7为0E0; //重设E=0MCU_BUS_DIR_OUT; //设置BUS口为输出LVC4254_3Vto5V; //LVC4254数据方向为3V往5V}//******************************************************************* ***********//写显示数据(已整理)//dat:显示数据void WriteByte(unsigned char dat){CheckState(); //忙状态检查RS1;RW0;BUSOUT = dat; //写向数据口E1;LcdDelay();E0;}//******************************************************************* ***********//向LCD发送命令(已整理)//command :命令void SEdCommandToLCD(unsigned char command){CheckState(); //忙状态检查RS0;RW0;BUSOUT = command; //写入E1;LcdDelay();E0;}//******************************************************************* ***********//清屏(已整理)//screE:1-左屏,2-右//每个屏的显示RAM共64行,分8页,每页8行(一行对相一个字节)void ClearScreE(unsigned char screE){unsigned char i,j;SelectScreE(screE); //选择指定屏for(i=0;i<8;i++) //共8页(每页8行*64列){ SetLine(i); //选择某一页for(j=0;j<64;j++) //每一页全送0x00为清屏{WriteByte(0x00); //一个数据对应8行,8*64=1页,64*8页}}}//******************************************************************* ***********//开关显示(已整理)//onoff=1开,onoff=0为关//当DB0=1时LCD显示RAM中的内容DB0=0时关闭显示void SetOnOff(unsigned char onoff){onoff=0x3e | onoff; //0011 111xSEdCommandToLCD(onoff); //发命令到LCD}//******************************************************************* ***********//选择屏幕(已整理)//screE: 0-全屏,1-左屏,2-右屏void SelectScreE(unsigned char screE){ //MSC-G12864DYSY-2N:选中高电平switch(screE){ case 0: //开全屏CS1_1;_NOP();CS2_1;_NOP();break;case 1: //开左屏CS1_0;_NOP();CS2_1; //关右屏_NOP();break;case 2:CS1_1;//关左屏_NOP();CS2_0;//开右屏_NOP();break;}}//******************************************************************* ***********//设定行地址(页,也就是字行)--X 0-7(已整理)void SetLine(unsigned char line){line=line & 0x07; //保证在 0<=line<=7line=line|0xb8; //1011 1xxx,SEdCommandToLCD(line); //设定指定页}//******************************************************************* ***********//设定列地址--Y 0-63(已整理)void SetColumn(unsigned char column){column=column &0x3f; //0=<column<=63column=column | 0x40; //01xx xxxxSEdCommandToLCD(column); //指定列}//******************************************************************* ***********//设定显示开始行--XX(已整理)//0--63void SetStartLine(unsigned char startline){startline=startline & 0x07; //保证 0<=startline<8startline=startline|0xc0; //1100 0000(显示起始行ROW设置指令)SEdCommandToLCD(startline); //指定行}//******************************************************************* ***********//初始化LCD (已整理)void InitLCD(void){LVC4254_DIR0; //MCU对LVC4254 DIR控制端IO方向设为0LVC4254_3Vto5V; //LVC4254方向为3V转5V,DIR=0MCU_BUS_DIR_OUT; //MCU总线方向为输出LCDCTL_RSRWE_DIR; //MCU对LCD 控制组端IO方向设为LCDCTL_CS1CS2_DIR; //Lcd12864delay();SelectScreE(0); //选择屏SetOnOff(0); //关显示ClearScreE(1); //清屏1ClearScreE(2); //清屏2SelectScreE(0);SetOnOff(1); //开显示SelectScreE(0);SetColumn(0); //开始列:0SetStartLine(0); //开始行:0ClearScreE(0);}//******************************************************************* ***********//读显示数据(已整理)unsigned char ReadByte(void){unsigned int i;unsigned char dat;CheckState();RS1;RW1;MCU_BUS_DIR_IN; //设置BUS口为输入LVC4254_5Vto3V;E1;for(i=0;i<10;i++); //这个延时是不同MCU速度而不同dat=BUSIN; //读入,(原文件是没有此句的)E0;MCU_BUS_DIR_OUT; //设置BUS口为输出LVC4254_3Vto5V;return(dat);}//******************************************************************* ***********//显示8*6点阵,如显ASCII86[][6],字符(已整理)//旋转90度:字模被竖着切分//lin:字行(0-7), column: 字列(0-31)//address : 字模区首地址由Microcontrol dc 编写void Show86(unsigned char lin,unsigned char column, unsigned char *address){unsigned char i,j=0;if(column>31) //列地址大于31返回{return;}//第0-9个字列else if(column<=9){SelectScreE(1);SetLine(lin);SetColumn((column<<3)-(column<<1)); //计算列地址,以6为倍数.每6列显示一个字符.for(i=0;i<6;i++)WriteByte(address[i]);}//第10个字列else if(column==10){ j=(column<<3)-(column<<1);if(j<=63) //第10个字列的前4列{ SelectScreE(1);SetLine(lin);SetColumn(j);for(i=0;i<4;i++){ WriteByte(address[i]);j++;}}if(j>=64){ SelectScreE(2); //第10个字列的后2列j=j-64;SetLine(lin);SetColumn(j);for(i=4;i<6;i++) //在12864中第10个字列的最后两个字节{WriteByte(address[i]);}}}//第11-20个字列else if(10<column&&column<21){ column=column-11;SelectScreE(2);SetLine(lin);SetColumn((column<<3)-(column<<1)+2);for(i=0;i<6;i++)WriteByte(address[i]);}//第21个字列else if(column==21) //第21个字列{ j=(column<<3)-(column<<1);if(j<128) //第21个字列的前2列{ SelectScreE(2);SetLine(lin);SetColumn(j);for(i=0;i<2;i++){ WriteByte(address[i]);j++;}}if(j>=128){j=j-128;SelectScreE(3); //第21个字列的后4列 SetLine(lin);SetColumn(j);for(i=0;i<4;i++){ WriteByte(address[i]);}}}//第22-31个字列/* else{ column=column-22;SelectScreE(3);SetLine(lin);SetColumn((column<<3)-(column<<1)+4);for(i=0;i<6;i++)WriteByte(address[i]);}*/}//******************************************************************* ***********//显示8*6字符串此字体下对应的点阵为:宽x高=8x6 (已整理)//!!!只能显示在一行上即: 串长+column <=31 column(为6的字列,左屏前4列和右屏后4列不用作显示,两屏共19字列)//旋转90度:字模被竖着切分//lin:字行(0-8), column: 字列(0-31)// *string :指向字符串的首址.void ShowString86(unsigned char lin,unsigned char column, unsigned char *string) { unsigned char ch;unsigned char i=0;for(i=0;string[i]!='\0';i++){if(i+column >20) //保证字符不会起过可显示长度.break;ch=string[i]-0x20; //将ASC字符从32-127位置移到0-96位置,以对应ASC86.C中位置Show86(lin,i+column,ASCII86[ch]);}}//******************************************************************* ***********//反显一个8*6字块只适合LCD19264屏,芯片KS0108(HD61202)//lin:行(0-8), column: 列(0-31)void ReverseShow86(unsigned char lin,unsigned char column){ unsigned char i,j=0;unsigned char tab[6];if(column>31) //列地址大于31返回{return;}//第0-9个字列if(column<=9){ SelectScreE(1); //如果列数(0-9),则写在第一屏上(左屏)SetColumn((column<<3)-(column<<1)); //计算列地址,以6为倍数.每6列显示一个字符.SetLine(lin); //设置行//tab[0]=(ReadByte()); //空读!!!!! ,进行读操作前,必须空读一次for(i=0;i<6;i++) //读6个字节回来tab[i]=~(ReadByte());SetColumn((column<<3)-(column<<1)); //设回初始列for(i=0;i<6;i++) //写回来字节WriteByte(tab[i]);}//第10个字列else if(column==10){ j=(column<<3)-(column<<1); //暂存列值if(j<=63) //是否为第10个字列的前4列{SelectScreE(1); //前4列显示在左屏SetColumn(j);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<4;i++) //读4个字节回来{tab[i]=~ReadByte();j++; }SetColumn((column<<3)-(column<<1));for(i=0;i<4;i++) //写回来字节WriteByte(tab[i]);}if(j>=64){ column=column-10; //为第10个字列的后2列 SelectScreE(2); //显示在中屏SetColumn(column);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<2;i++) //读6个字节回来{tab[i]=~ReadByte();j++;}SetColumn((column<<3)-(column<<1));for(i=0;i<2;i++) //写回来字节WriteByte(tab[i]);}}//第11-20个字列else if(10<column&&column<21){ SelectScreE(2); //显示在中屏column=column-11; //如果列数(11-20),则写在第一屏上(中屏)SetColumn((column<<3)-(column<<1)+2); //计算列地址,以6为倍数SetLine(lin);//tab[0]=ReadByte(); //空读!!!!! ,进行读操作前,必须空读一次for(i=0;i<6;i++) //读6个字节回来tab[i]=~ReadByte();SetColumn((column<<3)-(column<<1)+2);for(i=0;i<6;i++) //写回来字节WriteByte(tab[i]);}//第21个字列 --对于192*64屏else if(column==21){ j=(column<<3)-(column<<1);if(j<=127){SelectScreE(2);SetColumn(j);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<2;i++) //读6个字节回来{tab[i]=~ReadByte();j++; }SetLine(lin);SetColumn((column<<3)-(column<<1));for(i=0;i<2;i++)WriteByte(tab[i]);}if(j>=128){ column=column-21; //计算字列SelectScreE(3); //显示右屏SetColumn(column);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<4;i++) //读6个字节回来 {tab[i]=~ReadByte();j++;}SetLine(lin);SetColumn((column<<3)-(column<<1));for(i=0;i<4;i++)WriteByte(tab[i]);}}/* //第22-31个字列--对于192*64屏else if(21<column&&column<=31){ SelectScreE(3);column=column-22;SetColumn((column<<3)-(column<<1)+4);SetLine(lin);tab[0]=ReadByte();for(i=0;i<6;i++)tab[i]=~ReadByte();SetLine(lin);SetColumn((column<<3)-(column<<1)+4);for(i=0;i<6;i++)WriteByte(tab[i]);}*/}//******************************************************************* ***********//反显某行某几个字符 LCD19264//lin:行(0-7), column: 列(0-15)void ReverseLinChar(unsigned char lin,unsigned char startcolumn,unsigned char ShowQuantity){ unsigned char i;for(i=0;i<ShowQuantity;i++){if(startcolumn+i>21) //列地址大于21返回return;ReverseShow86(lin,startcolumn+i);}}//******************************************************************* ***********。

LCD12864驱动程序(STM32F103RCT6)

u8 i = 0;
CS_LOW; RS_DATA; for(i=0;i<8;i++) {
SCLK_LOW; if(data&0x80) {
SDA_HI; } else {
SDA_LOW; } SCLK_HI; data <<= 1; } } /************************************************************************ 函 数 名:void JLX12864_Init(void) 功 能:12864 初始化 入口参数:无 返 回 值:无 说 明: 作 者:Joe 日 期:2015/1/13 16:33:38 修 改:XX 修改说明:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
************************************************************************/ void JLX12864_Init(void) {
GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(GPIOB, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);
/************************************************************************ 函 数 名:JLX12864_ClearScreen(void) 功 能:清屏 入口参数:无 返 回 值:无 说 明: 作 者:Joe 日 期:2015/1/13 16:33:38 修 改:XX 修改说明:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ************************************************************************/ void JLX12864_ClearScreen(void) {

LCD12864 并口液晶驱动

#include "LCD12864.h"/*原程序参考于网络,原作者不明,liangjin2807修改适用于MSP430单片机,驱动MGLS12864液晶屏,HD61202芯片*/typedef unsigned char uchar;typedef unsigned int uint;uchardigital[21][16]={{0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x0F,0x1F,0x30,0x20,0x30,0x1F, 0x0F},/*"0",0*/{0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00},/*"1",1*/ {0x00,0x70,0x78,0x08,0x08,0x88,0xF8,0x70,0x00,0x30,0x38,0x2C,0x26,0x23,0x31,0x30},/*"2",2* /{0x00,0x30,0x38,0x88,0x88,0xC8,0x78,0x30,0x00,0x18,0x38,0x20,0x20,0x31,0x1F,0x0E},/*"3",3* /{0x00,0x00,0xC0,0xE0,0x30,0xF8,0xF8,0x00,0x00,0x07,0x07,0x24,0x24,0x3F,0x3F,0x24},/*"4",4*/ {0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x19,0x39,0x21,0x20,0x31,0x1F,0x0E},/*"5",5*/ {0x00,0xE0,0xF0,0x98,0x88,0x98,0x18,0x00,0x00,0x0F,0x1F,0x31,0x20,0x31,0x1F,0x0E},/*"6",6*/ {0x00,0x38,0x38,0x08,0xC8,0xF8,0x38,0x08,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00},/*"7",7*/ {0x00,0x70,0xF8,0x88,0x08,0x88,0xF8,0x70,0x00,0x1C,0x3E,0x23,0x21,0x23,0x3E,0x1C},/*"8",8* /{0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x00,0x31,0x33,0x22,0x33,0x1F,0x0F},/*"9",9*/ {0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",0* /{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",1*/ {0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",2* /{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",3*/ {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",4*/ {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",5*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",6*/ {0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",7*/ {0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",8* /{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",9*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",10 */};/*"*",12*//**************宏定义***************/#define DataDir P2DIR#define DataPort P2OUT#define Busy 0x80#define CtrlDir P6DIR#define CLR_RS P6OUT&=~BIT3; //RS = P6.3#define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=~BIT4; //RW = P6.4#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=~BIT5; //EN = P6.5#define SET_EN P6OUT|=BIT5;#define CLR_CS1 P6OUT&=~BIT0; //RW = 6.0#define SET_CS1 P6OUT|=BIT0;#define CLR_CS2 P6OUT&=~BIT1; //EN = 6.1#define SET_CS2 P6OUT|=BIT1;/***********************************************函数名称:DispStr功能:让液晶从某个位置起连续显示一个字符串参数:x--位置的列坐标y--位置的行坐标ptr--指向字符串存放位置的指针返回值:无***********************************************/void DispStr(uchar x,uchar y,uchar *ptr){uchar *temp;uchar i;temp = ptr;//计算字符串有效字符的个数LocateXY( x, y );for (i=0;i<64;i++) //连续显示4个16*16字符{LcdWriteData( temp[i] );}}/***********************************************函数名称:DispDigital功能:让液晶从某个位置显示一个数字,上列数组寻址方式,不建议使用参数:x--位置的列坐标y--位置的行坐标返回值:无***********************************************/void DispDigetal(uchar x,uchar y,uchar n){uchar i;uchar x_1;if(x<64){LcdChoiceL();LocateXY( x, y );for (i=0;i<8;i++)LcdWriteData( digital[n][i] );LocateXY( x, y+1 );for (i=8;i<16;i++)LcdWriteData( digital[n][i] );}else{x_1=x-64;LcdChoiceR();LocateXY( x_1, y );for (i=0;i<8;i++)LcdWriteData( digital[n][i] );LocateXY( x_1, y+1 );for (i=8;i<16;i++)LcdWriteData( digital[n][i] );}}/*********************************************** 函数名称:DispHex功能:让液晶从某个位置显示四个十六进数字参数:x--位置的列坐标y--位置的行坐标ptr--指向字符串存放位置的指针返回值:无***********************************************/ void DispHex(uchar x,uchar y,uint temp){uchar n;n=temp/0x1000;DispDigetal(x,y,n);n=(temp/0x100)%0x10;DispDigetal(x+8,y,n);n=(temp/0x10)%0x10;DispDigetal(x+16,y,n);n=temp%0x10;DispDigetal(x+24,y,n);}/*******************************************函数名称:LocateXY功能:向液晶输入显示字符位置的坐标信息参数:x--位置的列坐标y--位置的行坐标返回值:无********************************************/ void LocateXY(uchar x,uchar y){uchar tempx;uchar tempy;tempx=x|0x40;tempy=y|0xb8;LcdWriteCommand(tempx,1);LcdWriteCommand(tempy,1);}/*******************************************函数名称:DispNChar功能:在某个位置显示一个字符12864参数:x--位置的列坐标y--位置的行坐标n--显示的字个数data--显示的字符数据返回值:无********************************************/void DispNChar(uchar x,uchar y,uchar n,uchar (*ptr)[64]) { uchar i;uchar x_1;for(i=0;i<(16*n);i++)//输入总共的字符数{if(x<64){LcdChoiceL();//指定左屏LocateXY( x, y );//定位地址LcdWriteData( *(*ptr+i) );LocateXY( x, y+1 );LcdWriteData( *(*(ptr+1)+i) );}else {if(x<128)//如果64<X<128,则选择右屏{x_1=x-64;LcdChoiceR();LocateXY( x_1, y );LcdWriteData( *(*ptr+i) );LocateXY( x_1, y+1 );LcdWriteData( *(*(ptr+1)+i) );}else {x=0;y+=2;if(y<8){LcdChoiceL();LocateXY( x, y );LcdWriteData( *(*ptr+i) );LocateXY( x, y+1 );LcdWriteData( *(*(ptr+1)+i) );}else{y=0;LcdChoiceL();LocateXY( x, y );LcdWriteData( *(*ptr+i) );LocateXY( x, y+1 );LcdWriteData( *(*(ptr+1)+i) );}}}x++;}}/******************************************* 函数名称:LcdChoiceL功能:对12864液晶模块左侧参数:无返回值:无********************************************/ void LcdChoiceL(void){SET_CS2;//片选命令,选择左侧CLR_CS1;}/*******************************************函数名称:LcdChoiceR功能:对12864液晶模块右侧参数:无返回值:无********************************************/void LcdChoiceR(void){SET_CS1;//片选命令,选择右侧CLR_CS2;}/*******************************************函数名称:LcdStop功能:对12864液晶模块禁止参数:无返回值:无********************************************/void LcdStop(void){SET_CS1;//片选命令,禁止SET_CS2;}/*******************************************函数名称:LcdReset功能:对12864液晶模块进行复位操作参数:无返回值:无********************************************/void LcdReset(void){CtrlDir |= 0x3B; //控制线端口设为输出状态DataDir = 0xFF; //数据端口设为输出状态LcdChoiceL();//选择右侧LcdWriteCommand(0x3f, 1); //设置显示屏数据开LcdWriteCommand(0xc0, 1);//设置显示屏0行为第一行//LcdWriteCommand(0x40, 1);//设置显示屏0列为第一列/*_NOP();_NOP();_NOP();*/Delay5ms();LcdChoiceR();//选择左侧LcdWriteCommand(0x3f, 1); //设置显示屏数据开LcdWriteCommand(0xc0, 1);//设置显示屏0行为第一行//LcdWriteCommand(0x40, 1);//设置显示屏0列为第一列//显示模式设置}/*******************************************函数名称:LcdLine功能:改变lCD显示的第一行,从而实现滚屏效果参数:Line 取值0-63之间,增大向上滚,减小向下滚返回值:无********************************************/void LcdLine(uchar Line){if(Line<64){Line=Line+0xc0;LcdChoiceL();//选择右侧LcdWriteCommand(Line, 1);//设置显示屏0行为第一行//LcdWriteCommand(0x40, 1);//设置显示屏0列为第一列/*_NOP();_NOP();_NOP();*/Delay5ms();LcdChoiceR();//选择左侧LcdWriteCommand(Line, 1);//设置显示屏0行为第一行//LcdWriteCommand(0x40, 1);//设置显示屏0列为第一列}//显示模式设置}/*******************************************函数名称:LcdClear功能:对12864液晶模块屏幕清屏参数:无返回值:无********************************************/void LcdClear(void){ uchar k;uchar n;for(k=0;k<8;k++){for(n=0;n<64;n++){ LcdChoiceL();//选择左侧LocateXY( n,k );LcdWriteData(0x00);LcdChoiceR();//选择右侧LocateXY( n,k );LcdWriteData(0x00);}}}/*******************************************函数名称:LcdWriteCommand功能:向液晶模块写入命令12864参数:cmd--命令,chk--是否判忙的标志,1:判忙,0:不判返回值:无********************************************/void LcdWriteCommand(uchar cmd,uchar chk){if (chk) WaitForEnable(); // 检测忙信号?CLR_RS;CLR_RW;_NOP();DataPort = cmd; //将命令字写入数据端口_NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;}/*******************************************函数名称:LcdWriteData功能:向液晶显示的当前地址写入显示数据参数:data--显示字符数据返回值:无********************************************/void LcdWriteData( uchar data ){WaitForEnable(); //等待液晶不忙SET_RS;CLR_RW;_NOP();_NOP();_NOP();_NOP();DataPort = data; //将显示数据写入数据端口_NOP();_NOP();_NOP();_NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;DataPort =0xff;}/*******************************************函数名称:WaitForEnable功能:等待12864液晶完成内部操作参数:无返回值:无********************************************/ void WaitForEnable(void){P2DIR &= 0x00; //将P2口切换为输入状态SET_RW;CLR_RS;_NOP();SET_EN;_NOP();_NOP();while((P2IN & Busy)!=0); //检测忙标志CLR_EN;P2DIR |= 0xFF; //将P2口切换为输出状态}/*******************************************函数名称:Delay5ms功能:延时约5ms参数:无返回值:无********************************************/void Delay5ms(void){uint i=40000;while (i != 0){i--;}}/************************************************************函数名:LCD_Write_16X16Font*功能:写一个16X16的汉字*参数:x , y , c[2] x:0-83 y:0-5*返回值:无*备注:***********************************************************/void LCD_Write_16X16Font(unsigned char x,unsigned char y,unsigned char c[2]) {unsigned char i,k;if(x<64){LcdChoiceL();LocateXY(x,y);}else{LcdChoiceL();x=x-64;LocateXY(x,y);}for(k=0; k<70; k++) //K的值表示汉字库最多存放的字的数量(可改大){if((font16X16[k].Index[0]==c[0])&&(font16X16[k].Index[1]==c[1])){for(i=0; i<32; i++){LcdWriteData(font16X16[k].Msk[i]);if(i==16){y++;LocateXY(x,y);}}}}}/************************************************************函数名:DisplarString*功能:写一行的中文字符*参数:*返回值:无*备注:***********************************************************/void DisplarString(unsigned char x,unsigned char y,unsigned char n,unsigned char *MemuTemp) {uchar a,b,i,x_1,y_1;for(a=0;a<n*2;a+=2) //计数列,每列7个字符{for(b=0;b<70;b++) //50个字符内搜索需要显示的字符{if((font16X16[b].Index[0]==MemuTemp[a])&&(font16X16[b].Index[1]==MemuTemp[a+1])) //找到需要显示的字符,显示{if((a*8+x)<64){LcdChoiceL();x_1=a*8+x;y_1=y;}else{ if((a*8+x)<128){LcdChoiceR();x_1=a*8+x-64;y_1=y;}else{LcdChoiceL();x_1=a*8+x-128;y_1=y+2;}}LocateXY(x_1,y_1);for(i=0; i<32; i++){if(i==16) //如果已经传送16个字节,换行传送字符下半部分{LocateXY(x_1,y_1+1);}LcdWriteData(font16X16[b].Msk[i]);}break;}}}}/*******************************************函数名称:LocateXY功能:向液晶输入显示字符位置的坐标信息,按照像素点定位行参数:x--位置的列坐标y--位置的行坐标返回值:无********************************************/void LocateXY_1(uchar x,uchar y){uchar tempx;uchar tempy;tempx=x|0x40;tempy=y|0xC0;LcdWriteCommand(tempx,1);LcdWriteCommand(tempy,1);}/************************************************************函数名:DisplarString2*功能:写指定个数的汉字,按照像素点定位行*参数:x列数,y行数,n显示汉字个数,MemuTemp汉字字符串*返回值:无*备注:***********************************************************/void DisplarString2(unsigned char x,unsigned char y,unsigned char n,unsigned char *MemuTemp) {uchar a,b,i,x_1,y_1;for(a=0;a<n*2;a+=2) //计数列,每列7个字符{for(b=0;b<70;b++) //50个字符内搜索需要显示的字符{if((font16X16[b].Index[0]==MemuTemp[a])&&(font16X16[b].Index[1]==MemuTemp[a+1])) //找到需要显示的字符,显示{if((a*8+x)<64){LcdChoiceL();x_1=a*8+x;y_1=y;}else{ if((a*8+x)<128){LcdChoiceR();x_1=a*8+x-64;y_1=y;}else{LcdChoiceL();x_1=a*8+x-128;y_1=y+2;}}LocateXY_1(x_1,y_1);for(i=0; i<32; i++){if(i==16) //如果已经传送16个字节,换行传送字符下半部分{LocateXY_1(x_1,y_1+1);}LcdWriteData(font16X16[b].Msk[i]);}break;}}}}/************************************************************函数名:DisplarFont8x16_2*功能:写一行的指定个数的字母*参数:x列数,y行数,n显示汉字个数,MemuTemp汉字字符串*返回值:无*备注:***********************************************************/void DisplarFont8x16_2(unsigned char x,unsigned char y,unsigned char d,unsigned char *MemuTemp){uchar a,b,i,x_1,y_1;uchar n;n=d*8;for(a=0;a<n;a++) //计数列,每列7个字符{if((a*8+x)<64) //判断是否在左侧屏幕{LcdChoiceL(); //选择左侧x_1=a*8+x; //定位坐标y_1=y;}else{ if((a*8+x)<128) //在右侧屏幕{LcdChoiceR();x_1=a*8+x-64;y_1=y;}else //超出右侧屏幕{if(a*8+x-128<64){LcdChoiceL(); //选择左侧屏幕x_1=a*8+x-128;y_1=y+2; //行下移一行}else{if(a*8+x-192<64){LcdChoiceR(); //选择右侧侧屏幕x_1=a*8+x-192;y_1=y+2; //行下移一行}}}}LocateXY(x_1,y_1);for(b=0;b<94;b++) //50个字符内搜索需要显示的字符{if(font8x16[b][0]==MemuTemp[a]) //找到需要显示的字符,显示{for(i=1; i<17; i++){if(i==9) //如果已经传送16个字节,换行传送字符下半部分{LocateXY(x_1,y_1+1);}LcdWriteData(font8x16[b][i]);}break;}}}}/************************************************************函数名:DisplarFont8x16*功能:写一行的字母*参数:*返回值:无*备注:***********************************************************/void DisplarFont8x16(unsigned char x,unsigned char y,unsigned char *MemuTemp) {uchar a,b,i,x_1,y_1;uchar n=0;while(MemuTemp[n]!='\0')n++;for(a=0;a<n;a++) //计数列,每列7个字符{if((a*8+x)<64) //判断是否在左侧屏幕{LcdChoiceL(); //选择左侧x_1=a*8+x; //定位坐标y_1=y;}else{ if((a*8+x)<128) //在右侧屏幕{LcdChoiceR();x_1=a*8+x-64;y_1=y;}else //超出右侧屏幕{if(a*8+x-128<64){LcdChoiceL(); //选择左侧屏幕x_1=a*8+x-128;y_1=y+2; //行下移一行}else{if(a*8+x-192<64){LcdChoiceR(); //选择右侧侧屏幕x_1=a*8+x-192;y_1=y+2; //行下移一行}}}}LocateXY(x_1,y_1);for(b=0;b<94;b++) //50个字符内搜索需要显示的字符{if(font8x16[b][0]==MemuTemp[a]) //找到需要显示的字符,显示{for(i=1; i<17; i++){if(i==9) //如果已经传送16个字节,换行传送字符下半部分{LocateXY(x_1,y_1+1);}LcdWriteData(font8x16[b][i]);}break;}}}}/************************************************************函数名:DisplarFont8x16Left*功能:写左侧一行的字母,y参数为1-4之间数字,字符组MemuTemp包含8个字符*参数:*返回值:无*备注:***********************************************************/void DisplarFont8x16Left(unsigned char y,unsigned char *MemuTemp){uchar a,b,i,x;y=2*y-2;uchar n=0;LcdChoiceL(); // 清除所选择行数据开始LocateXY( 0,y);for(n=0;n<64;n++)LcdWriteData(0x00);LocateXY( 0,y+1);for(n=0;n<64;n++)LcdWriteData(0x00); // 清除所选择行数据结束for(a=0;a<8;a++) //计数每行字节,每行7个字符{for(b=0;b<94;b++) //50个字符内搜索需要显示的字符{if(font8x16[b][0]==MemuTemp[a]) //找到需要显示的字符,显示{x=a*8; //计算LocateXY(x,y); //开始定位y 行0位上半部分for(i=1; i<17; i++){if(i==9) //如果已经传送16个字节,换行传送字符下半部分LocateXY(x,y+1); ////开始定位y 行0位下半部分LcdWriteData(font8x16[b][i]);}break;}}}}/*******************************************函数名称:LcdChoiceLine功能:对12864液晶指定行进行清除参数:无返回值:无********************************************/void LcdClearLine(uchar y){uchar n;LcdChoiceL();//选择左侧LocateXY( 0,y);for(n=0;n<64;n++)LcdWriteData(0x00);LocateXY( 0,y+1);for(n=0;n<64;n++)LcdWriteData(0x00);LcdChoiceR();//选择右侧LocateXY( 0,y);for(n=0;n<64;n++)LcdWriteData(0x00);LocateXY( 0,y+1);for(n=0;n<64;n++)LcdWriteData(0x00);}typedef struct{unsigned char Index[2];unsigned char Msk[32];}TYPE_FONT16X16;const TYPE_FONT16X16 font16X16[]={"宁",0x20,0x18,0x88,0x88,0x88,0x88,0x89,0x8E,0x88,0x88,0x88,0x88,0x88,0x28,0x18,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,"波",0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00, 0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00,"钢",0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xFE,0x12,0x62,0x82,0x72,0x02,0xFE,0x00,0x00, 0x01,0x01,0x01,0x7F,0x21,0x11,0x00,0xFF,0x08,0x06,0x01,0x4E,0x80,0x7F,0x00,0x00,"铁",0x20,0x10,0x2C,0xE7,0x24,0x24,0x40,0x3C,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00, 0x01,0x01,0x01,0x7F,0x21,0x11,0x80,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x00,"有",0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00, 0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00,"限",0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00, 0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00,"公",0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00, 0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00,"司",0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,"能",0x08,0xCC,0x4A,0x49,0x48,0x4A,0xCC,0x18,0x00,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00, 0x00,0xFF,0x12,0x12,0x52,0x92,0x7F,0x00,0x00,0x7E,0x88,0x88,0x84,0x82,0xE0,0x00,"环",0x04,0x84,0x84,0xFC,0x84,0x84,0x00,0x04,0x04,0x84,0xE4,0x1C,0x84,0x04,0x04,0x00, 0x20,0x60,0x20,0x1F,0x10,0x10,0x04,0x02,0x01,0x00,0xFF,0x00,0x00,0x01,0x06,0x00,"部",0x40,0x44,0x54,0x65,0x46,0x44,0x64,0x54,0x44,0x40,0xFE,0x02,0x22,0xDA,0x06,0x00, 0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,"煤",0x80,0x70,0x00,0xFF,0x20,0x10,0x04,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x04,0x00,0x80,0x60,0x18,0x07,0x08,0x30,0x44,0x24,0x15,0x0D,0xFF,0x0D,0x15,0x24,0x44,0x00,"气",0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x04,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00,"排",0x10,0x10,0x10,0xFF,0x90,0x08,0x88,0x88,0xFF,0x00,0x00,0xFF,0x88,0x88,0x08,0x00,0x02,0x42,0x81,0x7F,0x00,0x08,0x08,0x08,0xFF,0x00,0x00,0xFF,0x08,0x08,0x08,0x00,"水",0x00,0x20,0x20,0x20,0xA0,0x60,0x00,0xFF,0x60,0x80,0x40,0x20,0x18,0x00,0x00,0x00, 0x20,0x10,0x08,0x06,0x01,0x40,0x80,0x7F,0x00,0x01,0x02,0x04,0x08,0x10,0x10,0x00,"器",0x80,0x80,0x9E,0x92,0x92,0x92,0x9E,0xE0,0x80,0x9E,0xB2,0xD2,0x92,0x9E,0x80,0x00, 0x08,0x08,0xF4,0x94,0x92,0x92,0xF1,0x00,0x01,0xF2,0x92,0x94,0x94,0xF8,0x08,0x00,"报",0x10,0x10,0x10,0xFF,0x10,0x90,0x00,0xFE,0x82,0x82,0x82,0x92,0xA2,0x9E,0x00,0x00, 0x04,0x44,0x82,0x7F,0x01,0x00,0x00,0xFF,0x80,0x43,0x2C,0x10,0x2C,0x43,0x80,0x00,"警",0x12,0xEA,0xAF,0xAA,0xEA,0x0F,0xFA,0x02,0x88,0x8C,0x57,0x24,0x54,0x8C,0x84,0x00, 0x02,0x02,0xEA,0xAA,0xAA,0xAB,0xAA,0xAB,0xAA,0xAA,0xAA,0xAA,0xEA,0x02,0x02,0x00,"CO",0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00C, 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,"信",0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00, 0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00,"号",0x80,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x80,0x00, 0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x44,0x84,0x44,0x3C,0x00,0x00,0x00,0x00,"正",0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00, 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,"常",0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00, 0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00,"在",0x08,0x08,0x88,0xC8,0x38,0x0C,0x0B,0x08,0x08,0xE8,0x08,0x08,0x08,0x08,0x08,0x00,0x02,0x01,0x00,0xFF,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x00,"发",0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00, 0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00,"送",0x40,0x40,0x42,0xCC,0x00,0x88,0x89,0x8E,0x88,0xF8,0x88,0x8C,0x8B,0x88,0x80,0x00, 0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x48,0x46,0x41,0x42,0x44,0x58,0x40,0x40,0x00,"短",0x90,0x88,0x87,0xFC,0x84,0x84,0x80,0x02,0xF2,0x12,0x12,0x12,0x12,0xF2,0x02,0x00, 0x80,0x60,0x18,0x07,0x08,0x30,0x00,0x40,0x45,0x59,0x41,0x41,0x51,0x4D,0x40,0x00,"成",0x00,0x00,0xF8,0x48,0x48,0x48,0xC8,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x88,0x08,0x00, 0x40,0x30,0x0F,0x00,0x08,0x50,0x4F,0x20,0x10,0x0B,0x0C,0x12,0x21,0x40,0xF0,0x00,"功",0x00,0x04,0x04,0x04,0xFC,0x04,0x14,0x14,0x10,0x90,0x7F,0x10,0x10,0xF0,0x00,0x00, 0x04,0x0C,0x04,0x04,0x03,0x42,0x22,0x11,0x0C,0x23,0x20,0x60,0x20,0x1F,0x00,0x00," ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,"手",0x00,0x24,0x24,0x24,0x24,0x24,0x24,0xFE,0x22,0x22,0x22,0x22,0x22,0x20,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,"机",0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,"卡",0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x02,0x04,0x0C,0x38,0x10,0x00,0x00,"错",0x40,0x30,0x2C,0xE7,0x24,0x24,0x40,0x48,0x7F,0x48,0x48,0x7F,0x48,0x48,0x40,0x00, 0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,"误",0x40,0x41,0xCE,0x04,0x00,0x40,0x5F,0x51,0x51,0xD1,0x51,0x51,0x5F,0x40,0x00,0x00, 0x00,0x00,0x3F,0x10,0x88,0x42,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0xE2,0x42,0x00,/*********************************************/"强",0x02,0xE2,0x22,0x22,0x3E,0x00,0x80,0x9E,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00, 0x00,0x43,0x82,0x42,0x3E,0x40,0x47,0x44,0x44,0x44,0x7F,0x44,0x44,0x54,0xE7,0x00,"度",0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00, 0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,"中",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,"国",0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00, 0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x4A,0x4C,0x48,0x40,0xFF,0x00,0x00,"移",0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x10,0x08,0x94,0x67,0x24,0x94,0x0C,0x00,0x00, 0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x89,0x89,0x44,0x4A,0x33,0x12,0x0A,0x06,0x00,"动",0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00, 0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,"联",0x02,0xFE,0x92,0x92,0xFE,0x02,0x00,0x10,0x11,0x16,0xF0,0x14,0x13,0x10,0x00,0x00, 0x10,0x1F,0x08,0x08,0xFF,0x04,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x00,"通",0x40,0x42,0xCC,0x00,0x00,0xE2,0x22,0x2A,0x2A,0xF2,0x2A,0x26,0x22,0xE0,0x00,0x00, 0x80,0x40,0x3F,0x40,0x80,0xFF,0x89,0x89,0x89,0xBF,0x89,0xA9,0xC9,0xBF,0x80,0x00,"服",0x00,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0xFE,0x82,0x82,0x92,0xA2,0x9E,0x00,0x00, 0x80,0x60,0x1F,0x02,0x42,0x82,0x7F,0x00,0xFF,0x40,0x2F,0x10,0x2C,0x43,0x80,0x00,"务",0x00,0x00,0x90,0x88,0x4C,0x57,0xA4,0x24,0x54,0x54,0x8C,0x84,0x00,0x00,0x00,0x00, 0x01,0x01,0x80,0x42,0x22,0x1A,0x07,0x02,0x42,0x82,0x42,0x3E,0x01,0x01,0x01,0x00,"串",0x00,0x00,0x3C,0x24,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0x24,0x3C,0x00,0x00,0x00, 0x00,0x1F,0x09,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x09,0x1F,0x00,0x00,"口",0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,0x00, 0x00,0x00,0x7F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,0x00,"通",0x40,0x42,0xCC,0x00,0x00,0xE2,0x22,0x2A,0x2A,0xF2,0x2A,0x26,0x22,0xE0,0x00,0x00, 0x80,0x40,0x3F,0x40,0x80,0xFF,0x89,0x89,0x89,0xBF,0x89,0xA9,0xC9,0xBF,0x80,0x00,"讯",0x40,0x40,0x42,0xCC,0x00,0x82,0x82,0xFE,0x82,0x82,0x02,0xFE,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x00,0x00,0x00,0x0F,0x30,0x40,0xF8,0x00,"异",0x00,0x00,0x7E,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0xE0,0x00,0x00, 0x08,0x88,0x48,0x28,0x1E,0x08,0x08,0x08,0x08,0x08,0xFE,0x08,0x08,0x08,0x08,0x00,"修",0x40,0x20,0xF8,0x07,0xF0,0xA0,0x90,0x4C,0x57,0x24,0xA4,0x54,0x4C,0x80,0x80,0x00, 0x00,0x00,0xFF,0x00,0x1F,0x80,0x92,0x52,0x49,0x29,0x24,0x12,0x08,0x00,0x00,0x00,//修0,"改",0x04,0x84,0x84,0x84,0x84,0xFC,0x40,0x30,0xCC,0x0B,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x7F,0x20,0x10,0x10,0x08,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,//改1,"码",0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00,//码2,"电",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,//电3,"话",0x40,0x40,0x42,0xCC,0x00,0x00,0x20,0x24,0x24,0x24,0xFE,0x22,0x23,0x22,0x20,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFE,0x42,0x42,0x43,0x42,0x42,0xFE,0x00,0x00,//话4,"接",0x10,0x10,0x10,0xFF,0x10,0x50,0x44,0x54,0x65,0xC6,0x44,0x64,0x54,0x44,0x40,0x00,0x04,0x44,0x82,0x7F,0x01,0x82,0x82,0x4A,0x56,0x23,0x22,0x52,0x4E,0x82,0x02,0x00,//接5,"收",0x00,0xFC,0x00,0x00,0xFF,0x00,0x40,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,0x00,0x0F,0x04,0x02,0xFF,0x00,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,//收6,"息",0x00,0x00,0x00,0xFC,0x54,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,0x40,0x30,0x00,0x03,0x39,0x41,0x41,0x45,0x59,0x41,0x41,0x73,0x00,0x08,0x30,0x00,//息7,"数",0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00,//数8,"量",0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00, 0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00,//量9,"存",0x04,0x04,0x84,0xE4,0x1C,0x07,0x24,0x24,0x24,0x24,0xA4,0x64,0x24,0x04,0x04,0x00,0x02,0x01,0x00,0xFF,0x00,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x00,//存10,"储",0x80,0x60,0xF8,0x87,0x84,0x98,0x00,0x20,0x24,0xA4,0x7F,0x24,0x34,0x28,0x24,0x00,0x00,0x00,0xFF,0x00,0x00,0x7F,0x24,0x12,0x01,0xFF,0x49,0x49,0x49,0xFF,0x00,0x00,//储11,"无",0x00,0x40,0x42,0x42,0x42,0xC2,0x7E,0x42,0xC2,0x42,0x42,0x42,0x40,0x40,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x70,0x00,0x00,};/************************************************************说明:该font.h 文件中包含的是5110显示所用的ASCII、部分汉字、及图片字模。

LCD12864液晶驱动程序


/ void LCD_12864_Write_Data(uchar dat) { LCD_12864_BUSY_WAIT(); LCD_12864_RS_1(); LCD_12864_RW_0(); LCD_12864_DATA=dat; LCD_12864_E_1(); LCD_12864_E_0(); } /****************************************************************************** * Function:void LCD_12864_Init(void) Description:液晶初始化 Calls:LCD_12864_Write_Command(); CallS By:Sytem_Init.c 中的 System_Init() Input: None Output:None Others: ******************************************************************************* / void LCD_12864_Init(void) { /*光标的移动方向*/ LCD_12864_Write_Command(0x06); /*开显示,关游标*/ LCD_12864_Write_Command(0x0C); /*开显示,开游标*/ //LCD_12864_Write_Command(0x0F); /*基本指令动作*/ LCD_12864_Write_Command(0x30); } /****************************************************************************** * Function:void LCD_12864_Clean_GDRAM(void) Description:清屏,GDRAM 填满 0 Calls:LCD_12864_Init(); LCD_12864_Write_Command(0x36); LCD_12864_Write_Data(0x00);

LCD12864驱动程序(无字库)

LCD12864驱动程序(无字库)电路图如下,本人亲自调试过,可用!程序如下:*******************************************************************************主程序:#include <reg52.h>#include <LCD_12864.h>main() //主程序{unsigned char i=0;while(1){init_lcd();display_imge1();delay(30000);Msg(0);delay(30000);display_imge2();delay(30000);Disp_H_Line();delay(10000);Disp_V_Line();delay(10000);Msg(1);delay(30000);}}驱动程序//**********************LCD——12864显示程序**************// #include <reg52.h>#include <string.h>#include <math.h>#include <LCD_12864.h>#include <LCD_12864_data.h>#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 P0<------> LCMsbit Di =P2^0; //Data or Instrument Select RSsbit RW =P2^1; //Write or Read R/Wsbit Enable =P2^2; //6800 mode Enable single Esbit Mcs =P2^3; //Master chip enable CS1sbit Scs =P2^4; //Slave chip enable CS2sbit Lcd_Rst=P2^5; //Lcm reset RSTvoid 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) //写指令{Di=0;RW=0;Lcd_Bus=cmdcode;delay(0);Enable=1;delay(0);Enable=0;}void write_data(unsigned char Dispdata) //写数据{Di=1;RW=0;Lcd_Bus=Dispdata;delay(0);Enable=1;delay(0);Enable=0;}void frame() // {unsigned char i;Mcs=1;Scs=1;write_com(Page_Add+0);write_com(Col_Add+0);for(i=0;i<64;i++) write_data(0x01);write_com(Page_Add+7);write_com(Col_Add+0);for(i=0;i<64;i++) write_data(0x80);for(i=0;i<8;i++){Mcs=1;Scs=1;write_com(Page_Add+i);write_com(Col_Add+63);write_data(0xff);Mcs=1;Scs=1;write_com(Page_Add+i);write_com(Col_Add+0);write_data(0xff);}}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);}}void Disp_Img(unsigned char code *img) //显示图片{unsigned char j,k;Clr_Scr();for(k=0;k<8;k++){Mcs=1;Scs=0;delay(10);write_com(Page_Add+k);write_com(Col_Add+0);for(j=0;j<64;j++) write_data(img[k*128+j]);Mcs=0;Scs=1; delay(10);write_com(Page_Add+k);write_com(Col_Add+0);for(j=64;j<128;j++) write_data(img[k*128+j]);}}void Disp_H_Line() //显示行线{unsigned char i,j;Mcs=1;Scs=1;write_com(Disp_On);write_com(Page_Add);write_com(Start_Line);write_com(Col_Add);for(j=0;j<8;j++){write_com(Page_Add+j);write_com(Col_Add+0);// write_com(Start_Line+0);for(i=0;i<64;i++)write_data(0x55);}}void Disp_V_Line() //显示列线{unsigned char i,j;write_com(Disp_On);write_com(Page_Add);write_com(Start_Line);write_com(Col_Add);for(j=0;j<8;j++){write_com(Page_Add+j);write_com(Col_Add+0);write_com(Start_Line+0);for(i=0;i<32;i++){write_data(0x00);write_data(0xff);}}}void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk) //行列显示{unsigned char j=0,i=0;for(j=0;j<2;j++){write_com(Page_Add+pag+j); //第3、4行write_com(Col_Add+col); //列选for(i=0;i<16;i++) write_data(hzk[16*j+i]);}}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);}void Msg(int flg){Clr_Scr();frame();if(flg==0){ //显示“延安大学”Mcs=1;Scs=0;hz_disp16(3,32,yan);delay(4000);hz_disp16(3,48,an);delay(4000);Mcs=0;Scs=1;hz_disp16(3,0,da);delay(4000);hz_disp16(3,16,xue);delay(4000);}else if(flg==1){ //显示“测试完毕”Mcs=1;Scs=0;hz_disp16(3,32,ce);hz_disp16(3,48,shi);Mcs=0;Scs=1;hz_disp16(3,0,wan);hz_disp16(3,16,bi);}}void display_imge1(){Disp_Img(FirstPage);}void display_imge2(){Disp_Img(SecondPage);}字模数据#include <reg52.h>char code yan[]={0x02,0x22,0x72,0x2E,0xE2,0x00,0x04,0xE4,0x04,0x04,0xFC,0x42,0x42,0x42,0x00,0x00,0x40,0x23,0x14,0x08,0x17,0x20,0x20,0x47,0x44,0x44,0x47,0x44,0x44,0x44,0x44,0x00/*"延",0*/};char code an[]={0x80,0x90,0x8C,0x84,0x84,0xF4,0xA5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x84,0x00,0x80,0x80,0x80,0x40,0x47,0x28,0x28,0x10,0x28,0x24,0x43,0xC0,0x40,0x00,0x00,0x00/*"安",1*/};char code da[]={0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00/*"大",2*/};char code xue[]={0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00/*"学",3*/};char code ce[]={0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,/*"测",0*/};char code shi[]={0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,/*"试",0*/};char code wan[]={0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00, 0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00,/*"完",0*/};char code bi[]={0x00,0x00,0xFF,0x88,0x48,0x28,0x08,0x80,0x7F,0x88,0x88,0x88,0x84,0x84,0xE0,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*"毕",0*/};unsigned char code FirstPage[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x70,0xFC,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC0,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xC0,0x80,0xE0,0xFF,0xFF,0xFF,0xFF,0x78,0x78,0xF8,0xF0,0xE0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x06,0x3F,0x3F,0x9C,0x9C,0x3E,0x3C,0x38,0xF8,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E,0xFF,0xE1,0x00,0xC0,0xF8,0xFC,0xFC,0xE4, 0xE2,0xC2,0xC2,0xE1,0xA1,0x33,0xF3,0xF3,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3B,0x38,0x38,0x1E,0x9F,0x87,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xFF,0xFF,0xFF,0xFF,0xFB,0xF9,0xF8,0xF8,0xF8,0x78,0x78,0x30,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0xFF,0xFF,0x7F,0x3F,0x3F,0x1F,0x8F,0x8F,0xC3,0xC3,0xE3,0xE1,0xE1,0x31,0x31,0x73,0xE3,0xE3,0x7F,0x3F,0x00,0x00,0x00, 0x00,0x00,0x10,0x78,0xF8,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xDF,0xFF,0xBF,0xB3,0xB0, 0x99,0x9B,0x9F,0x9F,0x9F,0x9E,0x86,0x81,0x81,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0xF8,0xF8,0xF8,0xFF,0xBF,0x3F,0x3D,0xFC,0xFC,0xFC,0xFC,0x7F,0x1F,0x1F,0x1F,0x1E, 0x0F,0x0E,0x0E,0x1E,0x1F,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x81,0x87,0xC7,0xE7, 0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0x01,0x70,0xF0,0xF0,0xF0,0xF0,0xE0,0xC0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x67,0xE3,0xE0,0xE0,0xE0,0xE1,0xE3, 0xF3,0xF8,0xFE,0xFF,0xFB,0xF0,0x70,0x70,0x70,0x70,0x60,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x0F,0x0F,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x0F,0x0F,0x0F,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x1E,0x1E,0x1E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x0F,0x0F,0x1E,0x1E,0x3C,0x3C,0x18,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x1C,0x3C,0x3C,0x3C,0x3C,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"C:\Documents and Settings\Administrator\桌面\延安大学字.bmp",0*/};unsigned char code SecondPage[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0xC1,0xF1,0xFD,0xFF,0xDF,0xC7,0xC0,0x12,0xF3,0xF3,0xF3,0x03,0xFF,0xFF, 0xFF,0x41,0x41,0x41,0x41,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x1E,0x02,0x02,0x02,0xC2,0xF2,0xF2,0x73,0x23,0x03,0x02,0x02,0x02,0x02,0x02,0x3E,0x3E,0x3E,0x00,0x00, 0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xFF,0xFF,0xFF,0xFF,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x78,0x78,0x78,0x78,0x8B,0x8B,0x8B,0x8A,0x88,0x89,0x8B,0x89,0x89,0x8C,0x8F,0x8F,0x8F,0x89,0x78,0x78,0x78,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0xBC,0xF8,0xFE,0xFF,0x9F,0x81,0x20,0x3F,0x3F,0x3F,0x20,0x3F,0x3F, 0x3F,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x13,0x1F,0x3F,0x3F,0xB7,0xF3,0xE3,0xE3,0xF3,0xFF,0xFF,0x9F,0x87,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xF0,0xF8,0x7E,0x3F,0x0F,0x0F,0x1F,0x7C,0xF8, 0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xFC,0xFE,0xFE,0x17,0x13,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80, 0x00,0x06,0x07,0x07,0x03,0x01,0x81,0x81,0x83,0x83,0x83,0x83,0xC6,0xC6,0xC6,0x86,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x02,0x0E,0xCE,0xC6,0x07,0xC7, 0x83,0x03,0x03,0x01,0x01,0x80,0x81,0x01,0x03,0x03,0x07,0x87,0x87,0x02,0x00,0x00,0x00,0x02,0x07,0x07,0x87,0x83,0x81,0x81,0x80,0x80,0xC0,0xC0,0x80,0x80,0x80,0x80,0x81,0x81,0x03,0x07,0x07,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xFF,0xFF,0x8D,0x8D,0x8D,0x8C,0xFC,0xFC,0x8C,0x8C, 0x80,0x80,0x00,0x80,0x80,0x80,0xFF,0xFF,0x99,0x99,0x99,0x99,0xF8,0xF8,0x98,0x98,0x80,0x80,0x00,0x33,0x33,0xFF,0xFF,0x33,0x00,0x16,0x36,0xA6,0xFF,0xFF,0xC6,0x66,0x0C,0x00,0x00,0x00,0xA1,0xA1,0xAA,0xEA,0xFF,0xBF,0xAA,0xAA,0xFF,0xFF,0xAA,0xAA, 0xA1,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x19,0x19,0x0D,0x0D,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,0x05,0x0D,0x19,0x11,0x01,0x00,0x0C,0x0C,0x07,0x07,0x06,0x00,0x06,0x03,0x19,0x1F,0x0F,0x01,0x03,0x06,0x04,0x00,0x00,0x00,0x1F,0x1F,0x0C,0x06,0x06,0x00,0x0F,0x1F,0x18,0x18,0x18,0x1E,0x0C,0x00,0x00,0x00,0x10,0x10,0x1B,0x1B,0x0C,0x06,0x06,0x0C,0x8B,0x9B,0x18,0x10,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0xC0,0xC0,0x00,0x00,0x00,0x80,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x18,0x18,0xF8,0xF9,0x03,0x00,0x01,0xF1,0xF1,0x31,0x31,0x31,0x3F,0x3F,0x00,0x00,0x00,0x30,0x18,0x3C,0x36,0xF3,0xF1,0x30,0x30,0x33,0xF7,0xFE,0x1C,0x38,0x10,0x00,0x00,0xFF,0xFF,0xD8,0xDF,0xDF,0x18,0x7F,0x7F,0xCB,0xFF,0xFF,0xCB,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0C,0x06,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x1C,0x1C,0x00,0x00,0x08,0x18,0x0C,0x06,0x03,0x01,0x00,0x18,0x18,0x0F,0x07,0x00,0x00,0x00,0x00,0x18,0x0F,0x03,0x00,0x1F,0x1F,0x06,0x06,0x07,0x07,0x06,0x1F,0x1F,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,/*"C:\Documents and Settings\Administrator\桌面\乒乓球记分牌.bmp",0*/};/×××××××××××××××××××××××××××××××××××××××库函数.h××××××××××××××××××××××××××××××××××××××/ void delay(unsigned int t);void write_com(unsigned char cmdcode);void write_data(unsigned char Dispdata);void frame();void Clr_Scr();void Disp_Img(unsigned char code *img);void Disp_H_Line();void Disp_V_Line();void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk); void init_lcd();void Msg(int flg);void display_imge1(void);void display_imge2(void);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

液晶显示模块的应用一、结构特点内藏T6963C 的液晶显示模块上已经实现了T6963C 与行、列驱动器及显示缓冲区RAM 的接口,同时也已用硬件设置了液晶屏的结构(单双屏、数据传输方式、显示窗口长度、宽度等等。

我们常用的液晶显示模块一般都是单屏结构,因此我们这里只讨论单屏结构的液晶显示模块。

内藏T6963C 的单屏结构点阵图形液晶显示模块的方框图如下:二、T6963C 的特点(1) T6963C 是点阵式液晶图形显示控制器它能直接与8 位微处理器接口;(2) T6963C 的字符字体可由硬件或软件设置,其字体有4 种5X8 、6X8 、7X8、8X8;(3) T6963C 的占空比可从1/16 到1/128;(4) T6963C 可以图形方式、文本方式及图形和文本合成方式进行显示,以及文本方式下的特征显示,还可以实现图形拷贝操作等等;(5) T6963C 具有内部字符发生器CGROM,共有128 个字符。

T6963C 可管理64K显示缓冲区及字符发生器CGRAM,并允许MPU 随时访问显示缓冲区,甚至可以进行位操作。

三、该类液晶模块的管脚定义见下表:说明:对于单电源模块,标志为V0/POFF。

当该管脚为高或悬空时,内部DC/DC 功能开启;为低时,内部DC/DC 功能关闭。

该功能可用作屏幕保护和休眠方式。

如果用其直接替代双电源模块,该管脚直接悬空即可。

四、液晶显示模块的供电说明1. 如果您所选用的液晶模块是双电源(VDD/V0)供电的就需要提供一个负电压(液晶驱动电压V0/VEE),用以调节对比度,接在液晶模块的V0 引脚上。

因为液晶材料的物理特性,液晶的对比度会随着温度的变化而相应变化,所以,您加的负电压值应该随温度作相应的调整,大致是温度变化10°C 电压变化1伏左右。

为满足这一要求您要选择较大值的负电源,然后做一个温度补偿电路,或者安排一个电位器调整负电压值。

例如对于QH12864T-HT-LED04,当室温(VDD=5V)时,V0=,如果要用到-20°C,液晶驱动电压将要变到V0=,再考虑到负载消耗所以您提供的负电源应该为-16V 左右。

但如果超过此值太多或说超过了液晶驱动电源的极限值的话应该考虑保护电路。

2. 常用负电源产生办法1) 采用79 系列三端集成稳压器可产生-18v(7918) -24v(7924)等电源2) 采用DC-DC 模块市场上常见的5D**系列型号可选择使用3) 采用DC-DC 集成电路制作负电源如MAX749、 MAX680、 MC34063 等。

3. 液晶模块可选用带背光的型号大部分为LED 背光方式,供电为~直流电源,严格限制5V 电源直接供电,否则不仅会增加您的功耗,更会增加损坏背光灯的可能性和缩短液晶模块的使用寿命。

推荐电压如下:当背光方式为LED04 即底背光时VLED<;当背光方式为LED03 即边背光时VLED。

五、T6963C 与MPU 的接口时序:T6963C 与MPU 接口时序如图:六、液晶显示模块指令系统该类液晶模块的系统指令集其实就是T6963C 控制器的指令集。

模块的初始化设置一般都由管脚设置完成,因此其指令系统将集中于显示功能的设置上。

T6963C的指令可带一个或两个参数,或无参数。

每条指令的执行都是先送入参数(如果有的话),再送入指令代码。

每次操作之前,最好先进行状态字检测。

T6963C 的状态字如下所示:由于状态位作用不一样,因此执行不同指令必须检测不同状态位。

在MPU每一次读写指令和数据时,STA0 和STA1 要同时有效――处于"准备好"状态。

当MPU 读写数组时,判断STA2 或STA3 状态。

屏读、屏拷贝指令使用STA6。

STA5 和STA7 反映T6963C 内部运行状态。

T6963C指令系统的说明:1、指针设置指令,格式如下:D1,D2为第一和第二个参数,后一个字节为指令代码,根据N0,N1,N2的取值,该指令有三种含义(N0,N1,N2不能有两个同时为1)(1)光标指针设置:D1表示光标在实际液晶屏上离左上角的横向距离(字符数),D2表示纵向距离(字符行)(2) CGRAM偏置地填寄存器设置:设置了CGRAM在显示64KRAM内的高5位地址,CGRAM的实际地址为:(3)地址指针设置:设置将要进行操作的显示缓冲区(RAM)的一个单元地址,D1、D2为该单元地址的低位和高位地址。

2、显示区域设置,指令格式为:根据N1,N0的不同取值,该指令有四种指令功能形式:文本区和图形区首地址为对应显示屏上左上角字符位或字节位,修改该地址可以产生卷动效果。

D1,D2分别为该地址的低位和高位字节。

文本区宽度(字节数/行)设置和图形区宽度(字节数/行)设置用于调整一行显示所占显示RAM的字节数,从而确定显示屏与显示RAM单元的对应关系。

T6963C硬件设置的显示窗口宽度是指T6963C扫描驱动的有效列数。

需说明的是当硬件设置6×8字体时,图形显示区单元的低6位有效,对应显示屏上6×1显示位。

3、显示方式设置,指令格式为:N3:字符发生器选择位。

N3=1为外部字行发生器有效,此时内部字符发生器被屏蔽,字符代码全部提供给外部字符发生器使用,字符代码为00H-FFH。

N3=0为CGROM即内部字符发生器有效,由于CGROM字符代码为00H~7FH。

因此选用80H~FFH字符代码时,将自动选择CGRAM。

N2~N0:合成显示方式控制位,其组合功能如下表:当设置文本方式和图形方式无能打开时,上述合成显示方式设置才有效。

其中的文本特征方式是指将图形区改为文本特征区。

该区大小与文本区相同,每个字节作为对应文本区的每个字符显示的特征,包括字符显示与不显示、字符闪烁及字符的“负向”显示。

通过这种方式,T6963C可以控制每个字符的文本特征。

文本特征区内,字符的文本特征码由一个字节的低四位组成,即:d3:字符闪烁控制位,d3=1为闪烁,d3=0为不闪烁;d2~d0的组合如下:启用文本特征方式时可在原有图形区和文本区外用图形区域设置指令另开一区作为文本特征区,以保持原图形区的数据。

显示缓冲区可划分如下:4、显示开关,指令格式如下:N0:1/0,光标闪烁启用/禁止N1:1/0,光标显示启用/禁止N2:1/0,文本显示启用/禁止N3:1/0,图形显示启用/禁止5、光标形状选择,指令格式如下:光标形状为8点(列) N行,N的值为0-7H6、数据自动读、写方式设置:该指令执行后,MPU可以连续地读、写显示缓冲区RAM的数据,每读、写一次,地址指针自动增1。

自动读、写结束时,必须写入自动结束命令以使T6963C退出自动读、写状态,开始接受其它指令。

N1,N0组合功能如下:7、数据一次读、写方式,指令格式如下:D1为需要写的数据,读时无此数据。

8、屏读,指令格式为:该指令将屏上地址指针处文本与图形合成后显示的一字节内容数据送到T6963C的数据栈内,等待MPU读出。

地址指针应在图形区内设置。

9、屏拷贝,指令格式为:该指令将屏上当前地址指针(图形区内)处开始的一行合成显示内容拷贝到相对应的图形显示区的一组单元内,该指令不能用于文本特征方式下或双屏结构液晶显示器的应用上。

10、位操作:该指令可将显示缓冲区某单元的某一位清零或置1,该单元地址当前地址指针提供。

N3=1置1,N3=0清零。

N2~N0:操作位,对应该单元的D0~D7位。

至此,T6963C的指令系统全部讲述完毕。

七、液晶显示模块与MCU的接口方法一、直接访问方式MPU可利用数据总线与控制信号直接采用I/O设备访问形式控制T6963C类液晶显示模块。

接口电路以精电蓬远公司提供的演示板为例,如下图所示:8031数据口P0口直接与液晶显示模块的数据口连接,由于T6963C接口适用于8080系列和Z80系列MPU,所以可以直接用8031的/RD、/WR作为液晶显示模块的读、写控制信号,液晶显示模块/RESET,/HALT挂在+5V上。

/CE信号可由地址线译码产生。

C/D信号由8031地址线A8提供,A8=1为指令口地址;A8=0为数据口地址。

指令通道地址C_ADD:8100H数据通道地址D_ADD:8000H二、间接控制方式间接控制方式是MPU通过并行接口间接实现对液晶显示模块控制。

根据液晶模块的需要,并行接口需要一个8位的并行接口和一个3位的并行口,由上图所示。

8031的P1口作为数据总线。

P3口中3位作为读、写及寄存器选择信号。

由于并行接口只用于液晶显示模块,所以/CE信号接地就行了。

MPU通过并行接口操纵液晶显示模块,要对其时序关系有一个清楚的了解,并在程序中应明确地反映出来。

八、LCD驱动程序的设计以直接访问方式为例,说明LCD驱动程序的编制方法。

#include <>#include <>#include <>#include <>#include <>#define ulong unsigned long#define uint unsigned int#define uchar unsigned char#define TRUE 1#define FALSE 0#define HIGH 1#define LOW 06963C6963C0CPointerif(show)fnPR13(0xf8 | (7-column%8)); // 0xf8为画点命令elsefnPR13(0xf0 | (7-column%8)); // 0xf0为清点命令}//以指定的数据进行画点void LCM_show(uchar * s,int start_line,int how_many_line){int addr,i;addr = LCM_G_BASE +start_line*16;LCM_set_address(addr);fnPR12(LCM_AUT_WR); //自动写模式for(i=0;i<how_many_line*16;i++){fnPR14(s[i]);}fnPR12(LCM_AUT_OVR); // 自动写结束}/***********************************************************************画一条x1,y1到x2,y2的直线(show=1画点,show=0清点)***********************************************************************/ void LCM_line(int x1, int y1, int x2, int y2, uchar show){int dy ;int dx ;int stepx, stepy, fraction;dy = y2 - y1;dx = x2 - x1;if (dy < 0){dy = -dy;stepy = -1;}else{stepy = 1;}if (dx < 0){dx = -dx;stepx = -1;}else{stepx = 1;}dy <<= 1;dx <<= 1;LCM_pixel(x1,y1,show);if (dx > dy){fraction = dy - (dx >> 1);while (x1 != x2){if (fraction >= 0){y1 += stepy;fraction -= dx;}x1 += stepx;fraction += dy;LCM_pixel(x1,y1,show);}}else{fraction = dx - (dy >> 1);{if (fraction >= 0){x1 += stepx;fraction -= dy;}y1 += stepy;fraction += dx;LCM_pixel(x1,y1,show);}}}/***********************************************************************以x,y为圆心,以radius为半径画贺(show=1画点,show=0清点)***********************************************************************/ void LCM_circle(int x, int y, int radius, uchar show){int xc = 0;int yc ;int p ;yc=radius;p = 3 - (radius<<1);{LCM_pixel(x + xc, y + yc, show);LCM_pixel(x + xc, y - yc, show);LCM_pixel(x - xc, y + yc, show);LCM_pixel(x - xc, y - yc, show);LCM_pixel(x + yc, y + xc, show);LCM_pixel(x + yc, y - xc, show);LCM_pixel(x - yc, y + xc, show);LCM_pixel(x - yc, y - xc, show);if (p < 0)p += (xc++ << 2) + 6;elsep += ((xc++ - yc--)<<2) + 10;}}//画半圆void LCM_circle_half(int x, int y, int radius, uchar show) {int xc = 0;int yc ;int p ;yc=radius;p = 3 - (radius<<1);{// LCM_pixel(x + xc, y + yc, show);LCM_pixel(x + xc, y - yc, show);// LCM_pixel(x - xc, y + yc, show);LCM_pixel(x - xc, y - yc, show);// LCM_pixel(x + yc, y + xc, show);LCM_pixel(x + yc, y - xc, show);// LCM_pixel(x - yc, y + xc, show);LCM_pixel(x - yc, y - xc, show);if (p < 0)p += (xc++ << 2) + 6;elsep += ((xc++ - yc--)<<2) + 10;}}//画矩形void LCM_box(int x1, int y1, int x2, int y2, uchar show) {LCM_line(x1,y1,x2,y1,show); // upLCM_line(x1,y2,x2,y2,show); // downLCM_line(x2,y1,x2,y2,show); // rightLCM_line(x1,y1,x1,y2,show); // left}//***********************************************************************//以x,y点为原点,以degree为角度,画一条从内径到外径之间的线段//(show=1画点,show=0清点)//***********************************************************************/*void LCM_degree_line(int x, int y, int degree, int inner_radius, int outer_radius, uchar show){int fx,fy,tx,ty;fx = x + (inner_radius * sin(degree * / 180));fy = y - (inner_radius * cos(degree * / 180));tx = x + (outer_radius * sin(degree * / 180));ty = y - (outer_radius * cos(degree * / 180));LCM_line(fx,fy,tx,ty,show);}//画上函数线段的包括线void LCM_degree_line_bold(int x, int y, int degree, int inner_radius, intouter_radius, uchar show){int fx,fy,tx,ty;fx = x + (inner_radius * sin(degree * / 180));fy = y - (inner_radius * cos(degree * / 180));tx = x + (outer_radius * sin(degree * / 180));ty = y - (outer_radius * cos(degree * / 180));LCM_line(fx,fy,tx,ty,show);LCM_line(fx+1,fy+1,tx+1,ty+1,show);LCM_line(fx-1,fy-1,tx-1,ty-1,show);}*///画进度条函数/*void LCM_fill(int x1, int y1, int x2, int y2, uchar persent,char first) {char M,horizon_line,horizon_line2,i,str1[10];if(persent>100)return;if(!first){LCM_line(x1,y2,x2,y2,1); // downLCM_line(x2,y1,x2,y2,1); // rightLCM_line(x1,y1,x1,y2,1); // leftfirst=1;}M=100/abs(y2-y1);horizon_line=persent/M;for(i=0;i<horizon_line;i++)LCM_line(x1+2,y2-2-i,x2-2,y2-2-i,1);horizon_line2=100/M;for(i=horizon_line;i<horizon_line2;i++)LCM_line(x1+2,y2-2-i,x2-2,y2-2-i,0);sprintf(str1,"%02d%% ",persent);LCM_print_ram( (x2+x1)/16-1 , (y2+y1)/16,str1);}*//**************************************************************************延时ms:延时的毫秒数***************************************************************************/ void DelayMs(unit ms){unit iq0, iq1;for (iq0 = ms; iq0 > 0; iq0--)for (iq1 = 1000; iq1 > 0; iq1--);}void main(void) // 测试用{LCM_init();LCM_clear_ram();LCM_circle(120,64,20,1);LCM_circle_half(60,64,20,1);LCM_box(150,20,180,60,1);}。

相关文档
最新文档