本人小白,最近利用點業(yè)余時間和手頭的一點資源學習一下單片機,過程中遇到點問題,請高手幫忙解決一下。在此先謝謝各位。
硬件:STC89c51RC單片機最小系統(tǒng),10K電位器,OCMJ5X10b顯示器
程序:(程序是拷貝的網(wǎng)上的,自己改了要顯示的字,問題是只能顯示一個“中”字,后面的不能顯示,修改了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;//發(fā)送數(shù)據(jù)
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點陣的中文圖文液晶圖形顯示器模塊。該模塊的內(nèi)部由于含有國標一級簡體字庫,使得漢字的顯示異常方便;同時,該模塊與單片機的硬件接口除數(shù)據(jù)總線外,僅使用了REQ/BUSY兩根握手信號線,簡化了與單片機的硬件接口電路設計。上述特點對軟件、硬件資源均十分緊張的單片機系統(tǒng)來說是十分重要的。OCMJ5X10 中文模塊所有的設置初始化工作都是在上電時自動完成的,實現(xiàn)了“即插即用”;同時,保留了一條專用的復位線供用戶選擇使用,可對工作中的模塊進行軟件或硬件強制復位。規(guī)劃整齊的10個用戶接口命令代碼,非常容易記憶。標準用戶硬件接口采用REQ/BUSY 握手協(xié)議,簡單可靠。
OCMJ5X10模塊與CPU的接口除了使用DB0~DB7口8根數(shù)據(jù)線外,僅使用了REQ和BUSY兩根控制線,構成請求/應答(REQ/BUSY)握手方式,省略了傳統(tǒng)模塊接口方式的片選、讀寫控制、指令/數(shù)據(jù)選擇、使能控制等控制線,從而使硬件接口及軟件時序變得非常簡單。在硬件資源十分緊張的應用系統(tǒng)中,也可采用REQ單線延時控制方式,從而把硬件資源占用降至最低。接口協(xié)議如下:當BUSY線為高電平時(BUSY =1),表示模塊忙于內(nèi)部處理,不能接收用戶命令;而BUSY為低電平時(BUSY =0),表示模塊空閑,等待接收用戶命令。CPU可在BUSY為低后的任意時刻開始發(fā)送命令。首先,把用戶命令的當前字節(jié)放到數(shù)據(jù)線上,接著發(fā)送高電平REQ 信號,通知模塊,請求處理當前數(shù)據(jù)線上的命令或數(shù)據(jù)。模塊在收到外部的REQ高電平信號后,立即讀取數(shù)據(jù)線上的命令或數(shù)據(jù),同時將應答線BUSY變?yōu)楦唠娖剑砻髂K已收到數(shù)據(jù)并正在忙于對此數(shù)據(jù)的內(nèi)部處理。此時,用戶對模塊的寫操作已經(jīng)完成,可以撤消數(shù)據(jù)線上的信號并可做模塊顯示以外的其它工作,也可不斷地查詢BUSY是否為低。如果BUSY =0,說明模塊對用戶的寫操作已經(jīng)執(zhí)行完畢,可以再送下一個數(shù)據(jù)。如向模塊發(fā)出一個完整的顯示漢字的命令,包括顯示坐標及漢字代碼在內(nèi)共需5個字節(jié),模塊在接收到最后一個字節(jié)后,才開始執(zhí)行整個命令的內(nèi)部操作;因此,最后一個字節(jié)的應答B(yǎng)USY 高電平(BUSY =1)持續(xù)時間較長。
還請各位大神幫忙看看什么問題導致,再次謝謝各位大神!
|