找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2022|回复: 0
打印 上一主题 下一主题
收起左侧

OCMJ5X10b显示器驱动程序问题

[复制链接]
跳转到指定楼层
楼主
ID:147062 发表于 2016-11-9 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人小白,最近利用点业余时间和手头的一点资源学习一下单片机,过程中遇到点问题,请高手帮忙解决一下。在此先谢谢各位。

硬件:STC89c51RC单片机最小系统,10K电位器,OCMJ5X10b显示器
程序:(程序是拷贝的网上的,自己改了要显示的字,问题是只能显示一个“中”字,后面的不能显示,修改了XY位置也没变化)
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define dat P1
sbit busy_ocmj5=P0^1;//忙闲标志
sbit req_ocmj5=P0^0;//使能


unsigned char show[]={0x36,0x30,0x1b,0x0a,0x28,0x2b,0x23,0x51};
int i;
void xesj_ocmj(uchar s)//写字子程序
{
dat=0xff;
req_ocmj5=0;//初始化使能
busy_ocmj5=1;
while(busy_ocmj5);
dat=s;//发送数据
req_ocmj5=1;//
_nop_();//使能脚延时
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
req_ocmj5=0;

}
void main()
{
xesj_ocmj(0xf4);//清屏指令
xesj_ocmj(0xf0);//显示汉字指令
xesj_ocmj(0x10);//X坐标
xesj_ocmj(0x10);//Y坐标


  
xesj_ocmj (show[0]);
xesj_ocmj (show[1]);
xesj_ocmj (show[2]);
xesj_ocmj (show[3]);
  _nop_();//
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
xesj_ocmj(0x10);//
  xesj_ocmj(0x10);//
xesj_ocmj (show[4]);
xesj_ocmj (show[5]);
xesj_ocmj (show[6]);
xesj_ocmj (show[7]);
_nop_();//
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  while(1);
//
}
关于OCMJ5X10b的一点介绍:
         OCMJ5X10是160×80点阵的中文图文液晶图形显示器模块。该模块的内部由于含有国标一级简体字库,使得汉字的显示异常方便;同时,该模块与单片机的硬件接口除数据总线外,仅使用了REQ/BUSY两根握手信号线,简化了与单片机的硬件接口电路设计。上述特点对软件、硬件资源均十分紧张的单片机系统来说是十分重要的。OCMJ5X10 中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”;同时,保留了一条专用的复位线供用户选择使用,可对工作中的模块进行软件或硬件强制复位。规划整齐的10个用户接口命令代码,非常容易记忆。标准用户硬件接口采用REQ/BUSY 握手协议,简单可靠。
        OCMJ5X10模块与CPU的接口除了使用DB0~DB7口8根数据线外,仅使用了REQ和BUSY两根控制线,构成请求/应答(REQ/BUSY)握手方式,省略了传统模块接口方式的片选、读写控制、指令/数据选择、使能控制等控制线,从而使硬件接口及软件时序变得非常简单。在硬件资源十分紧张的应用系统中,也可采用REQ单线延时控制方式,从而把硬件资源占用降至最低。接口协议如下:当BUSY线为高电平时(BUSY =1),表示模块忙于内部处理,不能接收用户命令;而BUSY为低电平时(BUSY =0),表示模块空闲,等待接收用户命令。CPU可在BUSY为低后的任意时刻开始发送命令。首先,把用户命令的当前字节放到数据线上,接着发送高电平REQ 信号,通知模块,请求处理当前数据线上的命令或数据。模块在收到外部的REQ高电平信号后,立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理。此时,用户对模块的写操作已经完成,可以撤消数据线上的信号并可做模块显示以外的其它工作,也可不断地查询BUSY是否为低。如果BUSY =0,说明模块对用户的写操作已经执行完毕,可以再送下一个数据。如向模块发出一个完整的显示汉字的命令,包括显示坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后,才开始执行整个命令的内部操作;因此,最后一个字节的应答BUSY 高电平(BUSY =1)持续时间较长。  

还请各位大神帮忙看看什么问题导致,再次谢谢各位大神!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表