电路图如附件,小弟新手,还不会用protel,只好截图。
我用总线方式操作完全OK,
但是我尝试换成GPIO方式操作却发现一个问题。
当我往1602写命令的时候,写第一字节数据完全没问题,
但是写第二字节数据的时候去发现,写入的数据不是我欲写的数(通过发光二极管来看的,8个发光二极管和1602的8位数据口共用P0口),是一个固定的别的数。
我想写的是0x06,显示的确是0x0a
请教高手帮忙分析下为啥会为干扰,变成别的数,敬谢!
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit LCDRS=P0^4;
sbit LCDRW=P0^3;
sbit LCDEN=P0^2;
sbit C51WR=P3^6;
void Delay(uchar count)
{
uchar i;
for(i=count;i>0;i--)
{
_nop_();
}
}
void write_1602_instruction(uchar instruction)
{
P2=0xc0;
LCDEN=0;
LCDRS=0;
LCDRW=0; //写指令准备;
Delay(5);
LCDEN=1;
Delay(5);
P2=0xc8;
P0=instruction;
Delay(5);
LCDEN=0; //禁能;
LCDRW=1;
}
void initialize(void)
{
C51WR=0;
write_1602_instruction(0x38);
write_1602_instruction(0x06);
write_1602_instruction(0x0f);
write_1602_instruction(0x01);
}
void main()
{
initialize();
while(1);
} |