ST7920汉字检索字库哪儿有啊?
答案:2 悬赏:60 手机版
解决时间 2021-02-27 20:51
- 提问者网友:刺鸟
- 2021-02-27 09:01
ST7920汉字检索字库哪儿有啊?
最佳答案
- 五星知识达人网友:行雁书
- 2021-02-27 09:06
下载字模软件~~~
全部回答
- 1楼网友:酒者煙囻
- 2021-02-27 10:17
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#defineucharunsignedchar
#definefisrt_addr0//定义字符/汉字显示起始位置
typedefunsignedcharuint8;
sbitlcd_rs=p2^2;
sbitlcd_rw=p2^3;
sbitlcd_e=p2^4;
sbitpcb=p2^5;
uchari,j;
uint8ac_table[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
voiddelay(intms)
{
while(ms--)
{
for(j=0;j<120;j++);
}
}
bitlcd_busy()
{bitresult;
lcd_rs=0;
lcd_rw=1;
lcd_e=1;
result=(bit)(p0&0x80);
lcd_e=0;
returnresult;
}
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
lcd_rs=0;
lcd_rw=0;
lcd_e=0;
p0=cmd;
lcd_e=1;
lcd_e=0;
}
voidlcd_wdata(uchardat)
{
while(lcd_busy());
lcd_rs=1;
lcd_rw=0;
lcd_e=0;
p0=dat;
lcd_e=1;
lcd_e=0;
}
voidlcd_initial()
{
lcd_wcmd(0x30);
delay(1);
lcd_wcmd(0x0c);//开显示,关光标,不闪烁
delay(1);
lcd_wcmd(0x06);//指定在资料写入或读取时,光标的移动方向
delay(1);
lcd_wcmd(0x01);
delay(10);//这里要延时长一点,否侧会影响下面的操作
}
voidclr_screen()
{
lcd_wcmd(0x30);//考虑到前面出现0x34
lcd_wcmd(0x01);
delay(10);
}
//先写0x34关绘图,写地址数据,0x360x绘图
voidlcd_fill(uchardisdata)
{ucharx,y;//参考pdf写gdram的步骤,显示坐标
for(y=0;y<32;y++)
for(x=0;x<16;x++)
{lcd_wcmd(0x34);
lcd_wcmd(y+0x80);//行地址
lcd_wcmd(x+0x80);//列地址
lcd_wdata(disdata);
lcd_wdata(disdata);
lcd_wcmd(0x36);
}
lcd_wcmd(0x30);//考虑到前面出现0x34
}
voidzi_fu(ucharcode*s)
{
while(*s!=0)
{lcd_wdata(*s);
s++;
delay(10);
}
}
//注意:中文显示时空格符或数字ascii码必需两个一起用,标点符号注意中英文
voidintruction()
{
clr_screen();
lcd_wcmd(0x80);//第一行(如果是地址是:80h,即lcd的第一行的第一个位置显示)
zi_fu("我真的很爱你");
lcd_wcmd(0x90);//第二行(如果是地址是:90h,即lcd的第二行的第一个位置显示)
zi_fu("很在乎很在乎你");
lcd_wcmd(0x88);//第三行(如果是地址是:88h,即lcd的第二行的第一个位置显示)
zi_fu("我把我的心交给你");
lcd_wcmd(0x98);//第四行(如果是地址是:98h,即lcd的第二行的第一个位置显示)
zi_fu("想你啦");
delay(1000);
}
voidfeeling1()
{
lcd_wcmd(0x30);
zi_fu("我真的很爱你");
delay(300);
lcd_wcmd(0x90+fisrt_addr);
zi_fu("很在乎很在乎你");
delay(300);
lcd_wcmd(0x88+fisrt_addr);
zi_fu("我把我的心交给你");
delay(300);
lcd_wcmd(0x98+fisrt_addr);
delay(500);
zi_fu("想你哦");
}
voiddisp_img(ucharcode*bmp)
{
ucharcount=2,x=0x80;
lcd_wcmd(0x34);//扩展指令
lcd_wcmd(0x36);//打开绘图
for(;count>0;count--)
{
for(i=0;i<32;i++)
{lcd_wcmd(0x80|i);
lcd_wcmd(x);//x地址坐标,自动加1.
for(j=0;j<16;j++)//16*8=128
lcd_wdata(*bmp++);
}
x=0x88;//下半屏
}
}
voidzk(uchar*zk)
{
uchari,j;
for(j=0;j<16;j++)
{
lcd_wcmd(0x34);//扩展指令
lcd_wcmd(0x36);//打开绘图
lcd_wcmd(0x80|j);
lcd_wcmd(0x80);//x地址坐标,自动加1.
for(i=0;i<2;i++)
{
lcd_wdata(*zk++);
}
}
}
voidlcd_write_poss(ucharx,uchary,uchar*zifu)
{
ucharaddr,i=0;
if(x==1)addr=0x80;
if(x==2)addr=0x90;
if(x==3)addr=0x88;
if(x==4)addr=0x98;
addr=addr+y;
lcd_wcmd(0x30);
lcd_wcmd(addr);
while(*zifu!='\0')
{
lcd_wdata(*zifu++);
}
}
voidmain()
{
pcb=1;
while(1)
{
lcd_initial();
delay(1000);
clr_screen();
feeling1();
delay(3000);
for(i=8;i>0;i--)
{
lcd_wcmd(0x18);//一二行与三四行调换了,液晶分为上下两个半屏,
delay(1000);//有时会乱,与上面程序有关,要加lcd_wcmd(0x30),clrscreen();
}
clr_screen();//清屏
feeling1();
lcd_wcmd(0x34);
lcd_wcmd(0x04);//0x04第一行和第三行反白显示,
delay(3000);//0x05第二行和第四行反白显示,与pdf不符
lcd_wcmd(0x04);//恢复正常
delay(3000);
lcd_wcmd(0x34);
lcd_wcmd(0x03);//允许输入滚动地址
for(i=0x40;i<0x7f;i++)
{
lcd_wcmd(i);//垂直滚动屏幕的内容
delay(500);
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯