{
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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)