
sbit SID=P2^1//12864数据
sbit SCLK=P2^2//12864时钟
init()
{
write(0,0x30) //8 位介面,基本指令耐塌集
write(0,0x0c) //显示打开,光标关,反白关
write(0,0x01) //清屏,将DDRAM的地址计数器归零
delaynms(10)
write(0,0x80)for(i=0i<16i++) write(1,datas11[i])
write(0,0x90)for(i=0i<16i++) write(1,datas2[i])
write(0,0x88)for(i=0i<16i++) write(1,datas3[i])
write(0,0x98)for(i=0i<16i++) write(1,datas4[i])
}
/**********************12864*************************/
void delaynms(unsigned int di) //延时
{
unsigned int da,db
for(da=0da<dida++)
for(db=0db<10db++)
}
void sendbyte(unsigned char bbyte) //发送一个字节
{
unsigned char i
for(i=0i<8i++)
{
SID=bbyte&0x80//取出最高位
SCLK=1
SCLK=0
bbyte<<=1//左移
}
}
void write(bit start, unsigned char ddata) //写指令或数据
{
unsigned char start_data,Hdata,Ldata
if(start==0) start_data=0xf8 //写指令
else start_data=0xfa //写数据
Hdata=ddata&0xf0 //取高四位
Ldata=(ddata<<4)&0xf0 //取低四位
sendbyte(start_data) //发送起始信号
delaynms(5)//延时是必须的
sendbyte(Hdata) //发送高四位
delaynms(1) //延时是必须的
sendbyte(Ldata) //发送低四位
delaynms(1) //延时是必须的
}
/*void lcdinit(void) //初始化LCD
{
delaynms(10)//启动等待,等LCM讲入工作状态
//PSB=0/昌神圆/串口驱动模式
// RESET=0delaynms(1)RESET=1// 复位LCD
// CS=1
write(0,0x30) //8 位介面,基本指令集
write(0,0x0c) //显示打开,光标关,反白关
write(0,0x01) //清屏,将DDRAM的地址计数器归零
}*/
#include <reg51.h>#define uchar unsigned char
#define uint unsigned int
sbit SCLK = P3^1//液晶时钟线
sbit SDAT = P3^0//液晶数据线
void SEND_BYTE_LCD(uchar data_to_lcd)
void SEND_DATA_SER(bit codeordata, uchar SERIAL_DATA)//code 为1
void wrlcd(uchar HANG, uchar LIE, uchar *SENTENCE)
void lcdinit(void)
//void delay(uchar deltime)
/*********************************************************/
//延时程序
/********************************************************/
void delay(uint deltime)
{
uchar i
uint j
for (j = 0j <deltimej++)
for (i = 0i <255i++)
}
/*********************************************************
液晶写命令子程序
**********************************************************/
void SEND_BYTE_LCD(uchar data_to_lcd)
{
uchar j
for (j = 0j <8j++)
{
SDAT = (bit) (data_to_lcd &0x80)
SCLK = 0
SCLK = 0
SCLK = 0
SCLK = 0
SCLK = 0
SCLK = 1
SCLK = 1
SCLK = 1
SCLK = 1
SCLK = 1
data_to_lcd <<= 1
SCLK = 0
SCLK = 0
SCLK = 0
SCLK = 0
SCLK = 0
}
}
void SEND_DATA_SER(bit codeordata, uchar SERIAL_DATA)
{
uchar first, second, third
if (codeordata)
{
first = 0xf8
}
else
{
first = 0xfa
}
second = SERIAL_DATA &0xf0
third = SERIAL_DATA <<4
SEND_BYTE_LCD(first)
SEND_BYTE_LCD(second)
SEND_BYTE_LCD(third)
}
void wrlcd(uchar HANG, uchar LIE, uchar *SENTENCE)
{
uchar position
position = HANG + LIE
SEND_DATA_SER(1, position)
delay(2)
while (*SENTENCE)
{
SEND_DATA_SER(0, *SENTENCE++)
}
}
void lcdinit(void)
{
delay(100)
SEND_DATA_SER(1, 0X30)
delay(4)//基本功能设置
//SEND_DATA_SER(1,0X06)delay(2)
SEND_DATA_SER(1, 0X0C)
delay(4)
SEND_DATA_SER(1, 0X01)
delay(40)
SEND_DATA_SER(1, 0X02)
delay(40)
// SEND_DATA_SER(1,0X80)delay(2)
delay(10)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)