液晶光标设定

HEROP 2004-08-11 06:19:00
我用的是日晶公司的128*64戴中文字库的液晶,驱动为st7920\st7921,但我在显示数字时,因为只占8*16即半宽型字,这样我在设定时,因为光标宽度为16,这样就占了两个数字,看起来很不美观,那位大虾能告诉我怎能让光标闪烁时也显示8*16即半宽型字,先谢谢了!!!
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
peng22277 2004-08-12
  • 打赏
  • 举报
回复
自己画一个光标
romyks 2004-08-12
  • 打赏
  • 举报
回复
不然自己画一个光标算了,要多宽就可以是多宽
tjjack 2004-08-12
  • 打赏
  • 举报
回复
不可能的哦!那和内部的控制器有管!也是就说厂商已经就这样作的!除非你也自己作!!
#include #include //具有_nop_()函数的库文件 typedef unsigned char zj; //重定义数据类型zj为无符号字符型; sbit L_RS=P2^0; //定义控制信号L_RS连接的引脚 sbit L_RW=P2^1; //定义控制信号L_RW连接的引脚 sbit L_EP=P2^2; //定义控制信号L_EP连接的引脚 zj code disp[]={"digital tempratu"}; //写入liquid crystal的字符串数组 delay(int ms) //延时函数 { int i; while(ms--) { for(i=0;i<250;i++) { _nop_();_nop_();_nop_();_nop_(); } //_nop_()空操作; }} bit licrystal_bz() //测是liquid crystal 忙状态函数,返回“bit”类型; { bit result; //定义bit变量; L_RS=0; //L_RS=0,为读命令而不是数据; L_RW=1; //L_RW=0为读操作,而不是写操作; L_EP=1; //L_EP=0,高电平使读操作有效; _nop_();_nop_();_nop_();_nop_(); result=(bit)(P0&0x80); //将P0口的最高位取出,并强制为bit类型; L_EP=0; //停止读操作; return result; //返回liquid crystal忙标志; } licrystal_wcmd(zj cmd) //向liquid crystal写入指令函数; { while(licrystal_bz()); //liquidcrystal 忙时等待; L_RS=0; //l_RS=0为读写命令; L_RW=0; //L_RW为写操作 L_EP=0; //L_EP=0,为正脉冲做准备; _nop_();_nop_(); P0=cmd; //将命令写入P0口(于liquid crystal数据总线相连); _nop_();_nop_(); _nop_();_nop_(); L_EP=1; //L_EP=1,准备写操作下降沿; _nop_();_nop_();_nop_();_nop_(); L_EP=0; //l_ep=0,出现有效下降沿。 } licrystal_pos(zj pos) //设定字符显示位置函数;pos 的范围为00h~27H,40H~67H { licrystal_wcmd(pos|0x80); //调用写命令函数,写入位置值 } licrystal_wdat(zj dat) //向liquid crystal写入字符(一字节的数据) { while(licrystal_bz()); //当忙时等待; L_RS=1; //写数据操作 L_RW=0; //数据操作; L_EP=0; //写操作; P0=dat; //将显示数据写入p0口 _nop_();_nop_();_nop_();_nop_(); L_EP=1; //L_EP=1,准备写操作下降沿; _nop_();_nop_();_nop_();_nop_(); L_EP=0; //L_EP=0,出现有效下降沿; } licrystal_init() //软件初始化函数 { //L_RW为写操作 licrystal_wcmd(0x38); //16*2显示,5*7点阵,8位数据(001,DL=1,N=0,F=0,00) delay(1); licrystal_wcmd(0x0f); //显示开、关光标,不闪烁(0000,1,D=1,C=0,B=0;) delay(1); licrystal_wcmd(0x06); //增量方式移动光标(0000,0,1,I/D=0,S=0); delay(1); licrystal_wcmd(0x01); //清除LCD的显示内容,AC与DDRAM初始化 delay(1); } main() { zj i; //定义不符号字符变量i licrystal_init(); //调用初始化函数,软件初始化LCD delay(10); while(1) //无限循环 { licrystal_wcmd(0x06); //调用写命令函数,向右移动光标(增量) licrystal_pos(0); //调用显示位置函数,设置显示位置为第一行的一个字符 i=0; //变量初始化 while(disp[i]!='\0') //如果没有遇到结束符,则显示字符 { licrystal_wdat(disp[i]); //调用写数据函数,向liquid crystal写字符,由于增量方式,所以AC自动加1 i++; delay(10); //设置两个字符之间显示的速度 } //控制两屏之间的转换时间 } }
LCD12864 哆啦A梦图片显示STC8A8K单片机KEIL工程文件源码: /*******************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*******************************************************************/ void lcd_init() { // LCD_PSB = 1; //并口方式 LCD_RST = 0; //液晶复位 delay(3); LCD_RST = 1; delay(3); lcd_wcmd(0x34); //扩充指令操作 delay(5); lcd_wcmd(0x30); //基本指令操作 delay(5); lcd_wcmd(0x0C); //显示开,关光标 delay(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay(5); } /********************************************************* * * * 图形显示 * * * *********************************************************/ void photodisplay(uchar *bmp) { uchar i,j; lcd_wcmd(0x34); //写数据时,关闭图形显示 for(i=0;i<32;i++) { lcd_wcmd(0x80+i); //先写入水平坐标值 lcd_wcmd(0x80); //写入垂直坐标值 for(j=0;j<16;j++) //再写入两个8位元的数据 lcd_wdat(*bmp++); delay1(3); } for(i=0;i<32;i++) { lcd_wcmd(0x80+i); lcd_wcmd(0x88); for(j=0;j<16;j++) lcd_wdat(*bmp++); delay1(3); } lcd_wcmd(0x36); //写完数据,开图形显示 } /********************************************************* * * * 主函数 * * * *********************************************************/ void main() { delay(100); //上电,等待稳定 lcd_init(); //初始化LCD photodisplay(Photo1); //显示图片1 delay(20000); while(1); } /*************************

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧