我用LPC2131接24064液晶(型号Ocmj4×15D 控制器8822 金鹏产品)不知为什么屏幕没显示 调试发现程序总是停留在判忙信号检测上,谢谢提供解决方法,程序如下 数据口接P0.0~P0.7<br /><br />#include "config.h"<br />uint8 tab1[]={<br /> "冷箱 ℃ 时钟显示 : : "<br /> "冷头 ℃ 休眠停止 : "<br /> "冷台 ℃ 休眠开始 : "<br /> "冷刀 ℃ "};<br /> <br />#define lcd_rs 1<<8<br />#define lcd_wr 1<<9<br />#define lcd_rd 1<<10<br />#define lcd_cs1 1<<12<br />#define lcd_cs2 1<<13<br />#define lcd_busy 1<<17<br />#define lcd_int 1<<18<br />#define lcd_rst 1<<19<br /><br />/*********************************************************************************************/<br />void delay(uint16 k)<br />{<br /> uint16 i;<br /> for(i=0;i<k;i++);<br />}<br />void delay1(uint32 ms)<br />{<br /> uint32 i,j;<br /> for(i=0;i<ms;i++)<br /> for(j=0;j<400;j++);<br />}<br />//=============================================<br />void lcd_regwr(uint8 regnada)<br />{ IO0CLR = 0xff; //先清零<br /> IO0SET = regnada; //再送数<br /> IO0CLR = lcd_cs1; // chip enable.<br /> IO0SET = lcd_rd; //<br /> IO0CLR = lcd_rs; // rs = 0;<br /> IO0CLR = lcd_wr; // wr = 0;<br /> delay(10);<br /> IO0SET = lcd_wr; // wr = 1;<br /> IO0SET = lcd_rs; // rs = 1;<br /> IO0SET = lcd_cs1; // chip disable.<br />}<br /><br />void lcd_regwrite(uint8 regname,uint8 regdata) <br />{ //写资料到缓存器<br /> lcd_regwr(regname);<br /> delay(10);<br /> lcd_regwr(regdata);<br />}<br /><br />//.............................................<br />void lcd_datawrite(uint8 wrdata) <br />{ //写资料到DDRAM<br /> while(!(IO0PIN&lcd_busy) == 0);<br /> IO0CLR = 0xff; //先清零<br /> IO0SET = wrdata; //再送数<br /> IO0CLR = lcd_cs1; // chip enable.<br /> IO0SET = lcd_rd; //<br /> IO0SET = lcd_rs; // rs = 1;<br /> IO0CLR = lcd_wr; // wr = 0;<br /> delay(10);<br /> IO0SET = lcd_wr; // wr = 1;<br /> IO0SET = lcd_rs; // rs = 1;<br /> IO0SET = lcd_cs1; // chip disable.<br />}<br />//.............................................<br />uint8 lcd_regread(uint8 regname) <br />{ //读缓存器<br /> uint8 reg_rddata; <br /> lcd_regwr(regname);<br /><br /> IO0DIR=0x00;<br /> IO0SET = 0xff;<br /> IO0CLR = lcd_cs1; // chip enable.<br /> IO0SET = lcd_wr; // wr = 1;<br /> IO0CLR = lcd_rs; // rs = 0;<br /> IO0CLR = lcd_rd; // rd = 0;<br /> ;<br /> reg_rddata = (IO0PIN&0xff);<br /> IO0SET = lcd_rd; // rd = 1;<br /> IO0SET = lcd_rs; // rs = 1;<br /> IO0SET = lcd_cs1; // chip disable.<br /> <br /> IO0DIR=0xff;<br /> return(reg_rddata);<br />}<br />//.............................................<br /> void gotoxy(uint8 x,uint8 y)<br />{ //定坐标<br /> lcd_regwrite(0x60,x); // active window top register(awtr)<br /> lcd_regwrite(0x70,y); // active window top register(awtr)<br />}<br />//=============================================<br /><br />void lcd_reset(void) <br />{ //上电复位<br /> delay1(800); // delay 120ms 等待上电复位<br /> IO0SET = 0x000e37ff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.<br />}<br />//.............................................<br />void lcd_initial(void) <br />{ //初始化<br /> lcd_regwrite(0x00,0xc9); // lcd control register(lcr)<br /> lcd_regwrite(0x01,0xf2); // misc.register(mir)<br /> lcd_regwrite(0x02,0x10); // advance power setup register(apsr)<br /> lcd_regwrite(0x03,0x80); // advance display setup regiser(adsr)<br /> lcd_regwrite(0x10,0x6b); // cursor control register(ccr)<br /> lcd_regwrite(0x11,0x00); // distance of word or lines register(dwlr)<br /> lcd_regwrite(0x12,0x91); // memory access mode register(awrr)<br /> lcd_regwrite(0x21,0x1d); // display window right register(dwrr) <br /> lcd_regwrite(0x31,0x3f); // display window bottom register(dwbr) <br /> lcd_regwrite(0x41,0x00); // display window left register(dwlr)<br /> lcd_regwrite(0x51,0x00); // display window top register(dwtr)<br /> lcd_regwrite(0x20,0x1d); // active window right register(awrr) <br /> lcd_regwrite(0x30,0x3f); // active window bottom register(awbr)<br /> lcd_regwrite(0x40,0x00); // active window left register(awlr)<br /> lcd_regwrite(0x50,0x00); // active window top register(awtr)<br /> lcd_regwrite(0x60,0x00); // cursor position x register(cpxr)<br /> lcd_regwrite(0x61,0x00); // begin segment position register(bgsg)<br /> lcd_regwrite(0x70,0x00); // cursor position y register(cpyr)<br /> lcd_regwrite(0x71,0x00); // shift action range,begin commom register(bgcm)<br /> lcd_regwrite(0x72,0x3f); // shift action range,end commom register(edcm) <br /> lcd_regwrite(0x80,0xaa); // blink time register(btr)<br /> lcd_regwrite(0x81,0x00); // frame rate polarity change at common_fa register(fdca)<br /> lcd_regwrite(0x91,0x00); // frame rate polarity change at common_fb register(fdcb)<br /> lcd_regwrite(0x90,0x1e); // shift clock control register(sccr) <br /> lcd_regwrite(0xa0,0x08); // interrupt setup & status register(frcb)<br /> lcd_regwrite(0xa1,0xf1); // key scan control register(kscr)<br /> lcd_regwrite(0xa2,0x00); // key scan data register(ksdr)<br /> lcd_regwrite(0xa3,0x00); // key scan data expand register(kser)<br /> lcd_regwrite(0xb0,0x1d); // interrupt column setup register(intx) <br /> lcd_regwrite(0xb1,0x3f); // interrupt row setup register(inty) <br /> lcd_regwrite(0xc0,0x00); // touch panel control register(tpcr)<br /> lcd_regwrite(0xc1,0x0a); // adc status register(adcs)<br /> lcd_regwrite(0xc8,0x80); // touch panel segment high byte data register(tpxr)<br /> lcd_regwrite(0xc9,0x80); // touch panel common high byte data register(tpyr)<br /> lcd_regwrite(0xca,0x00); // touch panel segment/common low byte data register(tpzr)<br /> lcd_regwrite(0xd0,0x80); // lcd contrast control register (lccr)<br /> lcd_regwrite(0xe0,0x00); // pattern data register(pdr)<br /> lcd_regwrite(0xf0,0xa0); // font control register(fcr)<br /> lcd_regwrite(0xf1,0x0f); // font size control register<br />}<br />//.............................................<br /><br />//.............................................<br />void lcd_character(uint8 *cha,uint8 count)<br />{ //显示中文或字符<br /> uint8 i;<br /> for(i=0;i<count;i++)<br /> {<br /> lcd_datawrite(*cha);<br /> ++cha;<br /> }<br />}<br /><br />int main (void)<br />{ <br /> <br /> PINSEL0=0x00000000;<br /> PINSEL1=0x00000000;<br /> IO0DIR=0x000e37ff; //设置输出口<br /> <br /> IO0SET=0x000e37ff;<br /> lcd_reset();<br /> lcd_initial(); //初始化中 液晶关显示<br /> <br /><br /> lcd_regwrite(0x10,0x6b);<br /> lcd_regwrite(0x00,0xcd); // 液晶开显示<br /> gotoxy(0x00,0x00); //设定显示位置<br /> lcd_character(tab1,120);<br /> <br /> while(1);<br /> return 0;<br />} |
|