作者sudale (小苏)
看板ASM
标题[问题] LCD接收字元
时间Sun Apr 22 23:45:18 2012
参考了一些书籍,想要利用LCD看我到底传了什麽东西给S51,结果却不如预期
好像什麽东西都没有传到.......
想要请各位大大帮我看看是不是哪里出了问题,感激不尽
以下程式码是我拼拼凑凑写出来的,
主要是参考
http://faculty.stut.edu.tw/~wjshieh/example/LCD16x2.c
如有任何侵权请告诉我我马上删除此文,谢谢
#include <reg51.h>
#include <stdio.h>
sbit LCD_RS=P1^0; //定义接脚
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
sbit LED=P1^3;
#define LCD_Data P2
void WriteDataLCD(char WDLCD);
void WriteCommandLCD(char WCLCD);
void LCDInit(void);
void ChangeCursor(char X,char Y);
void DisplayWord(char LCD_word);
void DisplayListChar(char code *DData);
void delay_us(unsigned int t);
void uart_init(void);
//主程式开始
void main(void)
{
unsigned int i;
LCDInit(); //LCM初始化
DisplayListChar("Success!"); <----这里有成功
uart_init();
for(i=0;i<10;i++){while(!TI);TI=0;SBUF='U';} <----这里也有成功,所以我排除
鲍率设错的问题
LED=0;//LED亮
while(1);
}
void uart_int() interrupt 4 <----这边是我自己加的
{
unsigned char k;
if (RI==1){ <----当接收端有收到资料时
LED=1;
<问题>如果我传送了一个字元但是LED灯没有
熄灭,是不是代表程式没有跑进来?
RI=0;
k=SBUF;
LCDInit();
delay_us(100);
DisplayWord(k);
}else
TI=0;
}
void delay_us(unsigned int t)
{
while(t--);
}
//uart初始设定
void uart_init(void) <------因为接收端可以收到资料,
我假设这边设定无误
{
SCON=0x52;
TMOD=0x21;
TH1=253;
TR1=1;
}
//写资料到LCD副程式
void WriteDataLCD(char WDLCD)
{
LCD_Data = WDLCD;
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1; //产生负缘
delay_us(100); //延迟等讯号稳定
LCD_E = 0;
delay_us(100); //延迟等讯号处里完毕
}
//写指令到LCD副程式
void WriteCommandLCD(char WCLCD) //BuysC为0时忽略忙检测
{
LCD_Data = WCLCD;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
delay_us(100); //延迟等讯号稳定
LCD_E = 0;
delay_us(100); //延迟等讯号处里完毕
}
void LCDInit(void) //LCM初始化
{
WriteCommandLCD(0x38); // 设定LCD介面8位元,2行,5*7字型
WriteCommandLCD(0x06); // 设定写资料至LCD时,显示不要动,游标向右移动
WriteCommandLCD(0x0F); // 设定萤幕显示及游标闪烁
WriteCommandLCD(0x01); // 清除显示器
delay_us(5000);
}
//显示一个字元
void DisplayWord(char LCD_word)
{
delay_us(100);
LCD_RS=1;
delay_us(100);
LCD_Data=LCD_word;
delay_us(100);
LCD_E=1;
delay_us(100);
LCD_E=0;
}
//显示一串字串
void DisplayListChar(char code *DData)
{
char x;
x=0;
while (DData[x]!=0) //若到达字串尾则退出
{
WriteDataLCD(DData[x]); //显示单个字
x++; //指到下一个字
}
}
程式有点长,麻烦大家了,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.184.250.215
1F:推 WolfLord: 你不能一收到字就RESET LCD啊~ 一直RESET麽显示? 04/23 00:02
2F:推 WolfLord:然後你LED=1根本就没作用吧?CPU RESET之後PORT就是1吧? 04/23 00:06