#include"stc12c5a.h" sbit BLED=P2^2; //背光控制 void spi_init(void); //SPI初始化子程序 void delay(unsigned int us10); //延时子程序 void sendspi(unsigned char spidata,unsigned char read,unsigned char dat); //显示数据发送子程序 void lcd_init_usual(void); //液晶初始化子程序 void set_position(unsigned char position); //确定光标位置子程序 void data_write(unsigned char data1); //显示单个字符子程序 void chinese_series(unsigned char *series); //显示汉字字符串子程序 void main (void) { spi_init(); lcd_init_usual(); BLED=0; set_position(0x82); chinese_series("单片机"); data_write('0'); data_write('1'); while(1); } void spi_init(void) //SPI初始化子程序 { AUXR1=0x20; //将SPI转移到P4口 SPI初始化 SPCTL=0xd3; //SPI使能,主机模式,/SS无关,先发高(很关键很重要) SPSTAT=0xC0; //清传输完成标志和写冲突标志 } void delay(unsigned int us10) //延时子程序 { while(us10--); } void sendspi(unsigned char spidata,unsigned char read,unsigned char dat) //显示数据发送子程序 { unsigned char cmd,dat1,dat2,spi1_status=0; cmd=(0xf8|read|(dat<<1)); SPDAT=cmd; while(spi1_status==0) //等起始命令传输完毕 { spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //写1清SPIF标志位 spi1_status=0; dat1=spidata&0xf0; SPDAT=dat1; while(spi1_status==0) //等高4位数据传输完毕 { spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //写1清SPIF标志位 spi1_status=0; dat2=(spidata<<4)&0xf0; SPDAT=dat2; while(spi1_status==0) //等低4位传输完毕 { spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //写1清SPIF标志位 } void lcd_init_usual(void) //液晶初始化子程序 { sendspi(0x30,0,0); //基本指令集 sendspi(0x01,0,0); //清显示,地址复位 delay(2000); sendspi(0x0e,0,0); //整体显示,开游标,关位置 sendspi(0x06,0,0); //游标方向及移位 } void set_position(unsigned char position) //确定光标位置子程序 { sendspi(position,0,0); } void data_write(unsigned char data1) //显示单个字符子程序 { sendspi(data1,0,1); } void chinese_series(unsigned char *series) //显示汉字字符串子程序 { for(series;*series!=0;series++) data_write(*series); }