作者beminaru (赏你个痛快)
看板ASM
标题[问题] LCD程式 请教
时间Sun Aug 17 01:02:50 2008
以下是我买的课本的范例程式
但是我实际上照着接之後
载入程式却没有动作
想请教一下有可能是哪边出问题
使用的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
1F:→ beminaru:使用的LCD为LMC-STC2B16-01 08/17 01:15
※ 编辑: beminaru 来自: 124.6.3.229 (08/17 08:23)
2F:推 ruemann:datasheet打不开 08/17 15:38
3F:推 ruemann:打en = 1和下面那行交换看看 08/17 15:44
4F:→ ruemann:把 08/17 15:44