LCD12864(ST7920)串行驱动程序
ST7920控制器的lcd12864驱动程序头文件+6页+0[1].1M
![ST7920控制器的lcd12864驱动程序头文件+6页+0[1].1M](https://img.taocdn.com/s3/m/5fb6941155270722192ef7bf.png)
P4=0x01;
}
/***************************************************************** (6)函数名称:ReadData12864() 读当前地址的DDRAM数据 *****************************************************************/ uchar ReadData12864(void) {
/***************************************************************
(5)函数名称:WriteData12864(uchar lcd_data)写数据
入口参数:lcd_data
返回参数:无
****************************************************************/
for(y=0;y<=31;y++) //注意:st7920用于lcd12864时,分上下两区,lcd_y依次从0到31,lcd_x从0到15
{
for(x=0;x<=7;x++)
{
GdramOff();
WriteCmd12864(0x80+y);
WriteCmd12864(0x80+x+i);
WriteData12864(0x00);
//接线说明
#define LCD_DATA
P5 //8 bit数据线 EN=P4^2 ,RW=P4^1 ,RS=P4^0
//初始化指令 #define CLEAR_LCD //#define AC_INIT //#define CURSE_ADD 体不动) #define FUN_MODE #define DISPLAY_ON #define DISPLAY_OFF //#define CURSE_DIR //#define SET_CG_AC //#define SET_DD_AC
液晶屏12864的FPGA驱动程序
![液晶屏12864的FPGA驱动程序](https://img.taocdn.com/s3/m/b1f907d76f1aff00bed51ef2.png)
//液晶屏12864驱动芯片型号为ST7920//芯片型号Altera CYCLONE II EP2C8Q208C8//板载时钟50MHzmodule LCD_test(clk,rst,lcd_e,lcd_rs,lcd_rw,data);input clk; //模块输入时钟50MHzinput rst; //复位信号输入output lcd_e; //使能端output lcd_rs; //数据指令选择output lcd_rw; //读写选择output [7:0] data;reg lcd_e; //这样定义是必须的reg lcd_rw;reg lcd_rs;reg [7:0] data;reg [21:0] clkcnt; //分频用计数寄存器reg clkdiv;reg double_div;reg flag; //初始化标志,复位后flag=0,表示未初始化reg [7:0] state;wire bz_clkcnt;parameter idle=8'b0000_0000; //状态0:用于初始化判断parameter setfunction=8'b0010_0000; //用于选择指令集(基本指令集或扩展指令集)parameter switchmode=8'b0000_1000; //显示状态开关parameter setmode=8'b0000_0100; //parameter clear=8'b0000_0001; //清屏,耗时最久的指令parameter setddram=8'b1000_0000; //设定DDRAM地址,即输入字符的位置parameter write1=8'b1111_0000; //输入字符的编码parameter write2=8'b1110_0000; //再次输入assign bz_clkcnt=(clkcnt[21]==1)?1:0;always@(posedge clk or negedge rst) //分频模块,将50MHz的系统时钟降下来beginif(rst==0)clkcnt=0;else if(clkcnt[21]==1)clkcnt=0;elseclkcnt=clkcnt+1;endalways@(posedge bz_clkcnt or negedge rst) //产生占空比50%的时钟信号beginif(rst==0)clkdiv=0;elseclkdiv=~clkdiv;endalways@(posedge clkdiv) //lcd时钟模块,产生用于lcd动作执行的时钟beginif(rst==0)double_div=0;elsedouble_div=~double_div;endalways@(negedge clkdiv) //lcd使能信号产生模块beginif(rst==0)lcd_e=0;elselcd_e=~lcd_e;endalways@(posedge double_div or negedge rst) //LCD初始化模块,状态机beginif(rst==0)beginflag=0;state=0;endelsebegincase(state)idle:beginif(flag==0) //判断初始化标志位flag==0则进入初始化流程beginflag=1; //开始初始化流程并将flag置1(保证只初始化一回)state=setfunction;endelse //若flag==1表示已经进行过初始化,则不进入初始化流程beginlcd_rw=1;endsetfunction:beginlcd_rw=0;lcd_rs=0;data=8'h30;state=switchmode; end switchmode:beginlcd_rw=0;lcd_rs=0;data=8'h0c;state=clear;endclear:beginlcd_rw=0;lcd_rs=0;data=8'h01;state=setmode; endsetmode:beginlcd_rw=0;lcd_rs=0;data=8'h06;state=setddram; endsetddram:beginlcd_rw=0;lcd_rs=0;data=8'h80;state=write1;endwrite1:beginlcd_rw=0;lcd_rs=1;data="a";state=write2;endwrite2:lcd_rw=0;lcd_rs=1;data="b";state=idle;endendcaseendend endmodule。
LCD12864(ST7920)串行驱动程序
![LCD12864(ST7920)串行驱动程序](https://img.taocdn.com/s3/m/e9cdc2b50b4c2e3f56276350.png)
完整功能版的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)。
OCMJ4X8C型号12864液晶C语言驱动程序(st7920)
![OCMJ4X8C型号12864液晶C语言驱动程序(st7920)](https://img.taocdn.com/s3/m/720962cda1c7aa00b52acb7d.png)
#include <stdio.h>#include <math.h>#include <reg52.h>#include <string.h>/******************************************************************/ /* 定义数组*/ /******************************************************************/ unsigned char code IC_DAT[];unsigned char code pic1[];unsigned char code pic2[];unsigned char code pic3[];/******************************************************************/ /* 定义接口信息*/ /******************************************************************/ sbit RS =P2^4;sbit WRD=P2^5;sbit E= P2^6;sbit PSB=P2^1;sbit RES=P2^3;/******************************************************************/ /* 函数声明*/ /******************************************************************/void TransferData(char data1,bit DI);void display(void);void display_grapic(void);void delayms(unsigned int n);void DisplayLine(unsigned char line1,unsigned char line2);void DisplayGraphic(unsigned char code *adder);void delay(unsigned int m);void lcd_mesg(unsigned char code *adder1);unsigned char code IC_DAT[]={"上海浩豚电子科技""单片机开发板系列""中文字库测试程序""恭喜发财身体健康"};unsigned char code IC_DAT2[]={"海纳百川宽容为先""欲成大业诚信为先""游弋商海济世为先""人立于世守法为先"};/******************************************************************//* 液晶初始化-字库*//******************************************************************/void initinal(void) //LCD字库初始化程序{delay(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay(1); //延时RES=0; //复位delay(1); //延时RES=1; //复位置高delay(10);TransferData(0x30,0); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFFdelay(100); //大于100uS的延时程序TransferData(0x30,0); //Function Setdelay(37); ////大于37uS的延时程序TransferData(0x08,0); //Display on Controldelay(100); //大于100uS的延时程序TransferData(0x10,0); //Cursor Display Control光标设置delay(100); //大于100uS的延时程序TransferData(0x0C,0); //Display Control,D=1,显示开delay(100); //大于100uS的延时程序TransferData(0x01,0); //Display Cleardelay(10); //大于10mS的延时程序TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移动delay(100); //大于100uS的延时程序}/******************************************************************//* 液晶初始化-图形*//******************************************************************/void initina2(void) //LCD显示图片(扩展)初始化程序{delay(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay(1); //延时RES=0; //复位delay(1); //延时RES=1; //复位置高delay(10);TransferData(0x36,0); //Extended Function Set RE=1: extended instructiondelay(100); //大于100uS的延时程序TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction setdelay(37); ////大于37uS的延时程序TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)delay(100); //大于100uS的延时程序TransferData(0x01,0); //CLEAR SCREENdelay(100); //大于100uS的延时程序}/******************************************************************//* 主程序*//******************************************************************/void main(void){while(1){initina2(); //调用LCD显示图片(扩展)初始化程序DisplayGraphic(pic2); //显示图片2delayms(200);DisplayGraphic(pic3); //显示图片3delayms(200);initinal(); //调用LCD字库初始化程序delay(100); //大于100uS的延时程序lcd_mesg(IC_DAT); //显示中文汉字1delayms(240);delayms(240);initinal(); //调用LCD字库初始化程序delay(100); //大于100uS的延时程序lcd_mesg(IC_DAT2); //显示中文汉字2delayms(240);delayms(240);}}/******************************************************************/ /* 函数声明*/ /******************************************************************/void lcd_mesg(unsigned char code *adder1){unsigned char i;TransferData(0x80,0); //Set Graphic Display RAM Addressdelay(100);for(i=0;i<32;i++){TransferData(*adder1,1);adder1++;}TransferData(0x90,0); //Set Graphic Display RAM Addressdelay(100);for(i=32;i<64;i++){TransferData(*adder1,1);adder1++;}}/******************************************************************/ /* 函数声明*/ /******************************************************************/void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.{WRD=0;RS=DI;delay(1);P0=data1;E=1;delay(1);E=0;}void delayms(unsigned int n) //延时10×n毫秒程序{unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}void delay(unsigned int m) //延时程序{unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<10;j++);}/******************************************************************//* 函数声明*//******************************************************************/void DisplayGraphic(unsigned char code *adder){int i,j;//*******显示上半屏内容设置for(i=0;i<32;i++) //{TransferData((0x80 + i),0); //SET 垂直地址VERTICAL ADDTransferData(0x80,0); //SET 水平地址HORIZONTAL ADDfor(j=0;j<16;j++){TransferData(*adder,1);adder++;}}//*******显示下半屏内容设置for(i=0;i<32;i++) //{TransferData((0x80 + i),0); //SET 垂直地址VERTICAL ADDTransferData(0x88,0); //SET 水平地址HORIZONTAL ADDfor(j=0;j<16;j++){TransferData(*adder,1);adder++;}}}unsigned char code pic2[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x1F,0xFF,0x81,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x1F,0xFF,0x81,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x18,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x03, 0xC0,0x1F,0xFF,0x80,0x00,0x00,0x04,0x07,0x81,0xE0,0x10,0x10,0x03,0xC0,0x30,0x03, 0xC0,0x1F,0xFF,0x80,0x00,0x00,0x0C,0x0C,0xC3,0x30,0x08,0x20,0x0C,0xE0,0x70,0x03, 0xC0,0x18,0x01,0x87,0xFF,0xFE,0x3C,0x18,0x66,0x18,0x04,0x40,0x0C,0x60,0x70,0x03, 0xC0,0x1F,0xFF,0x87,0xFF,0xFE,0x0C,0x18,0x66,0x18,0x02,0x80,0x18,0x00,0xB0,0x03, 0xC0,0x1F,0xFF,0x80,0x06,0x00,0x0C,0x18,0x66,0x18,0x01,0x00,0x1B,0x81,0x30,0x03, 0xC0,0x01,0x98,0x00,0x06,0x00,0x0C,0x00,0xE3,0x30,0x02,0x80,0x1C,0xC1,0x30,0x03, 0xC0,0x19,0x99,0x80,0x66,0x60,0x0C,0x00,0xC1,0xE0,0x04,0x40,0x18,0x62,0x30,0x03, 0xC0,0x19,0x99,0x80,0x66,0x30,0x0C,0x01,0x83,0x30,0x08,0x20,0x18,0x66,0x30,0x03, 0xC0,0x0D,0x9B,0x00,0xC6,0x38,0x0C,0x03,0x06,0x18,0x10,0x10,0x18,0x67,0xFC,0x03, 0xC0,0x0D,0x9B,0x01,0xC6,0x1C,0x0C,0x06,0x06,0x18,0x20,0x08,0x18,0x60,0x30,0x03, 0xC0,0x01,0x98,0x03,0x86,0x0C,0x0C,0x0C,0x06,0x18,0x00,0x00,0x08,0x60,0x30,0x03, 0xC0,0x7F,0xFF,0xE3,0x06,0x00,0x0C,0x18,0x03,0x30,0x00,0x00,0x0C,0xC0,0x30,0x03, 0xC0,0x7F,0xFF,0xE0,0x1E,0x00,0x0C,0x1F,0xE1,0xE0,0x00,0x00,0x07,0x80,0x30,0x03, 0xC0,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x00,0x06,0x0C,0x03, 0xC3,0xFF,0xFC,0x3F,0xF0,0x80,0x0C,0x00,0x3F,0x18,0x01,0xFF,0xFE,0x06,0x0C,0x03, 0xC3,0xFF,0xFC,0x3F,0xF1,0x80,0x0F,0xFC,0x3F,0x18,0x01,0xFF,0xFE,0x06,0x0C,0x03,0xC3,0x0C,0x0C,0x0C,0xC3,0x00,0x0F,0xFC,0x33,0x7F,0xE1,0x86,0x06,0x06,0x0C,0x03, 0xC3,0x1F,0xCC,0x0C,0xC6,0x00,0x0C,0x00,0x33,0x7F,0xE1,0x8F,0xE6,0x06,0x0C,0x03, 0xC3,0x3F,0xCC,0x0C,0xCC,0x00,0x0C,0x00,0x36,0x30,0x01,0x9F,0xE6,0x07,0xFF,0xE3, 0xC3,0x79,0x8C,0x0C,0xC8,0x00,0xFF,0xF0,0x36,0x36,0x01,0xBC,0xC6,0x07,0xFF,0xE3, 0xC3,0x6F,0x0C,0x7F,0xF0,0xC0,0xFF,0xF0,0x36,0x66,0x01,0xB7,0x86,0x06,0x00,0x03, 0xC3,0x0F,0x0C,0x7F,0xF1,0x80,0xC0,0x30,0x36,0x7F,0xC1,0x87,0x86,0x06,0x00,0x03, 0xC3,0x79,0xEC,0x0C,0xC3,0x00,0xC0,0x30,0x33,0x7F,0xC1,0xBC,0xF6,0x06,0x00,0x03, 0xC3,0x76,0xEC,0x0C,0xC6,0x00,0xC0,0x30,0x33,0x06,0x01,0xBB,0x76,0x07,0xFF,0x03, 0xC3,0x07,0x0C,0x0C,0xCC,0x20,0xFF,0xF0,0x33,0x06,0x01,0x83,0x86,0x07,0xFF,0x03, 0xC3,0x03,0x0C,0x18,0xC8,0x60,0xFF,0xF0,0x3F,0x06,0x01,0x81,0x86,0x06,0x03,0x03, 0xC3,0x1C,0x0C,0x18,0xC0,0xC0,0x00,0x00,0x3E,0xFF,0xE1,0x8E,0x06,0x06,0x03,0x03, 0xC3,0x1F,0x0C,0x18,0xC1,0x81,0xB1,0x8C,0x30,0xFF,0xE1,0x8F,0x86,0x06,0x03,0x03, 0xC3,0x03,0x0C,0x30,0xC7,0x01,0xB1,0x8C,0x30,0x06,0x01,0x81,0x86,0x0C,0x03,0x03, 0xC3,0xFF,0xFC,0x70,0xDE,0x03,0x18,0xC6,0x30,0x06,0x01,0xFF,0xFE,0x0C,0x03,0x03, 0xC3,0xFF,0xFC,0x20,0x18,0x03,0x18,0xC6,0x30,0x06,0x01,0xFF,0xFE,0x18,0x03,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};unsigned char code pic3[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC3,0x02,0x0E,0x1C,0x08,0xF8,0x67,0xE3,0x87,0x0C,0x08,0x38,0x70,0x23,0xE1,0x83, 0xC4,0x8E,0x11,0x22,0x18,0x80,0x90,0x24,0x48,0x92,0x38,0x44,0x88,0x62,0x02,0x43, 0xC8,0x42,0x11,0x22,0x28,0x81,0x00,0x24,0x48,0xA1,0x08,0x44,0x88,0xA2,0x04,0x03, 0xC8,0x42,0x01,0x02,0x28,0xF1,0xE0,0x44,0x48,0xA1,0x08,0x04,0x08,0xA3,0xC7,0x83, 0xC8,0x42,0x02,0x0C,0x48,0x89,0x10,0x43,0x88,0xA1,0x08,0x08,0x31,0x22,0x24,0x43, 0xC8,0x42,0x04,0x02,0x88,0x09,0x10,0x44,0x47,0xA1,0x08,0x10,0x0A,0x20,0x24,0x43, 0xC8,0x42,0x08,0x22,0xFC,0x89,0x10,0x44,0x40,0xA1,0x08,0x20,0x8B,0xF2,0x24,0x43, 0xC4,0x82,0x10,0x22,0x08,0x89,0x10,0x84,0x49,0x12,0x08,0x40,0x88,0x22,0x24,0x43, 0xC3,0x02,0x1F,0x1C,0x08,0x70,0xE0,0x83,0x86,0x0C,0x08,0x7C,0x70,0x21,0xC3,0x83, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xCF,0xC7,0x0E,0x18,0x10,0x70,0xE0,0x47,0xC3,0x3F,0x1C,0x38,0x60,0x41,0xC3,0x83, 0xC0,0x48,0x91,0x24,0x70,0x89,0x10,0xC4,0x04,0x81,0x22,0x44,0x91,0xC2,0x24,0x43, 0xC0,0x48,0x91,0x42,0x10,0x89,0x11,0x44,0x08,0x01,0x22,0x45,0x08,0x42,0x24,0x43, 0xC0,0x88,0x91,0x42,0x10,0x08,0x11,0x47,0x8F,0x02,0x22,0x45,0x08,0x40,0x20,0x43, 0xC0,0x87,0x11,0x42,0x10,0x10,0x62,0x44,0x48,0x82,0x1C,0x45,0x08,0x40,0x41,0x83, 0xC0,0x88,0x8F,0x42,0x10,0x20,0x14,0x40,0x48,0x82,0x22,0x3D,0x08,0x40,0x80,0x43, 0xC0,0x88,0x81,0x42,0x10,0x41,0x17,0xE4,0x48,0x82,0x22,0x05,0x08,0x41,0x04,0x43, 0xC1,0x08,0x92,0x24,0x10,0x81,0x10,0x44,0x48,0x84,0x22,0x48,0x90,0x42,0x04,0x43, 0xC1,0x07,0x0C,0x18,0x10,0xF8,0xE0,0x43,0x87,0x04,0x1C,0x30,0x60,0x43,0xE3,0x83, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x8F,0x86,0x7E,0x38,0x70,0xC0,0x83,0x87,0x02,0x3E,0x19,0xF8,0xE1,0xC3,0x03, 0xC1,0x88,0x09,0x02,0x44,0x89,0x23,0x84,0x48,0x86,0x20,0x24,0x09,0x12,0x24,0x83, 0xC2,0x88,0x10,0x02,0x44,0x8A,0x10,0x84,0x48,0x8A,0x20,0x40,0x09,0x12,0x28,0x43, 0xC2,0x8F,0x1E,0x04,0x44,0x8A,0x10,0x80,0x40,0x8A,0x3C,0x78,0x11,0x12,0x28,0x43, 0xC4,0x88,0x91,0x04,0x38,0x8A,0x10,0x80,0x83,0x12,0x22,0x44,0x10,0xE2,0x28,0x43, 0xC8,0x80,0x91,0x04,0x44,0x7A,0x10,0x81,0x00,0xA2,0x02,0x44,0x11,0x11,0xE8,0x43, 0xCF,0xC8,0x91,0x04,0x44,0x0A,0x10,0x82,0x08,0xBF,0x22,0x44,0x11,0x10,0x28,0x43, 0xC0,0x88,0x91,0x08,0x44,0x91,0x20,0x84,0x08,0x82,0x22,0x44,0x21,0x12,0x44,0x83, 0xC0,0x87,0x0E,0x08,0x38,0x60,0xC0,0x87,0xC7,0x02,0x1C,0x38,0x20,0xE1,0x83,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC1,0x07,0x0E,0x04,0x7C,0x33,0xF1,0xC3,0x86,0x04,0x1C,0x38,0x11,0xF0,0xCF,0xC3, 0xC7,0x08,0x91,0x0C,0x40,0x48,0x12,0x24,0x49,0x1C,0x22,0x44,0x31,0x01,0x20,0x43,0xC1,0x00,0x81,0x14,0x78,0xF0,0x22,0x24,0x50,0x84,0x02,0x04,0x51,0xE3,0xC0,0x83, 0xC1,0x01,0x06,0x24,0x44,0x88,0x21,0xC4,0x50,0x84,0x04,0x18,0x91,0x12,0x20,0x83, 0xC1,0x02,0x01,0x44,0x04,0x88,0x22,0x23,0xD0,0x84,0x08,0x05,0x10,0x12,0x20,0x83, 0xC1,0x04,0x11,0x7E,0x44,0x88,0x22,0x20,0x50,0x84,0x10,0x45,0xF9,0x12,0x20,0x83, 0xC1,0x08,0x11,0x04,0x44,0x88,0x42,0x24,0x89,0x04,0x20,0x44,0x11,0x12,0x21,0x03, 0xC1,0x0F,0x8E,0x04,0x38,0x70,0x41,0xC3,0x06,0x04,0x3E,0x38,0x10,0xE1,0xC1,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};。
LCD12864驱动程序(带字库的)
![LCD12864驱动程序(带字库的)](https://img.taocdn.com/s3/m/853ab001b52acfc789ebc9fb.png)
{
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;
LCD控制器ST7920程序
![LCD控制器ST7920程序](https://img.taocdn.com/s3/m/3be92d5e804d2b160b4ec0c6.png)
LCD_E=0;
return result;
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
P0=cmd;
Zi_FU("想你啦");
delay(1000);
}
void feeling1()
{
lcd_wcmd(0x30);
Zi_FU("我真的很爱你");
delay(300);
lcd_wcmd(0x90+Fisrt_Addr);
Zi_FU("很在乎很在乎你 ");
lcd_wcmd(0x01);
delay(10);
}
/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/
//先写0x34关绘图,写地址数据,0x360x绘图
void Lcd_Fill(uchar disdata)
lcd_wcmd(0x30);
lcd_wcmd(addr);
while(*ZiFu!='\0')
{
lcd_wdata(*ZiFu++);
}
}
void main()
{
PCB=1;
while(1)
{
lcd_initial();
delay(1000);
lcd_wcmd(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
ST7920 LCD12864液晶显示屏中文说明书例程 单片机控制LCD12864液晶显示屏方法
![ST7920 LCD12864液晶显示屏中文说明书例程 单片机控制LCD12864液晶显示屏方法](https://img.taocdn.com/s3/m/4c5beb20bcd126fff7050bd3.png)
EDM12864-66 图形点阵式液晶显示器模块
原理与应用手册
大连东福彩色液晶显示器有限公司
大连东福彩色液晶显示器有限公司
LCD 模块使用手册
目录
1. 使用范围----------------------------------------------------3 2. 质量保证----------------------------------------------------3 3. 性能特点----------------------------------------------------3 4. 外形图-------------------------------------------------------7 5. I/O 接口特性-----------------------------------------------7 6. 质量等级---------------------------------------------------15 7. 可 靠 性---------------------------------------------------18 8. 生产注意事项---------------------------------------------18 9. 使用注意事项---------------------------------------------19
Z 地址计数器可以用指令 DISPLAY START LINE 预置。因此,显示屏幕的起始行就由此 指令控制。即 DD RAM 的数据从哪一行开始显示在屏幕的第一行。此组件的 DD RAM 共 64 行,屏幕可以循环显示 64 行。
5-5-2 本模块的控制指令: 1、显示开关控制(DISPLAY ON/OFF)
st7920 并行方式驱动12864液晶驱动
![st7920 并行方式驱动12864液晶驱动](https://img.taocdn.com/s3/m/b492a384b9d528ea81c779dc.png)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x43,0x01,0x80,0x00,0x7F,0xFF,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x19,0xFF,0x07,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30,
0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90,
0x00,0x00,0x00,0x01,0xDF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
ST7920驱动(串行)
![ST7920驱动(串行)](https://img.taocdn.com/s3/m/48660d1610a6f524ccbf859f.png)
}
/*********************************************************
函数名: Write_LCD_Command()
返回值:无
功 能: 写命令到LCD
*********************************************************/
}
}
temp1=0xf0&temp1;
temp2=0x0f&temp2;
value=temp1+temp2;
return value ;
}
/*********************************************************
********************************************/
void Disp_HZ(u8 X,const u8 * pt,u8 num)
{
u8 i,addr;
if (X==0) {addr=0x80;}
else if (X==1) {addr=0x90;}
delay_ms(5);
// Write_LCD_Command(0x34); // 扩充指令
// Write_LCD_Command(0x36); // 打开绘图指令
Draw_Clear(); // 清屏
//Draw_Update();
}
/*********************************************************
液晶显示屏LCD12864驱动解析
![液晶显示屏LCD12864驱动解析](https://img.taocdn.com/s3/m/164d54d7ce2f0066f533225b.png)
液晶显示器LCD12864驱动程序#include<msp430g2553.h>#include "lcd12864.h"#include "typedef.h"#define cyCS BIT0 //P2.0,片选信号#define cySID BIT1 //P2.1,串行数据#define cyCLK BIT2 //P2.2,同步时钟#define cyPORT P2OUT#define cyDDR P2DIRvoid Write_8bits(u8 W_bits){u8 i;cyDDR |= cyCLK + cySID; //设置输出方向for(i = 0; i < 8; i++){if(( W_bits << i )&0x80){cyPORT |= cySID;}else{cyPORT &= ~cySID;}delay_ms(1);cyPORT |= cyCLK;delay_ms(1);delay_ms(1);cyPORT &= ~cyCLK;}}void w_1byte(u8 RS, u8 w_data){u8 H_Data,L_Data;u8 tmp_Data = 0xf8;cyDDR |= cyCS; //设置CS口为输出if(RS == 0) tmp_Data &= ~0x02;else tmp_Data |= 0x02;H_Data = w_data; //高位数据H_Data &= 0xf0;L_Data = w_data; //低位数据L_Data &= 0x0f;L_Data <<= 4;cyPORT |= cyCS;Write_8bits(tmp_Data);Write_8bits(H_Data);Write_8bits(L_Data);cyPORT &= ~cyCS;}void init_Lcd(void){cyDDR |= cyCLK + cySID + cyCS; //相应的位端口设置为输出delay_ms(10); //延时等待液晶完成复位w_1byte(0,0x30);delay_ms(1);w_1byte(0,0x02);delay_ms(5);w_1byte(0,0x0c);delay_ms(1);w_1byte(0,0x01);delay_ms(5);w_1byte(0,0x06);delay_ms(1);}//清屏void clear_lcd(void){delay_ms(1);w_1byte(0,0x01);delay_ms(5);}void lcd_pos(u8 x,u8 y)//定位{u8 pos;switch(x){case 1:pos=0x80;break;case 2:pos=0x90;break;case 3:pos=0x88;break;case 4:pos=0x98;break;default:pos=0x80;}pos += y;w_1byte(0,pos);}//显示汉字void Disp_HZ(const u8 * pt,u8 num){u8 i;for(i = 0;i < num*2;i++){w_1byte(1,*(pt++));}}//显示字符void Disp_Ch(const u8 ch){w_1byte(1, ch);}//汉字和字符混合显示void disp_lcd_str(u8 x, u8 y, const u8 *str, u8 len) {u8 i;lcd_pos(x, y);for(i = 0;i < len && *str; ){if(*(str) >= 0x80){w_1byte(1,*(str++));w_1byte(1,*(str++));i++;i++;}else{w_1byte(1,*(str++));i++;}}}。
可串行驱动LCD12864的应用之一……基础篇
![可串行驱动LCD12864的应用之一……基础篇](https://img.taocdn.com/s3/m/add25aa20029bd64783e2c05.png)
在网上搜了一下,ST7920控制器的LCD产品可以提供8位,4位并行和串行接口可选,并行的控制接口的LCD较多,前面的贴子也介绍过,我们在这儿不说了,这儿我们讲的是串口控制LCD12864。
买了块ST7920的LCD12864,这个好像价格便宜些,52元。
是不是显示效果要差些呢。
再来个背面:买来后也就只有个管脚说明:(我只说串口的定义)工作于串行模式时的引脚定义:PIN1------------ GND 电源-,一般接0V。
PIN2------------VDD 电源+,一般接5V。
PIN3------------V0 对比度调整端。
PIN4------------CS,片选PIN5------------SID,数据PIN6------------SCK,脉冲PIN7------------NC,不连接PIN8------------NC,不连接PIN9------------NC,不连接PIN10-----------NC,不连接PIN11-----------NC,不连接PIN12-----------NC,不连接PIN13-----------NC,不连接PIN14-----------NC,不连接PIN15-----------PSB 并行:PSB=1,可以接VCC;串行:PSB=0,一般接GNDPIN16 ----------NC,不连接PIN17-----------RST,模块复位(低电平有效)PIN18 ----------NC,不连接PIN19 ----------LED+ ,背光+,一般接5V。
PIN20 ----------LED- ,背光-,一般接GND。
在网上搜了关于ST7920的资料,跟据图上的接法串行驱动只要四根线和S52连接:PIN5----SID 数据线PIN6----SCLK 时钟脉冲线PIN1----VSS(GND)接地PIN2----VDD(Vcc)电源+5V我先试了背光,也就是第20脚接地,19脚通过电流表接电源+5V,测得背光电流为30mA,背光很亮。
LCD12864_ST7920串行测试程序
![LCD12864_ST7920串行测试程序](https://img.taocdn.com/s3/m/d4cbd205eff9aef8941e06fa.png)
/*****n(ms)延时子程序*****/
void delayms(uint t) //约延时n(ms)
{
uint i;
while(t--)
{
for(i=0;i<125;i++);
}
}
/*****串行发送一个字节*****/
void SendByte(uchar Dbyte)
}
return ((0xf0&temp1)+(0x0f&temp2));
}
/*****检测LCD忙状态*****/
void CheckBusy( void )
{
do SendByte(0xfc); //11111,RW(1),RS(0),0
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80
/*****汉字地址表*****/
uchar code addr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
SendByte(0xf0&Cbyte); //高四位
SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)
CS = 0;
}
/*****写数据*****/
void Lcd_WriteData(uchar Dbyte )
void LcdFill_Level()
{
uchar x,y,i;
uchar k;
ST7920驱动的12964液晶显示步骤
![ST7920驱动的12964液晶显示步骤](https://img.taocdn.com/s3/m/f8d1a40979563c1ec5da7168.png)
写液晶程序的步骤:1、先认真看12864液晶的技术资料(不要放过每一个字,每一个字都很关键)2、特别是指令说明,时序图,时序参数这是至关重要的一点。
3、开始写程序了,说白了液晶是另一种芯片,只是现在用单片机来驱动它吧了。
来驱动12864液晶显示,首先要初始化(就是在驱动12864液晶前做好准备工作就相当于,启动单片机定时器一样做好初始化准备工作)1,当模块在接受指令前,微处理必须先确认模块内部处于非忙碌状态,即读取BF的标志,当BF为0方可接受新的指令。
初始化过程:延时几MS,1,void init_lcd(void) //这是初始化子程序4、{5、rst=1;//6、psb=0;//串口驱动; PSB=1,并口驱动7、Write_Cmd (,0x30); /*30---基本指令动作,写扩充功能指令*/8、Write_Cmd (,0x01); /*清屏,地址指针指向00H*/9、delay(100);10、Write_Cmd (0x06);11、/*光标的移动方向,进入点设定,I/D=1光标右移,S=1文字移动有效*/12、Write_Cmd (0x0c); /*开显示,关游标*/0x0f就是开显示,开游标13、}14、写指令过程:看到时序图可知,当RS=0时,R/W=0时,且在E=1时再变为E=0的下降沿把准备好的指令码送给12864液晶芯片15、void Write_Cmd(unsigned char Cmd)写指令子程序16、{17、Check_Busy();//BF是否等于0,因为等于1时是写不进去的,直等到为018、RS=0;19、RW=0;20、E=1;21、DataPort=Cmd;//这就把以准备的指令数送进去了22、DelayUs2x(5);23、E=0;24、DelayUs2x(5);25、}26、写数据过程:看到上面的时序图可知,只有当RS=1时,R/W=0时,E=1到0时才能把数据写进去。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
完整功能版的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)。