四线驱动1602,2显示b的问题,这是在暗示什么吗

2020-01-23 14:49发布

本帖最后由 xiaoyigechaos 于 2014-4-21 19:28 编辑

程序代码如下
#include "reg52.h"
#include "INTRINS.H"
#define uchar unsigned char
#define uint unsigned int
#define data0 P2
//1602 ½Ó¿Ú
sbit RS=P2^0;//RS??? ??? ??????
sbit RW=P2^1;//RW???? ????
sbit EN=P2^2;//??? ????
uchar code arr[]="23RSrsBCbc";
void delay(uint k)
{
        uint i,j;
        for(i=0;i<k;i++){
                for(j=0;j<255;j++);
}
}
/*************************************************************
LCD³ÌÐò
*************************************************************/
void check_busy()
{
        RS=0;
        RW=1;
        EN=1;
        while(data0&0x80);
        _nop_();
        EN=0;
}
void LCD_Write_Com(uchar com)
{
        uchar i;
        for(i=0;i<2;i++){
        data0|=0xf0;
        check_busy();       
        RS=0;
        RW=0;
        data0=data0&0x0f;
        data0=data0|com;
                EN=1;
                _nop_();
                EN=0;
                com=com<<4;
        }
}

void LCD_Write_Data(uchar data1)
{
        uchar i;
        for(i=0;i<2;i++){
        data0|=0xf0;
        check_busy();               
        RS=1;
        RW=0;
                data0=data0&0x0f;
        data0=data0|data1;
        EN=1;
        nop_();
        EN=0;
                data1=data1<<4;
}
}


//LCD1602???
void LCD_Init()
{
        LCD_Write_Com(0x2c);
        LCD_Write_Com(0x01);
        LCD_Write_Com(0x08);
        LCD_Write_Com(0x06);
        LCD_Write_Com(0x0c);
}


main()
{
                uchar i;
                LCD_Init();
                delay(10);
                LCD_Write_Com(0x80);
                for(i=0;i<8;i++){
                LCD_Write_Data(arr);
                delay(100);
                }
        while(1);
}

单片机是STC89C52RC,一开始以为是硬件问题,各种尝试都不行。有一部分字符显示的不对,比如
23RSrsBCbc  这个字符串会显示为 “bcbcbcbc”

不知道哪里出了问题,各种改都没解决,求指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。