液晶程序.docx
- 文档编号:7765898
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:10
- 大小:17.28KB
液晶程序.docx
《液晶程序.docx》由会员分享,可在线阅读,更多相关《液晶程序.docx(10页珍藏版)》请在冰豆网上搜索。
液晶程序
/**********液晶12864程序***************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitp_csa=P1^4;
sbitp_csb=P1^5;
sbitp_di=P1^0;
sbitp_rw=P1^1;
sbitp_e=P1^2;
sbitbusy=P0^7;
chardatamov=0;//滚动显示的变量
ucharcodeimage[][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x10,0x08,0x04},
{0x04,0x02,0xF2,0x1E,0x02,0x1B,0xE7,0x03,0x07,0x1B,0xE2,0x02,0x02,0x02,0x04,0x04},
{0x08,0x10,0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//64*8左屏幕的一页
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//128*8一页(包括左右屏)
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x03,0x00,0x00,0x00,0x84,0x46,0xC6},
{0x4E,0x8C,0x1D,0x30,0x00,0x00,0x01,0x00,0x00,0x00,0x31,0x1C,0x8C,0x4E,0xC6,0x46},
{0x84,0x00,0x00,0x00,0x00,0x03,0x3C,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x80,0x7C,0x1E,0x8E,0x0F,0x0F,0x0F,0x8E,0x1E,0x7C,0x80,0x00,0x00,0x00},//左第二页
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x28,0x44,0x44,0x44,0x44,0x44,0x4C},
{0x7C,0xCC,0x44,0x44,0x04,0x40,0x44,0x48,0x90,0x60,0x60,0x40,0x40,0x40,0x40,0x00},
{0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x3C,0xC0,0x00,0x00,0x00,0x00,0x01,0x01},
{0x01,0x80,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x81,0x01,0x01},
{0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x07,0x78,0x80,0x01,0x20,0x28,0x20,0x01,0x80,0x78,0x07,0x00,0x00,0x00},//左第三页
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x3C,0x44,0x54,0x44,0x3C,0x04},
{0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x3C,0x44,0x54,0x44,0x3C,0x04,0x04},
{0x04,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x08,0x08,0x10,0x20},
{0x20,0x40,0x41,0x42,0x42,0x84,0x84,0x84,0x84,0x84,0x42,0x42,0x41,0x40,0x20,0x20},
{0x10,0x08,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00},//左第四页
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}/*"E:
\工作文件\51工作\128-64LCD显示\LCD图形2.bmp",0*/
};
//江(0)苏
(1)省
(2)激(3)光(4)研(5)究(6)所(7)
ucharcodehz[][16]={
{0x10,0x60,0x01,0xC6,0x30,0x00,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0x00},
{0x04,0x04,0x7E,0x01,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x00},/*"江",0*/
{0x04,0x04,0x44,0x44,0x44,0x5F,0x44,0xF4,0x44,0x5F,0x44,0xC4,0x04,0x04,0x04,0x00},
{0x00,0x40,0x4C,0x27,0x10,0x0C,0x07,0x01,0x20,0x40,0x40,0x3F,0x00,0x02,0x0C,0x00},/*"苏",1*/
{0x00,0x10,0x90,0x88,0x86,0xC0,0xC0,0xBF,0xA0,0x90,0x90,0x8A,0x84,0x18,0x00,0x00},
{0x01,0x01,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0xFF,0x00,0x00,0x00},/*"省",2*/
{0x10,0x21,0x86,0x60,0x7C,0x56,0xD5,0x54,0x7C,0x20,0xF8,0x17,0x90,0x70,0x10,0x00},
{0x04,0x7C,0x43,0x21,0x19,0x07,0x45,0x85,0x7D,0x20,0x13,0x0C,0x33,0x60,0x20,0x00},/*"激",3*/
{0x00,0x40,0x42,0x44,0x5C,0xC8,0x40,0x7F,0x40,0xC0,0x50,0x4E,0x44,0x60,0x40,0x00},
{0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00},/*"光",4*/
{0x02,0xC2,0xF2,0x4E,0xC2,0x02,0x40,0x42,0xFE,0x42,0x42,0x42,0xFE,0x42,0x42,0x00},
{0x01,0x00,0x3F,0x10,0x9F,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"研",5*/
{0x00,0x4C,0x24,0x94,0x84,0x84,0xF5,0x86,0x84,0x84,0x14,0x24,0x44,0x0C,0x04,0x00},
{0x00,0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00},/*"究",6*/
{0x00,0xFE,0x12,0x12,0x11,0xF1,0x01,0x00,0xFE,0x22,0x22,0x21,0xE1,0x21,0x21,0x00},
{0x40,0x3F,0x01,0x01,0x81,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0xFF,0x00,0x00,0x00}/*"所",7*/
};
//网址:
w(0)w
(1)w
(2).(3)j(4)s(5)l(6)a(7)s(8)e(9)r(10).(11)c(12)n(13)
ucharcodezf[][16]={
{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",0*/
{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",1*/
{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",2*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",3*/
{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",4*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",5*/
{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",6*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",7*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",8*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",9*/
{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",10*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",11*/
{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",12*/
{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",13*/
};
/*忙判别*/
voidlcd_busy(void)
{
p_di=0;
p_rw=1;
P0=0xff;//读数据
while
(1)
{p_e=1;
if(!
busy)break;//忙标志为0了,则跳出循环
p_e=0;
}//比汇编灵活,汇编类似于用if判断,自己做循环
p_e=0;
}
/*设置xy*/
voidset_xy(ucharx,uchary)
{
if(x>=64)
{p_csa=0;p_csb=1;x=x-64;}//调整x值
else
{p_csb=0;p_csa=1;}//如果超过一页了则换屏显示,一页一共64行
lcd_busy();//不忙了,再送数据
p_di=p_rw=0;P0=0x40|x;p_e=1;p_e=0;//送的地址是用最左边的地址和x按位或而取得
lcd_busy();
p_di=p_rw=0;P0=0xb8|y;p_e=1;p_e=0;//送页地址采用同样的方法
}
//写数据子程序
voidlw(ucharx,uchary,uchardd)
{
set_xy(x,y);
lcd_busy();
p_di=1;p_rw=0;P0=dd;p_e=1;p_e=0;
}
/*显示初始化子程序*/
voidlcd_init(void)
{
ucharx,y;
/*开显示*/
p_e=p_di=p_rw=0;//写指令,使能清0
p_csa=p_csb=0;//片选清0
p_csa=1;P0=0x3f;p_e=1;p_e=0;p_csa=0;//写左屏幕,开显示
p_csb=1;P0=0x3f;p_e=1;p_e=0;p_csb=0;//写右屏幕,开显示
/*0行开始显示*/
p_csa=1;lcd_busy();p_di=p_rw=0;P0=0xc0;p_e=1;p_e=0;p_csa=0;//左屏幕从0行开始显示
p_csb=1;lcd_busy();p_di=p_rw=0;P0=0xc0;p_e=1;p_e=0;p_csb=0;//右屏幕从0行开始显示
for(y=0;y<8;y++)
{
for(x=0;x<128;x++)lw(x,y,0);//清屏幕
}
}
//显示汉字,fb==1:
反白显示,x为列,y为页,p为指针(数据的地址)
voiddisp_hz(ucharx,uchary,char*p,ucharfb)
{
uchari,dd;
for(i=0;i<16;i++)//i为一个字的宽度.
{
dd=*(p+i);//取要显示的数据
if(fb)dd=255-dd;//反白就是让它每个位取反
lw(x+i,y,dd);
dd=*(p+16+i);//让它取下一行数组里的数
if(fb)dd=255-dd;
lw(x+i,y+1,dd);
}
}
//显示字符,fb==1:
反白显示
voiddisp_zf(ucharx,uchary,char*p,ucharfb)
{
uchari,dd;
for(i=0;i<8;i++)//i为一个字的宽度.
{
dd=*(p+i);//取要显示的数据
if(fb)dd=255-dd;//反白就是让它每个位取反
lw(x+i,y,dd);
dd=*(p+8+i);//让它取下一行数组里的数
if(fb)dd=255-dd;
lw(x+i,y+1,dd);
}
}
//显示图象128*32,fb==1:
反白显示
voiddisp_image(ucharx,uchary,uchar*p,ucharfb)
{
uchari,dd;
for(i=0;i<64;i++)//i为一个字的宽度.
{
dd=*(p+i);//取要显示的数据
if(fb)dd=255-dd;//反白就是让它每个位取反
lw(x+i,y,dd);
dd=*(p+128+i);//让它取下一行数组里的数
if(fb)dd=255-dd;
lw(x+i,y+1,dd);
dd=*(p+256+i);//取要显示的数据
if(fb)dd=255-dd;//反白就是让它每个位取反
lw(x+i,y+2,dd);
dd=*(p+384+i);//让它取下一行数组里的数
if(fb)dd=255-dd;
lw(x+i,y+3,dd);
}
}
/*延时子程序*/
voiddelay()
{
datauinti,j;
for(i=0;i<255;i++)
{for(j=0;j<255;j++);}
}
/*滚动子程序*/
mov_line(chari)
{
p_csa=1;lcd_busy();p_di=p_rw=0;P0=0xc0|i;p_e=1;p_e=0;p_csa=0;//左屏幕从i行开始显示
p_csb=1;lcd_busy();p_di=p_rw=0;P0=0xc0|i;p_e=1;p_e=0;p_csb=0;//右屏幕从i行开始显示
}
/*采用中断*/
voidtimer0()interrupt1using0
{//T/C0中断服务程序入口
//一个中断时间太短了,我们采用软件延时,利用一个全局变量TIMER来控制时间长短.
TIMER++;
if(TIMER==255){
mov+=1;
if(mov==64)mov=0;
mov_line(mov);
}
TH0=-(1/256);
TL0=-(1%256);//装载记数初值
}
/*主程序,本人的第一个C51程序!
*/
voidmain()
{
uchari,j,k,p_i,p_k,p_ii;//i为列,j为页,k为二维数组的行,p_i,p_ii为切换左右屏幕显示的变量,p_k为取字模位置的变量调整
lcd_init();//初始化LCD
TMOD=0x01;//定时器方式1
TH0=-(1/256);
TL0=-(1%256);//装载记数初值
EA=1;
ET0=1;//开中断,但是还没开定时器
/*先左屏幕显示,再通过+64而切换到右屏幕显示*/
for(p_i=p_ii=p_k=0;p_i<=64&&p_k<=1;p_i+=64,p_ii+=56,p_k++)
{
for(i=j=k=0;k<=6&&i<=48;k+=2,i+=16)
{
disp_hz(i+p_i,j,&hz[k+8*p_k][0],0);
}//显示汉字
for(i=8,j=2,k=0;k<=7&&i<=56;k++,i+=8)
{
disp_zf(i+p_ii,j,&zf[k+7*p_k][0],0);
}//显示字母,空一个字母来显示
disp_image(p_i,4,&image[4*p_k][0],0);
//显示图象
}
TR0=1;//启动定时器
do{}while
(1);//等待中断
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 液晶 程序