#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);
}