#LCD160212864编程PROTEUS仿真.docx
《#LCD160212864编程PROTEUS仿真.docx》由会员分享,可在线阅读,更多相关《#LCD160212864编程PROTEUS仿真.docx(17页珍藏版)》请在冰豆网上搜索。
#LCD160212864编程PROTEUS仿真
第九章LCD显示
本章主要介绍LCD1602,12864.
9.1LCD1602
图9.1:
LCD1602显示
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineportP0//DB0~DB7数据口
sbite=P2^2。
//使能
sbitrw=P2^1。
//读写
sbitrs=P2^0。
//数据/命令
sbitbusy=P0^7。
//检测忙
//延时
voiddelay(uintn>
{
uinti。
for(。
n>0。
n-->
for(i=200。
i>0。
i-->。
}
//判断是否忙
voidcheck(>
{
rs=0。
rw=1。
//读e=1;
port=0x00。
e=1。
while(busy>。
e=0。
}
//写指令
voidsend(ucharcommand>
{
check(>。
rs=0。
//指令
rw=0。
//写e=0;
port=command。
e=1。
_nop_(>。
_nop_(>。
e=0。
//写入指令
}
//写数据
voidwrite(uchardat>
{
check(>。
rs=1。
//数据
rw=0。
port=dat。
e=1。
_nop_(>。
_nop_(>。
e=0。
}
//光标位置
voidpos(uintp>
{
send(p|0x80>。
//第一行第一个0x80;
}
voidinit(>
{
send(0x38>。
//8位数据,双列,5*7字形
delay(1>。
send(0x0c>。
//开0x08关
delay(1>。
send(0x06>。
//地址增加一
delay(1>。
send(0x01>。
//清屏
delay(1>。
}
voidmain(>
{
inti=0,j=0。
ucharnum[]="abcdefghijklmnop"。
ucharstring[]="abcdefghijklmnop"。
init(>。
delay(10>。
pos(0>。
delay(1>。
//或者用i=0。
//此步不能省。
删除后会发现不能显示第一个数。
while(num[i]!
='\0'>write(num[i++]>,delay(1>。
i=0。
pos(0x40>。
//第二行0x80|0x40
delay(1>。
//delay可以显示
while(string[i]!
='\0'>write(string[i++]>,delay(1>。
while(1>。
}
9.2LCD12864
图9.2:
LCD12864显示
C程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineportP0//DB0~DB7数据口
sbite=P2^0。
//使能
sbitrw=P2^1。
//读写
sbitrs=P2^2。
//数据/命令
sbitcs2=P2^3。
//片选
sbitcs1=P2^4。
sbitbusy=P0^7。
//检测忙
ucharcodehz[][32]={
{0x00,0x20,0x20,0x10,0x08,0x8F,0xB4,0x44,0x44,0xA4,0x9C,0x04,0x00,0x00,0x00,0x00,
0x02,0x02,0x02,0x01,0x7F,0x42,0x42,0x42,0x42,0x42,0x42,0x7F,0x01,0x03,0x01,0x00},
//"各",0
{0x00,0xC0,0x30,0xEC,0x03,0x2A,0xC8,0x09,0x0A,0x0E,0x08,0xE8,0x48,0x08,0x00,0x00,
0x01,0x00,0x00,0x7F,0x20,0x20,0x20,0x27,0x20,0x30,0x2E,0x21,0x20,0x20,0x20,0x00},
//"位",1
{0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00},
//"学",2
{0x00,0x00,0x02,0x02,0x0A,0x12,0x22,0x62,0x02,0x82,0x82,0x42,0x02,0xFE,0x00,0x00,
0x00,0x00,0x04,0x0C,0x04,0x02,0x02,0x01,0x01,0x00,0x20,0x40,0x80,0x7F,0x00,0x00},
//"习",3
{0x00,0x00,0xF8,0x28,0x29,0x2E,0x2A,0xF8,0x28,0x2C,0x2B,0x2A,0xF8,0x00,0x00,0x00,
0x08,0x08,0x0B,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x0B,0x08,0x08,0x00},
//"单",4
{0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x18,0x10,0x00,
0x80,0x40,0x30,0x0F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x00,0x00,0x00,0x00},
//"片",5
{0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00},
//"机",6
{0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00},
//"的",7
{0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,
0x40,0x30,0x0F,0x00,0x20,0x40,0x3F,0x40,0x30,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00},
//"朋",8
{0x08,0x08,0x08,0x08,0x08,0xC8,0x7F,0x48,0x48,0x48,0x48,0xC8,0x08,0x08,0x08,0x00,
0x40,0x20,0x90,0x88,0x46,0x41,0x21,0x12,0x0C,0x0C,0x13,0x20,0x60,0xC0,0x40,0x00},
//"友",9
{0x80,0x40,0xF0,0x1C,0x03,0xF0,0x01,0x0E,0x04,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x3F,0x00,0x00},
//"们",10
{0x80,0x84,0x84,0x94,0xA4,0xC4,0x85,0x86,0x84,0xC4,0xA4,0x94,0x84,0x84,0x80,0x00,
0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00},
//"辛",11
{0x40,0x44,0x44,0x44,0x44,0x5F,0x44,0xF4,0x44,0x44,0x5F,0x44,0x44,0x44,0x44,0x00,
0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,0x00},
//"苦",12
{0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xF2,0x12,0x0A,0x0A,0x06,0x06,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
//"了",13
{0x02,0xFE,0x92,0x92,0x92,0xFE,0x12,0x11,0x12,0x1C,0xF0,0x18,0x17,0x12,0x10,0x00,
0x08,0x1F,0x08,0x08,0x04,0xFF,0x05,0x81,0x41,0x31,0x0F,0x11,0x21,0xC1,0x41,0x00},
//"联",14
{0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00,
0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00},
//"系",15
{0x08,0x08,0x08,0x08,0x08,0x08,0xF9,0x4A,0x4C,0x48,0x48,0xC8,0x08,0x08,0x08,0x00,
0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},
//"方",16
{0x00,0x08,0x88,0x88,0x88,0x88,0x88,0x08,0xFF,0x08,0x09,0x0E,0x0A,0x08,0x00,0x00,
0x00,0x20,0x60,0x30,0x1F,0x10,0x08,0x08,0x00,0x07,0x18,0x20,0x40,0x80,0x70,0x00},
//"式",17
}。
ucharcodenum[][16]={
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},
//"0",0
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},
//"1",1
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
//"2",2
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},
//"3",3
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},
//"4",4
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},
//"5",5
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},
//"6",6
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},
//"7",7
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},
//"8",8
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}//"9",9
}。
ucharcodesign[][16]={
{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},
//"!
",0
{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},
//":
",1
{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00}
//"Q",2
}。
//延时
voiddelay(uintn>
{
uinti。
for(。
n>0。
n-->
for(i=200。
i>0。
i-->。
}
//判断是否忙
voidcheck(>
{
rs=0。
rw=1。
//读e=1;
port=0x00。
e=1。
while(busy>。
e=0。
}
//写指令
voidsendcommand(ucharcommand>
{
check(>。
rs=0。
//指令
rw=0。
//写e=0;
port=command。
e=1。
e=0。
//写入指令
}
//写数据
voidwritedata(uchardat>
{
check(>。
rs=1。
//数据
rw=0。
port=dat。
e=1。
e=0。
}
//选屏幕0——全屏,1——左屏,2——右屏;
voidselect(uintn>
{
switch(n>
{
case0:
cs1=0。
cs2=0。
break。
//低电平选中
case1:
cs1=0。
cs2=1。
break。
//cs1左屏
case2:
cs1=1。
cs2=0。
break。
//cs2右屏
}
}
//页
voidsetpage(ucharpage>
{
page=page&0x07。
page=page|0xb8。
sendcommand(page>。
}
//列
voidsetcolumn(ucharcolumn>
{
column=column&0x3f。
column=column|0x40。
sendcommand(column>。
}
//起始行
voidsetline(ucharline>
{
line=line&0x3f。
line=line|0xc0。
sendcommand(line>。
}
//屏幕开关显示0——关,1——开;
voidseton(uintn>
{
n=n|0x3e。
sendcommand(n>。
}
//清屏0——全屏,1——左屏,2——右屏;
voidclear(uintn>
{
uchari,j。
select(n>。
for(i=0。
i<8。
i++>
{
setpage(i>。
setcolumn(0>。
for(j=0。
j<64。
j++>
writedata(0>。
//置0清空
}
}
//初始化
voidinit(>
{
check(>。
seton(1>。
clear(0>。
setline(0>。
}
//显示汉字16*16显示
voidshow16(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str>
{
uchari,j。
select(screen>。
j=0。
setpage(page>。
setcolumn(column>。
for(i=0。
i<16。
i++>
{if(method==1>writedata(~str[j++]>。
//method为显示方式。
当等于1时,反白。
elsewritedata(str[j++]>。
}
setpage(page+1>。
setcolumn(column>。
for(i=0。
i<16。
i++>
{if(method==1>writedata(~str[j++]>。
elsewritedata(str[j++]>。
}
}
//显示数字8*8显示
voidshow8(ucharpage,ucharcolumn,ucharscreen,ucharmethod,uchar*str>
{
uchari,j。
select(screen>。
j=0。
setpage(page>。
setcolumn(column>。
for(i=0。
i<8。
i++>
{if(method==1>writedata(~str[j++]>。
elsewritedata(str[j++]>。
}
setpage(page+1>。
setcolumn(column>。
for(i=0。
i<8。
i++>
{if(method==1>writedata(~str[j++]>。
elsewritedata(str[j++]>。
}
}
voidwelcome(>
{
uinti=0,j。
for(j=0。
j<3。
j++,j++>
for(i=0。
i<4。
i++>
{show16(j,16*i,1,0,hz[i+j*4]>。
if(i+4+j*4<14>
show16(j,16*i,2,0,hz[i+4+j*4]>。
}
show8(2,32,2,0,sign[0]>。
//!
for(i=0。
i<4。
i++>
{
show16(4,16*i,1,0,hz[14+i]>。
}
show8(4,0,2,0,sign[1]>。
//:
show8(6,0,1,0,sign[2]>。
//Q
show8(6,8,1,0,sign[2]>。
//Q
show8(6,16,1,0,sign[1]>。
//:
//以下数字均为反白显示。
show8(6,32,1,1,num[1]>。
//1
show8(6,40,1,1,num[3]>。
//3
show8(6,48,1,1,num[7]>。
//7
show8(6,56,1,1,num[6]>。
//6
show8(6,0,2,1,num[0]>。
//0
show8(6,8,2,1,num[8]>。
//8
show8(6,16,2,1,num[9]>。
//9
show8(6,24,2,1,num[7]>。
//7
show8(6,32,2,1,num[7]>。
//7
show8(6,40,2,1,num[3]>。
//3
}
voidmain(>
{
init(>。
delay(200>。
welcome(>。
while(1>。
}