带字库12864液晶详解(5)

2019-05-18 21:48

{

wr_lcd (comm,0x34); //扩充指令操作。 wr_lcd (comm,y+j*2); wr_lcd (comm,x+i); wr_lcd (comm,0x30); wr_lcd (dat,data1); wr_lcd (dat,data1); }

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

wr_lcd (comm,0x34); wr_lcd (comm,y+j*2+1); wr_lcd (comm,x+i); wr_lcd (comm,0x30); wr_lcd (dat,data2); wr_lcd (dat,data2); } }

x=x2; }

wr_lcd (comm,0x36); }

/*-----------------------------------------------*/ /*---------------显示汉字或字符----------------*/ void chn_disp (uchar code *chn) {

uchar i,j;

wr_lcd (comm,0x30); wr_lcd (comm,0x80); for (j=0;j<4;j++) {

for (i=0;i<16;i++)

wr_lcd (dat,chn[j*16+i]); } }

//**********************************************

/*-----------------------------------------------*/

//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.我发现如果固定yo的值为0x80,

//那么再去改变x0的值的话,x0的值是多少就在那一块反白,反白的范围应该是32*16。但前提是 //x1=2,y1=16.

21

//如果x1=1,y1=8. 那么反白的范围应该是16*8。

void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) {

uchar i,j;

for(j=0;j

for(i=0;i

wr_lcd (comm,0x34); wr_lcd (comm,y0+j); wr_lcd (comm,x0+i); wr_lcd (comm,0x30);

wr_lcd (dat,data1); //写数据到RAM.这类语句都是一个道理。 wr_lcd (dat,data2); } }

wr_lcd (comm,0x36); }

//***************************************************** /*--------------清DDRAM------------------*/ void clrram (void) {

wr_lcd (comm,0x30);

wr_lcd (comm,0x01); //清除显示指令。 delay (180); }

/*---------------------------------------*/

/*-------------下半屏显示图形--------------*/

//显示图形的过程是这样的:首先先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址) //然后在每个地址里写上16位的数据。 void img_disp1 (uchar code *img) {

uchar i,j;

for(j=0;j<32;j++) {

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

wr_lcd (comm,0x34); wr_lcd (comm,y+j); wr_lcd (comm,x2+i);

22

wr_lcd (comm,0x30);

wr_lcd (dat,img[j*16+i*2]); wr_lcd (dat,img[j*16+i*2+1]); } }

wr_lcd (comm,0x36); //扩充功能指令,开绘图开关。 }

//******************************************* /*----------------显示图形-----------------*/ void img_disp (uchar code *img) {

uchar i,j;

for(j=0;j<32;j++) {

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

wr_lcd (comm,0x34); //扩充指令操作。 wr_lcd (comm,y+j); //设定绘图RAM地址。 wr_lcd (comm,x1+i); //同上。

wr_lcd (comm,0x30); //基本指令操作。 wr_lcd (dat,img[j*16+i*2]); wr_lcd (dat,img[j*16+i*2+1]); } }

for(j=32;j<64;j++) {

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

wr_lcd (comm,0x34); wr_lcd (comm,y+j-32); wr_lcd (comm,x2+i); wr_lcd (comm,0x30);

wr_lcd (dat,img[j*16+i*2]); wr_lcd (dat,img[j*16+i*2+1]); } }

wr_lcd (comm,0x36); }

//********************************************** /*------------------主程序--------------------*/ void main () {

23

SP=0x5f; init_lcd (); while (1) {

lat_disp (0x00,0x00); delay1(1000);

chn_disp (tab1); delay1(1000);

con_disp (0xff,0xff,0x81,0x80,1,8); delay1 (4000); clrram();

lat_disp (0x00,0x00); img_disp1 (tab32); delay1 (4000); clrram();

img_disp (tab5); delay1 (8000); } }

12864液晶 串行口传输程序-C语言

2007年09月20日 星期四 下午 03:49 //12864(ST7920)串口C51程序 #include #include

sbit E_CLK =P3^2;//clock input 同步时钟输入端

sbit RW_SID=P3^1;//data input/output 串行数据输入、输出端

void delay(unsigned int n) {

unsigned int i; for(i=0; i

//串行发送一字节数据

24

void SendByte(unsigned char dat) {

unsigned char i; for(i=0;i<8;i++) {

E_CLK=0;

if(dat&0x80)RW_SID=1;else RW_SID=0;

E_CLK=1; dat=dat<<1; } }

//串行接收一字节数据

unsigned char ReceieveByte(void) {

unsigned char i,d1,d2; for(i=0;i<8;i++) {

E_CLK=0;delay(100); E_CLK=1;

if(RW_SID)d1++; d1=d1<<1; } for(i=0;i<8;i++) {

E_CLK=0;delay(100); E_CLK=1;

if(RW_SID)d2++; d2=d2<<1; }

return (d1&0xF0+d2&0x0F); }

//写控制命令

void SendCMD(unsigned char dat) {

SendByte(0xF8);//11111,00,0 RW=0,RS=0 志

SendByte(dat&0xF0);//高四位

SendByte((dat&0x0F)<<4);//低四位 }

25

同步标


带字库12864液晶详解(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版六年级上册语文期末考试试卷(二)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: