Java ioio代码LCD JHD162A无法初始化

Java ioio代码LCD JHD162A无法初始化,java,lcd,ioio,Java,Lcd,Ioio,在大约5小时的家庭作业后在此提问,因此避免从谷歌搜索最热门的参考资料 我正在尝试将LCD JHD162A连接到ioio V1,但LCD未初始化,它显示一行黑匣子,我的意思是“LCD未正确初始化”,原因可能是什么?下面显示了核心代码,是否存在代码错误 连接: LCD 16x2 | RS | E | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7| IOIO板|端口1 |端口2 |端口3 |端口4 |端口5 |端口6 |端口7 |端口8 |端口9 |端口10|

在大约5小时的家庭作业后在此提问,因此避免从谷歌搜索最热门的参考资料


我正在尝试将LCD JHD162A连接到ioio V1,但LCD未初始化,它显示一行黑匣子,我的意思是“LCD未正确初始化”,原因可能是什么?下面显示了核心代码,是否存在代码错误

连接:


  • LCD 16x2 | RS | E | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7|


  • IOIO板|端口1 |端口2 |端口3 |端口4 |端口5 |端口6 |端口7 |端口8 |端口9 |端口10|


所有连接都正常,并经过三次或多次检查
信息:对比度可调

核心代码:

class Looper extends BaseIOIOLooper {


// Create object for assigned to output port
private DigitalOutput D0,D1,D2,D3,D4,D5,D6,D7,RS,E;

// This function will do when application is startup
// Like onCreate function but use with ioio board
@Override
public void setup() throws ConnectionLostException {

    // Assigned eacth object to each output port and initial state is false

    D0 = ioio_.openDigitalOutput(3, false);
    D1 = ioio_.openDigitalOutput(4, false);
    D2 = ioio_.openDigitalOutput(5, false);
    D3 = ioio_.openDigitalOutput(6, false);
    D4 = ioio_.openDigitalOutput(7, false);
    D5 = ioio_.openDigitalOutput(8, false);
    D6 = ioio_.openDigitalOutput(9, false);
    D7 = ioio_.openDigitalOutput(10, false);
    RS = ioio_.openDigitalOutput(1, false);
    E = ioio_.openDigitalOutput(2, false);



            lcd_init();
            Print("LCD is ok", 0x82);

    }


}

// This function will always running when device connect with ioio board
// It use for control ioio board
@Override
public void loop() throws ConnectionLostException { }

// Function for send high pulse to LCD
public void enable() {
    try {

        // Set e to be High
        E.write(true);

        // Send high pulse for one millisecond
        Thread.sleep(1);

        // Set back to Low
        E.write(false);
    } catch (ConnectionLostException e) {
    } catch (InterruptedException e) { }
}

// Function for convert integer to boolean and send to data port on LCD
public void senddatabit(int i) {
    // Call function for convert integer to boolean
    // and set boolean logic to each port
    try {
        D0.write(check(i));
        D1.write(check(i >> 1));
        D2.write(check(i >> 2));
        D3.write(check(i >> 3));
        D4.write(check(i >> 4));
        D5.write(check(i >> 5));
        D6.write(check(i >> 6));
        D7.write(check(i >> 7));
    } catch (ConnectionLostException e) {
        e.printStackTrace();
    }       

    // Call enable function
    enable();
}

// Function for convert integer value to boolean
public boolean check(int i) {

    // Create variable for convert binary to boolean
    // Use for command LCD on IOIO Board
    boolean st = false;
    i = i & 0x01;
    // If i = 0 set st = false or if i =1 set st = true
    // and return st back to main program
    if(i == 0x00)
        st = false;
    else if(i == 0x01)
        st = true;
    return st;
}

// Send command to LCD
public void lcd_command(int com) {
    try {
        // Set rs port to low
        RS.write(false);
    } catch (ConnectionLostException e) {
        e.printStackTrace();
    }

    // Call senddatabit for send command
    senddatabit(com);
}

// Send command to LCD
public void lcd_write(int text) {
    try {
        // Set rs port to high
        RS.write(true);
    } catch (ConnectionLostException e) {
        e.printStackTrace();
    }

    // Call senddatabit for send data
    senddatabit(text);
}       

// Send data to LCD
public void lcd_init() {

    // LCD 8 Bit 5x7 Dot 2 Line
    lcd_command(0x38);

    // Clear screen
    lcd_command(0x01);

    // Display on, no cursor
    lcd_command(0x0C); 


}

// Send one letters to LCD with set address
public void SendC(char c, int address) {

    // Set address
    lcd_command(address);

    // Send the letters to LCD
    lcd_write(Integer.valueOf(c));
}

// Send text string to LCD
public void Print(String str, int address) {

    // Send the letters one by one until the end
    for (int i = 0; i < str.length(); i++) {
        SendC(str.charAt(i), address);
        address++;
    }
}
}
类循环器扩展了BaseIOIOLooper{
//创建分配给输出端口的对象
专用数字输出D0、D1、D2、D3、D4、D5、D6、D7、RS、E;
//此函数将在应用程序启动时执行
//与onCreate函数类似,但与ioio板一起使用
@凌驾
public void setup()引发ConnectionLostException{
//将每个对象分配给每个输出端口,初始状态为false
D0=ioio_u2;openDigitalOutput(3,false);
D1=ioio_u2;openDigitalOutput(4,false);
D2=ioio_u2;openDigitalOutput(5,false);
D3=ioio_u2;openDigitalOutput(6,false);
D4=ioio_u2;openDigitalOutput(7,false);
D5=ioio_u2;openDigitalOutput(8,false);
D6=ioio_u2;openDigitalOutput(9,false);
D7=ioio_u2;openDigitalOutput(10,false);
RS=ioio_u2;openDigitalOutput(1,false);
E=ioio_u2;openDigitalOutput(2,false);
lcd_init();
打印(“LCD正常”,0x82);
}
}
//当设备与ioio板连接时,此功能将始终运行
//它用于控制IO板
@凌驾
public void loop()抛出ConnectionLostException{}
//向LCD发送高脉冲的功能
公共作废启用(){
试一试{
//将e设置为高
写(真);
//发送高脉冲一毫秒
睡眠(1);
//调低
E.写(假);
}捕获(连接异常e){
}捕获(中断异常e){}
}
//用于将整数转换为布尔值并发送到LCD上的数据端口的函数
公共void senddatabit(int i){
//调用函数将整数转换为布尔值
//并为每个端口设置布尔逻辑
试一试{
D0.写入(检查(i));
D1.写入(检查(i>>1));
D2.写入(检查(i>>2));
D3.写入(检查(i>>3));
D4.写入(检查(i>>4));
D5.写入(检查(i>>5));
D6.写入(检查(i>>6));
D7.写入(检查(i>>7));
}捕获(连接异常e){
e、 printStackTrace();
}       
//调用启用函数
启用();
}
//用于将整数值转换为布尔值的函数
公共布尔检查(int i){
//创建用于将二进制转换为布尔值的变量
//用于IOIO板上的命令LCD
布尔st=假;
i=i&0x01;
//如果i=0,则设置st=false或如果i=1,则设置st=true
//并将st返回主程序
如果(i==0x00)
st=假;
else if(i==0x01)
st=真;
返回st;
}
//向LCD发送命令
公共无效lcd_命令(int com){
试一试{
//将rs端口设置为低
RS.write(假);
}捕获(连接异常e){
e、 printStackTrace();
}
//为send命令调用senddatabit
senddatabit(com),;
}
//向LCD发送命令
公共无效lcd_写入(整型文本){
试一试{
//将rs端口设置为高
RS.write(真);
}捕获(连接异常e){
e、 printStackTrace();
}
//调用senddatabit以发送数据
senddatabit(文本);
}       
//将数据发送到LCD
public void lcd_init(){
//LCD 8位5x7点2线
lcd_命令(0x38);
//清屏
lcd_命令(0x01);
//显示打开,无光标
lcd_命令(0x0C);
}
//向LCD发送一封带有设置地址的信函
public void SendC(字符c,整数地址){
//设定地址
lcd_命令(地址);
//把信寄给LCD
lcd_写入(整型值(c));
}
//将文本字符串发送到LCD
公共无效打印(字符串str,int地址){
//把信一封一封地寄到最后
对于(int i=0;i
我也有同样的问题。我不知道如何实现它。区别在于我使用的是C而不是java。尽管如此,我的代码似乎完全是你的。嘿,我已经解决了这个问题,我想让我们知道。我必须让它工作。让我知道你现在的状态。我的显示器在一号线上显示了16个街区。就这样。我做了所有的初始化并尝试了不同的初始化。