液晶光标设定

HEROP 2004-08-11 06:19:00
我用的是日晶公司的128*64戴中文字库的液晶,驱动为st7920\st7921,但我在显示数字时,因为只占8*16即半宽型字,这样我在设定时,因为光标宽度为16,这样就占了两个数字,看起来很不美观,那位大虾能告诉我怎能让光标闪烁时也显示8*16即半宽型字,先谢谢了!!!
...全文
85 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); } /*************************
中南大学 《自动化工程训练》 设计题目  LCD时钟程序设计    指导老师            设计者        专业班级 自动化    级 班号     设计日期    2016年9月        目录 一、设计任务要求分析 1 1、1设计总体方案及其方案论证 1 二、 组成电路介绍 1 2、1 复位电路: 1 2、2晶振电路: 1 2、3键盘控制系统设计: 2 2、4闹钟部分: 3 2、5显示电路设计 3 2、5、1 LCD1602简介 3 三 、软件设计 4 3、1程序主流程图 5 3、2初始化流程图 5 3、3延时中断子程序 6 3、4时间设置子程序 7 四、系统测试 7 4、1 测试方法 7 4、2 测试结果 7 4、3 结果分析 8 五、源程序 8 一、设计任务要求分析 本设计要实现得功能就是:实时显示当前得时钟,并且可以设定闹铃,以蜂鸣器鸣响5 秒得方式作为闹铃。 1、1设计总体方案及其方案论证 按照系统得设计功能所要求得,液晶显示电子时钟原理图如图所示。 液晶显示电子时钟原理图 本系统以AT89C51单片机为核心,该单片机可把数据进行处理,从而把数据传输 到显示模块LCD1602液晶显示器,实现时间及日期得显示。以LCD液晶显示器为显示模块 ,把单片机传来得数据显示出来,并且显示多样化,还可以对时间与日期进行设置,主要靠 按键来实现。 组成电路介绍 2、1 复位电路: 复位电路 复位电路有两种方式:上电复位与按钮复位,我们主要用按钮复位方式。如图所示: 2、2晶振电路: 晶振电路如图所示: 晶振模块原理图 选取原则:电容选取22pF,晶振为12MHz。 1. 电源: AT89S51单片机得供电电源就是5V得直流电。 2. EA非/Vpp脚: 我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。 2、3键盘控制系统设计: 按键需要4个,分别实现为时间调整、时间得加、时间得减、闹钟调整四个功能。用 单片机得4个I/O口接收控制信号,其电路如图所示: 按键调时电路 通过控制键来控制所要调节得就是时、分、还就是秒。在控制键按下后LCD中会在相 应得位置出现光标,这时在通过加数键或减数键来控制时分秒得加或减。在调闹钟键按下 后LCD中也会在相应得位置出现光标,这时也通过加数键或减数键来设置闹钟。 2、4闹钟部分: 闹钟部分主要由蜂鸣器,三极管,电阻组成。其电路图如图所示: 闹钟电路 当单片机得P1^5接口输出为高电平时,蜂鸣器响,当输出为低电平时,蜂鸣器停止 。 2、5显示电路设计 2、5、1 LCD1602简介 LCD1602液晶也叫1602字符型液晶,它就是一种专门用来显示字母、数字、符号等 得点阵型液晶模块,它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可 以显示一个字符。每位之间有一个点距得间隔,每行之间也有也有间隔,起到了字符间距 与行间距得作用,正因为如此,所以她不能显示图形(用自定义CGRAM,显示效果也不好 )。1602LCD就是指显示得内容为16X2,即可以显示两行,每行16个字符液晶模块( 显示字符与数字)。目前市面上字符液晶绝大多数就是基于HD44780液晶芯片得,控制 原理就是完全相同得,因此基于HD44780写得控制程序可以很方便地应用于市面上大部 分得字符型液晶。  (1)LCD1602得主要技术参数 显示容量:16×2个字符; 芯片工作电压:4、5—5、5V; 工作电流:2、0mA(5、0V); 模块最佳工作电压:5、0V; 字符尺寸:2、95×4、35(W×H)mm。 (2)LCD1602引脚功能说明    1602LCD采用标准得14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下:     第1脚:VSS为地电源; 第2脚:VDD接5V正电源; 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比 度过高时会产生"鬼影",使用时可以通过一个10K得电位器调整对比度;   第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;    第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS与R/W共同为 低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS 为高电平R/W为低电平时可以写入数据; 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令; 第7~14脚:D0~D7,为8位双向数据线; 第15脚:背光源正极; 第16脚:背光源负极。  1602液晶模块得读写操作,屏幕与光标得操作都就是通过指令编程来实现得。本显示 电路将单片机得P0口作为液晶得数据口,由于P0口没有上拉电阻,所以需额外加一个排 阻作为上拉电阻,利用

27,373

社区成员

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

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