|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請各位人兄指點一二。 |
| 作者:win2000_li 欄目:ARM技術(shù) |
程序如下,但是不能正常運行。 哪位做過類似的東東,請指點小弟一二。 并且BUSY端好像不正常,請指點一下。 E --- P0.2 CS1\CS2 --- P0.3\P0.4 R/W ---P0.5 RS/DI ---- P0.6 DB0~DB7 ----P10~P17 我現(xiàn)在連關(guān)顯示都不能行,請各位人兄幫一下。 #include "config.h" #define DB0 1<<10 #define DB1 1<<11 #define DB2 1<<12 #define DB3 1<<13 #define DB4 1<<14 #define DB5 1<<15 #define DB6 1<<16 #define DB7 1<<17 #define DI 1<<6 #define RW 1<<5 #define E 1<<2 #define CS1 1<<4 #define CS2 1<<3 //#define BUSY 1<<17 #define LED8 1<<23 /****************************************/ void LCD_WritePort(uint8 data); void LCD_WriteByte(uint8 dat); void SendCommandToLCD(uint8 command); void SetLine(uint8 LINE); void SetColumn(uint8 column); void SetStartLine(uint8 startLINE); void SetOnOff(uint8 onoff); void SelectScreen(uint8 screen); void ClearScreen(uint8 screen); /****************************************/ uint8 CBYTE[]={ 0x00,0x12,0x1E,0x02,/*"1",0*/ 0x00,0x12,0x1E,0x02,/*"1",1*/ 0x00,0x12,0x1E,0x02,/*"1",2*/ 0x00,0x12,0x1E,0x02,/*"1",3*/ 0x00,0x12,0x1E,0x02,/*"1",4*/ 0x00,0x12,0x1E,0x02,/*"1",5*/ 0x00,0x12,0x1E,0x02,/*"1",6*/ 0x00,0x12,0x1E,0x02,/*"1",7*/ 0x00,0x12,0x1E,0x02,/*"1",8*/ 0x00,0x12,0x1E,0x02,/*"1",9*/ 0x00,0x12,0x1E,0x02,/*"1",10*/ 0x00,0x12,0x1E,0x02,/*"1",11*/ 0x00,0x12,0x1E,0x02,/*"1",12*/ 0x00,0x12,0x1E,0x02,/*"1",13*/ }; /**********************DelayNs Program****************************/ void DelayNs(uint32 dly) /*延時*/ { uint8 i; for(; dly>0; dly--) for(i=0; i<50; i++); } /*************************把數(shù)據(jù)傳相應(yīng)端口***********************/ //data:顯示數(shù)據(jù) //就是把數(shù)據(jù)與命令傳給DB0~DB7 void LCD_WritePort(uint8 data) { uint32 temp0=0x00000000,temp1=0x00000000; //定義兩個臨時變量 if (data&0x01)temp1|=DB0; //取第一位數(shù)1或0 else temp0|=DB0; if (data&0x02)temp1|=DB1; //取第二位數(shù)1或0 else temp0|=DB1; if (data&0x04)temp1|=DB2; //取第三位數(shù)1或0 else temp0|=DB2; if (data&0x08)temp1|=DB3; //取第四位數(shù)1或0 else temp0|=DB3; if (data&0x10)temp1|=DB4; //取第五位數(shù)1或0 else temp0|=DB4; if (data&0x20)temp1|=DB5; //取第六位數(shù)1或0 else temp0|=DB5; if (data&0x40)temp1|=DB6; //取第七位數(shù)1或0 else temp0|=DB6; if (data&0x80)temp1|=DB7; //取第八位數(shù)1或0 else temp0|=DB7; IOSET=temp1; //把相應(yīng)位置1或0 IOCLR=temp0; } /**********檢查忙信號與RST************/ /*void LCD_CheckBusy() { uint8 i = 0; IO0CLR = DI; IO0SET= RW; IO0DIR = 0x00000000; while(IO0PIN&DB7) {i++;} IO0DIR = 0xffffffff; }*/ /****************寫顯示數(shù)據(jù)******************/ //dat:顯示數(shù)據(jù) void LCD_WriteByte(uint8 dat) { //LCD_CheckBusy(); IO0SET = DI; IO0CLR = RW; //DI=1,RW=0寫顯示數(shù)據(jù) LCD_WritePort(dat); IO0SET = E; DelayNs(10); IO0CLR = E; } /***************向LCD發(fā)送命令**************/ //command :命令 void SendCommandToLCD(uint8 command) { //LCD_CheckBusy(); IO0CLR = DI; LCD_WritePort(command); IO0SET = E; DelayNs(5); IO0CLR = E; } //設(shè)定行地址(頁)--X 0-7 void SetLine(uint8 LINE) { LINE=LINE & 0x07; // 0<=LINE<=7 LINE=LINE|0xb8; //1011 1xxx SendCommandToLCD(LINE); } //設(shè)定列地址--Y 0-63 void SetColumn(uint8 column) { column=column &0x3f; // 0=<column<=63 column=column | 0x40; //01xx xxxx SendCommandToLCD(column); } //設(shè)定顯示開始行--XX void SetStartLine(uint8 startLINE) //0--63 { startLINE=startLINE & 0x07; startLINE=startLINE|0xc0; //1100 0000 SendCommandToLCD(startLINE); } //開關(guān)顯示 void SetOnOff(uint8 onoff) { onoff=0x3e | onoff; //0011 111x SendCommandToLCD(onoff); } /******************選擇屏幕******************/ //screen: 0-全屏,1-左屏,2-右屏 void SelectScreen(uint8 screen) { SWITCH(screen) { case 0: IO0SET = CS1;//全屏 DelayNs(5); IO0SET = CS2; DelayNs(5); break; case 1: IO0SET = CS1;//左屏 DelayNs(5); IO0CLR = CS2; |
| 2樓: | >>參與討論 |
| 作者: zlgarm 于 2006/6/7 15:07:00 發(fā)布:
請檢查總線配置 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |