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的地址计数器归零
}*/
这个问题有两种回答:1,你问的不对。你其实想问的是,怎么使用串口,修改12864屏幕上的内容。这个网上有很多程序。随便看一下就好。
2,你沉迷于技术了。模拟本身提供的是八位的输出,你偏偏要自己用UART串口去驱动。这就好比:是要用到PWM的时候,明明单片机内部已经有了集成的模块。配置定时器就可以输出完美的PWM。可你觉得,这样太简单了。于是,你用两个定时器去实现:一个定时,一个控制输出频率。
效果不好还不错,而且浪费资源。
再举个极端的例子,你想实现一个很简单的for循环,使用高级的语言(就C语言来说,一下就好),
但是,你偏偏要用二进制0,1来写。
你觉得,这样才牛B,你才是比较厉害的人。
--------------------------------
喜欢请点赞,不喜欢,另说
俺有串行方式的.供你参考./**********************************************
系统名称:12864串行驱动程序
创建人:w418781840 日期:2008,7,18
功能描述:
***********************************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define com 0
#define dat 1
sbit cs =P2^4
sbit sid=P2^2
sbit sck=P2^0
/*********************************************
函数名称:
函数功能:
**********************************************/
void delay1ms(uint x)
{
uint i,j
for(i=0i<xi++)
for(j=0j<120j++)
}
/*********************************************
函数名称:写字节函数
函数功能:
**********************************************/
void w_12864byte(uchar byte)
{
uchar i
for(i=0i<8i++)
{
sck=0
byte<<=1
sid=CY
sck=1
}
}
/*********************************************
函数名称:读字节函数
函数功能:
**********************************************/
uchar r_12864byte(void)
{
uchar i,temp1,temp2
temp1 = 0
temp2 = 0
for(i=0i<8i++)
{
temp1=temp1<<1
sck = 0
sck = 1
sck = 0
if(sid) temp1++
}
for(i=0i<8i++)
{
temp2=temp2<<1
sck = 0
sck = 1
sck = 0
if(sid) temp2++
}
return ((0xf0&temp1)+(0x0f&temp2))
}
/*********************************************
函数名称:检测忙函数
函数功能:
**********************************************/
void c_12864busy( void )
{
do
w_12864byte(0xfc) //11111,RW(1),RS(0),0
while(0x80&r_12864byte())
}
/*********************************************
函数名称:写入函数
函数功能:
**********************************************/
void w_12864(bit dat_com,uchar byt)
{
uchar temp
if(dat_com==0) //为零,写入指令
temp=0xf8//11111,RS(0),RW(0),0
else//否则,写入数据
temp=0xfa//11111,RS(1),RW(0),0
cs=1
c_12864busy()
w_12864byte(temp)
w_12864byte(byt&0xf0)//写入高四位
w_12864byte(byt<<4) //写入低四位
cs=0
}
/*********************************************
函数名称:初始化函数
函数功能:
**********************************************/
void init_12864(void)
{
w_12864(com,0x30)//基本指令功能.
w_12864(com,0x0c)//显示打开,关光标,反白关.
w_12864(com,0x01)//清屏指令.
w_12864(com,0x06)//AC自动加一
}
/*********************************************
函数名称:绘图函数
函数功能:
**********************************************/
void w_12864bmp(uchar *puts)
{
uint x=0
uchar i,j
w_12864(com,0x34)//扩展指令
w_12864(com,0x36)//打开绘图
for(i=0i<32i++)
{
w_12864(com,0x80|i)//列32行,双屏结构中上半屏
w_12864(com,0x80)//X地址坐标,自动加1.
for(j=0j<16j++) //16*8=256
w_12864(dat,puts[x++])
}
for(i=0i<32i++)
{
w_12864(com,0x80|i)
w_12864(com,0x88)//下半屏
for(j=0j<16j++)
w_12864(dat,puts[x++])
}
}
/*********************************************
函数名称:清屏函数
函数功能:
**********************************************/
void lcd_clear(void)
{
w_12864(com,0x30)
w_12864(com,0x01)
}
/*********************************************
函数名称:
函数功能: 清图形函数
**********************************************/
void BMP_clear( void )
{
uchar i,j
w_12864(com,0x34) //8Bit扩充指令集,即使是36H也要写两次
w_12864(com,0x36) //绘图ON,基本指令集里面36H不能开绘图
for(i=0i<32i++)//12864实际为256x32
{
w_12864(com,0x80|i) //行位置
w_12864(com,0x80) //列位置
for(j=0j<32j++)//256/8=32 byte
w_12864(dat,0)
}
}
/*********************************************
函数名称:
函数功能: 清文本函数
**********************************************/
void TXT_Clear( void )
{
uchar i
w_12864(com,0x30) //8BitMCU,基本指令集合
w_12864(com,0x80) //AC归起始位
for(i=0i<64i++)
w_12864(dat,0x20)
}
/*********************************************
函数名称:
函数功能:
**********************************************/
void w_12864Poss(uchar x,uchar y,uchar *buff)
{
uchar addr,i=0
if(x==1)addr=0x80
if(x==2)addr=0x90
if(x==3)addr=0x88
if(x==4)addr=0x98
addr=addr+y
w_12864(com,0x30)
w_12864(com,addr)
while(buff[i]!='\0')
{
w_12864(dat,buff[i])
i++
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)