51单片机12864并行程序

51单片机12864并行程序,第1张

检查液晶屏察镇控制器的时序. *** 作命令卖没差码.初始化过程,还有硬件,上下拉电阻,既然中皮决定用并口,那么PSB就直接VDD,这样还能省一个IO口. 注意下面的程序中RS=0,RW=0,能同时为低吗? void write_command(uchar cmd)

{

check_busy()

rs=0

rw=0

en=0

P2=cmd

delay_4us()

en=1

delay_4us()

en=0

}

/***12864并行接口参考程序,控制器st7920*/

#include <reg51.h>

#include <intrins.h>

sbit RS = P3^0

sbit RW = P3^3

sbit E = P3^4

sbit PSB = P3^1 //串并口选择

sbit RES = P3^5

#define FIRST_ADDR 0 //定义字符/汉字显示起始位置

//延时子程序

void delay(unsigned int t)

{ unsigned int i,j

for(i=0i<ti++)

for(j=0j<10j++)

}

//测忙

void chk_busy()

{ RS=0

RW=1

E=1

while((P1&0x80)==0x80)

E=0

}

//读数据

unsigned char lcdrd()

{ unsigned char i

P3=0xFB

_nop_()

E=1

delay(5)

i=P1

_nop_()

E=0

return i

}

//写数据

void lcdwd(unsigned char dispdata)

{ chk_busy()

_nop_()

RS=1

RW=0

E=1

P1=dispdata

delay(5)

_nop_()

E=0

_nop_()

P1=0xff

}

//写指令代码

void lcdwc(unsigned char cmdcode)

{ chk_busy()

_nop_()

RS=0

RW=0

E=1

P1=cmdcode

delay(5)

_nop_()

E=0

_nop_()

P1=0xff

}

//初始化

void lcdreset()

{ delay(2000)

lcdwc(0x30) //选择基本指令集

lcdwc(0x30) //选择8bit数据流

delay(5)

lcdwc(0x0c) //开显示(无游标、肆返则不反白)

delay(5)

lcdwc(0x01) //清除显示,并且设定地址指针为00H

delay(5)

lcdwc(0x06) //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位

}

void hzkdis(unsigned char code *s)

{ while(*s>0)

{ lcdwd(*s)

s++

delay(500)

}

}

void hzklib()

{ lcdwc(0x80+FIRST_ADDR)

hzkdis("少小离家老大回,")

lcdwc(0x90+FIRST_ADDR)

hzkdis("乡音无改鬓毛衰。")

lcdwc(0x88+FIRST_ADDR)

hzkdis("儿童相见不相识裂棚,")

lcdwc(0x98+FIRST_ADDR)

hzkdis("笑问客从何处来。"世铅)

}

//整屏显示

//当ii=0时显示上面128×32

//当ii=8时显示下面128×32

void lcdfill(unsigned char disdata)

{ unsigned char x,y,ii

for(ii=0ii<9ii+=8)

for(y=0y<0x20y++)

for(x=0x<8x++)

{ lcdwc(0x36)

lcdwc(y+0x80) //行地址

lcdwc(x+0x80+ii)//列地址

lcdwc(0x30)

lcdwd(disdata)

lcdwd(disdata)

}

}

//当ii=0时显示上面128×32

//当ii=8时显示下面128×32

void lcdfill_upright(unsigned char disdata)

{ unsigned char x,y,ii

unsigned char i,f,k

for(ii=0ii<9ii+=8)

for(y=0y<4y++)

{ f=disdata

for(i=0i<8i++)

{ if((f&1)==1)

k=0xff

else

k=0

for(x=0x<8x++)

{ lcdwc(0x36)

lcdwc(y*8+i+0x80)

lcdwc(x+0x80+ii)

lcdwc(0x30)

lcdwd(k)

lcdwd(k)

}

f>>=1

}

}

}

main()

{ unsigned char i

i=0x55

RES=0

_nop_()

RES=1

while(1)

{ PSB=1

RW=0

lcdreset() //初始化LCD屏

lcdwc(0x01)

delay(1000)

lcdfill(0xff)

delay(6000)

lcdfill(i) //显示竖条

delay(6000)

lcdfill_upright(i) //显示横条

delay(6000)

lcdfill(0)

lcdwc(0x01)

delay(1000)

hzklib()

delay(4000)

i=~i

}

}


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

原文地址: http://outofmemory.cn/yw/8181391.html

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

发表评论

登录后才能评论

评论列表(0条)

保存