51单片机控制1602的通信问题。
STC89C52RC单片机,控制1602液晶,并口通信,例程上是将数据直接赋予一条总线(例如date=P0)。
请问若八条并口数据线不在一条总线上时(例如四位数据口接在单片机P1,另四位接在P3,如何并口方式操作液晶?
虚心请教各位高手。
51单片机控制1602的通信问题。 STC89C52RC单片机,控制1602液晶,并口通信,例程
答案:3 悬赏:10 手机版
解决时间 2022-01-01 00:07
- 提问者网友:末路
- 2021-12-31 14:38
最佳答案
- 五星知识达人网友:詩光轨車
- 2021-12-31 15:17
可以操作,就看你具体用的是哪些口了
全部回答
- 1楼网友:动情书生
- 2021-12-31 16:31
#define lcd1602_flag
#define lcd1602_port p0
#include
#include
#define int8u unsigned char
sbit lcd1602_rs=p2^0;
sbit lcd1602_e=p3^6;
sbit lcd1602_rw=p2^1;
sbit lcd1602_busy=p0^7;
int8u str[]=" my name is: xxxxxxxxxxxxxxxx";
void lcd1602_checkbusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}
void lcd1602_writecmd(const int8u cmd)
{
lcd1602_checkbusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
lcd1602_port=cmd;
lcd1602_e=0;
}
void lcd1602_writedata(const int8u c)
{
lcd1602_checkbusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
lcd1602_port=c;
lcd1602_e=0;
}
void lcd1602_init()
{
lcd1602_writecmd(0x38); //显示模式为8位2行5*7点阵
lcd1602_writecmd(0x0f); //display enable,flag enable,flash enable,
lcd1602_writecmd(0x06); //flag move to right,screen don't move
lcd1602_writecmd(0x01); //clear screen
}
void lcd1602_display(const int8u *ptr)
{
int8u data i=0;
int8u *data q;
q=ptr;
lcd1602_writecmd(0x80);
while(q!=null && (*q!='\0') && i<16)
{
lcd1602_writedata(*q);
q++;
i++;
}
lcd1602_writecmd(0xc0);
while(q!=null && (*q!='\0') && i>=16 && i<32)
{
lcd1602_writedata(*q);
q++;
i++;
}
}
main()
{
lcd1602_init();
lcd1602_display(str);
while(1);
}
- 2楼网友:夜风逐马
- 2021-12-31 15:52
其实51系列的端口都有相应的地址的,只要在程序前面定义好另一个字节等于你要的高低位就可以了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯