液晶12864的显示程序

液晶12864的显示程序,第1张

/****************打点******************/

void point(uchar x,uchar y)

{

uchar y1,hang,lie,msb_data,lsb_data,temp=0x01

if(y1!=y)

{

msb_data=0

lsb_data=0

}

y1=y

if(y<32)

{

hang=0x80+y

lie=0x80

}

if(y>31)

{

hang=0x80+y-32

lie=0x88

}

if(y>63)//return

{

lcm_com(0x80)

_nop_()

hanzi("温度超出显示范轿扰围")

while(1)

flash()

}

lie=lie+x/16

if(x%16==0)

{

msb_data=0

lsb_data=0

}

if(x%16<8)

{

msb_data=msb_data|(temp<<(7-x%16))

lsb_data=0x00|lsb_data

}//保留以前的数据,把第x个点亮闹陪

if(x%16==8)

{

msb_data=msb_data|0x00

lsb_data=lsb_data|0x80

}

if(x%16>8)大于24小于32

{

msb_data=msb_data|0x00

lsb_data=lsb_data|(temp<<(15-x%16))

}

lcm_com(0x34)//扩闭弯旦充指令集

lcm_com(hang)

lcm_com(lie)

lcm_dat(msb_data)

lcm_dat(lsb_data)

lcm_com(0x36)//绘图显示开

}

if(a&(1<<(i-1))) RW_SID=1

表示1左移i-1位再于a进行与运算,i=8的情况下i-1=7,1左移7位就是0x80。再跟a与运算(全1出1有0出0)即可获得a的最高位。以此类推可以取出a的所有位。

if(RW_SID==1) dat|=(1<<(i-1))

当RW_SID端口为1时把1左移i-1位跟dat或运算。i=8的情况下1左移i-1位正好是0x80,再经过与缺扰运算保存最高位,循环移位再或伏迅旦运算就能读取到全部位保存在dat里面

可以写成

//写部分

if(a&0x80)//取出a的最昌薯高位

RW_SID=1//如果是1则输出1

else

RW_SID=0//否则输出0

a<<=1//a整体左移,让第7位补到最高位的位置,循环取出

E_CLK=1

delay(100)

E_CLK=0

delay(100)

//读部分

E_CLK=1

delay(100)

dat<<=1//接收1次数据后左移。第一次为0的情况影响数据

if(RW_SID)//当端口为高的时候

dat++//dat+1相当于dat|=1 当端口为0的时候默认左移最低位是补零的,所以不用管

E_CLK=0//循环8次后第一次接受到的数据就在最高位了

delay(100)

效果是一样的相对来说比较好理解


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8235645.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存