標(biāo)題: linux下microduino的驅(qū)動(dòng) [打印本頁(yè)]

作者: hongniu    時(shí)間: 2015-6-25 02:18
標(biāo)題: linux下microduino的驅(qū)動(dòng)
       自己筆記本系統(tǒng)是kalilinux,自帶anduino開(kāi)發(fā)環(huán)境,但沒(méi)有microduino的板子驅(qū)動(dòng)。
       將winddows下的IDE目錄下的hardware/Microduino/  目錄拷貝到linux下/usr/share/duino/。
        啟動(dòng)Arduino IDE就能在工具=>板卡 內(nèi)找到Microduino core的4種類(lèi)型的板了,

Microduino Core (Atmega328P@16M,5V)
Microduino Core (Atmega328P@8M,3.3V)選擇這個(gè)
Microduino Core (Atmega168PA@16M,5V)
Microduino Core (Atmega168PA@8M,3.3V)



接上lcd1602,四線(xiàn)接法,做個(gè)測(cè)試

軟件:
int LCD1602_RS=12;   
    int LCD1602_RW=11;   
    int LCD1602_EN=10;   
    int DB[] = { 6, 7, 8, 9};
    char str1[]="amserver.";
    char str2[]="";
    char str3[]="This is the";
    char str4[]="4-bit interface";

    void LCD_Command_Write(int command)
    {
    int i,temp;
    digitalWrite( LCD1602_RS,LOW);
    digitalWrite( LCD1602_RW,LOW);
    digitalWrite( LCD1602_EN,LOW);

    temp=command & 0xf0;
    for (i=DB[0]; i <= 9; i++)
    {
       digitalWrite(i,temp & 0x80);
       temp <<= 1;
    }

    digitalWrite( LCD1602_EN,HIGH);
    delayMicroseconds(1);
    digitalWrite( LCD1602_EN,LOW);

    temp=(command & 0x0f)<<4;
    for (i=DB[0]; i <= 9; i++)
    {
       digitalWrite(i,temp & 0x80);
       temp <<= 1;
    }

    digitalWrite( LCD1602_EN,HIGH);
    delayMicroseconds(1);
    digitalWrite( LCD1602_EN,LOW);
    }

    void LCD_Data_Write(int dat)
    {
    int i=0,temp;
    digitalWrite( LCD1602_RS,HIGH);
    digitalWrite( LCD1602_RW,LOW);
    digitalWrite( LCD1602_EN,LOW);

    temp=dat & 0xf0;
    for (i=DB[0]; i <= 9; i++)
    {
       digitalWrite(i,temp & 0x80);
       temp <<= 1;
    }

    digitalWrite( LCD1602_EN,HIGH);
    delayMicroseconds(1);
    digitalWrite( LCD1602_EN,LOW);

    temp=(dat & 0x0f)<<4;
    for (i=DB[0]; i <= 9; i++)
    {
       digitalWrite(i,temp & 0x80);
       temp <<= 1;
    }

    digitalWrite( LCD1602_EN,HIGH);
    delayMicroseconds(1);
    digitalWrite( LCD1602_EN,LOW);
    }

    void LCD_SET_XY( int x, int y )
    {
      int address;
      if (y ==0)    address = 0x80 + x;
      else          address = 0xC0 + x;
      LCD_Command_Write(address);
    }

    void LCD_Write_Char( int x,int y,int dat)
    {
      LCD_SET_XY( x, y );
      LCD_Data_Write(dat);
    }

    void LCD_Write_String(int X,int Y,char *s)
    {
        LCD_SET_XY( X, Y );    //設(shè)置地址
        while (*s)             //寫(xiě)字符串
        {
          LCD_Data_Write(*s);   
          s ++;
        }
    }

    void setup (void)
    {
      int i = 0;
      for (i=6; i <= 12; i++)
       {
         pinMode(i,OUTPUT);
       }
      delay(100);
      LCD_Command_Write(0x28);//4線(xiàn) 2行 5x7
      delay(50);
      LCD_Command_Write(0x06);
      delay(50);
      LCD_Command_Write(0x0c);
      delay(50);
      LCD_Command_Write(0x80);
      delay(50);
      LCD_Command_Write(0x01);
      delay(50);

    }

    void loop (void)
    {
       LCD_Command_Write(0x01);
       delay(50);
       LCD_Write_String(3,0,str1);//第1行,第4個(gè)地址起
       delay(50);
       LCD_Write_String(2,1,str2);//第2行,第2個(gè)地址起
       delay(5000);
       LCD_Command_Write(0x01);//
       delay(50);
       LCD_Write_String(0,0,str3);
       delay(50);
       LCD_Write_String(0,1,str4);
       delay(5000);

    }

顯示正常。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1