[問題] LCD程式 請教
以下是我買的課本的範例程式
但是我實際上照著接之後
載入程式卻沒有動作
想請教一下有可能是哪邊出問題
使用的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
08/17 01:15, 1F
※ 編輯: beminaru 來自: 124.6.3.229 (08/17 08:23)
推
08/17 15:38, , 2F
08/17 15:38, 2F
推
08/17 15:44, , 3F
08/17 15:44, 3F
→
08/17 15:44, , 4F
08/17 15:44, 4F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章