找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3477|回复: 0
打印 上一主题 下一主题
收起左侧

linux下microduino的驱动

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-25 02:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       自己笔记本系统是kalilinux,自带anduino开发环境,但没有microduino的板子驱动。
       将winddows下的IDE目录下的hardware/Microduino/  目录拷贝到linux下/usr/share/duino/。
        启动Arduino IDE就能在工具=>板卡 内找到Microduino core的4种类型的板了,

Microduino Core (Atmega328P@16M,5V)
Microduino Core (Atmega328P@8M,3.3V)选择这个
Microduino Core (Atmega168PA@16M,5V)
Microduino Core (Atmega168PA@8M,3.3V)



接上lcd1602,四线接法,做个测试

软件:
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 );    //设置地址
        while (*s)             //写字符串
        {
          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线 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个地址起
       delay(50);
       LCD_Write_String(2,1,str2);//第2行,第2个地址起
       delay(5000);
       LCD_Command_Write(0x01);//
       delay(50);
       LCD_Write_String(0,0,str3);
       delay(50);
       LCD_Write_String(0,1,str4);
       delay(5000);

    }

显示正常。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表