[問題] LCD程式 請教

看板ASM作者 (賞你個痛快)時間15年前 (2008/08/17 01:02), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/2 (看更多)
以下是我買的課本的範例程式 但是我實際上照著接之後 載入程式卻沒有動作 想請教一下有可能是哪邊出問題 使用的LCD SPEC http://blog.diyzone.net/blog/oldhan/resource/datasheet/download/ LMC-STC2B16-01.pdf 使用的8051: 89S52 ================================== /*LCD文字顯示實驗(ch13-1.c)*/ #include <reg51.h> #define LCDP P1 // LCD接至P1 sbit RS=P3^2; sbit RW=P3^1; sbit en=P3^0; //sbit RS=P1^0; sbit RW=P1^1; sbit en=P1^2; char line1[]="LCM test program"; char line2[]="Everything is OK"; char line3[]="中文LCM 測試程式"; char line4[]="一切正常歡迎使用"; void init_LCM(void); void write_inst(char); void write_char(char); void check_BF(void); void delay1ms(int); main() { char i; /* 宣告變數 */ init_LCM(); /* 初始設定 */ while(1) /* 無盡迴圈 */ //===== LCM test program ====== { write_inst(0x80); /* 指定第一列位置 */ for (i=0;i<16;i++) /* 迴圈 */ write_char(line1[i]); /* 顯示16個字 */ //===== Everything is OK ====== write_inst(0x90); /* 指定第二列位置 */ for (i=0;i<16;i++) /* 迴圈 */ write_char(line2[i]); /* 顯示16個字 */ delay1ms(2000); /* 延遲2秒 */ //===== 中文LCM 測試程式 ====== write_inst(0x80); /* 指定第一列位置 */ for (i=0;i<16;i++) /* 迴圈 */ write_char(line3[i]); /* 顯示16個字 */ //===== 一切正常歡迎使用 ====== write_inst(0x90); /* 指定第二列位置 */ for (i=0;i<16;i++) /* 迴圈 */ write_char(line4[i]); /* 顯示16個字 */ delay1ms(2000); /* 延遲2秒 */ } /* while結束 */ } /* 程式結束 */ //====初始設定函數(8位元傳輸模式)=================== void init_LCM(void) { write_inst(0x30); /* 設定功能 */ write_inst(0x30); /* 設定功能 */ write_inst(0x30); /* 設定功能 */ write_inst(0x38); /* 設定兩列 */ write_inst(0x08); /* 關閉顯示功能 */ write_inst(0x01); /* 清除顯示幕 */ write_inst(0x06); /* 設定輸入模式 */ write_inst(0x0e); /* 開啟顯示功能 */ } /* 函數結束 */ //====寫入指令函數================================ void write_inst(char inst) { RS = 0; RW=0; /* 寫入指令模式 */ en = 1; /* 致能 */ LCDP = inst; /* 寫入指令 */ en = 0; check_BF(); /* 完成 */ } /* 函數結束 */ //====寫入資料函數================================ void write_char(char character) { RS = 1; RW=0; /* 寫入資料模式 */ en = 1; /* 致能 */ LCDP = character; /* 寫入字元 */ en = 0;check_BF(); /* 完成 */ } /* 函數結束 */ //====檢查忙碌函數================================ void check_BF(void) { char i,x = 0x80; /* 宣告變數 */ while (x&0x80) /* 若BF=1則執行迴圈 */ { RS = 0; RW=1; /* 讀取指令模式 */ en = 1; /* 致能 */ x = LCDP; /* 讀取指令 */ en = 0; for (i=0;i<10;i++); /* 完成 */ } /* 迴圈結束 */ } /* 函數結束 */ //====延遲函數================================ void delay1ms(int x) { int i,j; /* 宣告變數 */ for (i=1;i<x;i++) /* 外迴圈 */ for (j=1;j<120;j++); /* 內迴圈 */ } /* 函數結束 */ -- 靜靜的等人追的話頂多只能有兩三個選擇 但是主動出擊去追人的話妳的選擇將會是無限喔~共勉之 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.6.3.229

08/17 01:15, , 1F
使用的LCD為LMC-STC2B16-01
08/17 01:15, 1F
※ 編輯: beminaru 來自: 124.6.3.229 (08/17 08:23)

08/17 15:38, , 2F
datasheet打不開
08/17 15:38, 2F

08/17 15:44, , 3F
打en = 1和下面那行交換看看
08/17 15:44, 3F

08/17 15:44, , 4F
08/17 15:44, 4F
文章代碼(AID): #18fmWyLO (ASM)
討論串 (同標題文章)
文章代碼(AID): #18fmWyLO (ASM)