极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24562|回复: 12

arduino就像一个美丽的女人却开发不了

[复制链接]
发表于 2011-12-28 09:41:18 | 显示全部楼层 |阅读模式
之前买来的UNO感觉引脚太少了,不好用。现在嘛自己做了一块MEGA2560,经过测试没有问题,可是引脚多是多了,但是感觉编程纯小白的我没有能力用起那么多引脚了,不得不感叹人就是个矛盾体啊,我在想ARDUINO确实比起其它单片机容易上手,但是要学深入好像比其它单片机难也。为什么这样觉得呢?因为我觉得ARDUINO要像其它单片机灵活控制IO口很坑爹,AVR单片机(为了输写方便,我知道ARDUINO本身主控制器就是一块AVR单片机,这里指的AVR单片机是非ARDUINO的AVR单片机)比如操作PB口的八个引脚时可以DDRB=0xff;一句多简单的事就设置了八个IO口为输出了,然后呢,在读和写碰到要同时控制8个IO口时实在不敢恭维ARDUINO,到现在还不知道怎么样同时方便地操作八个IO口的输出状态以及读取八个IO口状态。求高手指点下怎么样方便地像AVR单片机一样PORTB=0x_ _给八个IO口赋值;或者 D = PINB方便地读取等这样的操作。对了,下面附上一个我写的:同时(一个字节赋值给8个IO口)写八个IO口的输出的程序,希望有高手在帮我指点上面问题时,也帮我改善一下下面的程序:
char pin[] ={ 6, 7, 8, 9, 10, 11, 12, 13 };//用一个数组定义要控制的8个IO口
void setup()
{
  Serial.begin(9600);
for(int a=0;a<8;a++)//设置要控制的8个IO为输出状态
{
pinMode(pin[a],OUTPUT);
}
}
void loop()
{
Wrt_CMD(0xaa);//这里我写出了一个值为1010 1010,经过检测,这8个IO口确实如愿实现IO口的电平控制。
}
void Wrt_CMD(unsigned int cmd)//通过给cmd赋值实现同时控制8个IO口。
{
  for (int db_line = 0;db_line < 8;db_line++ )
  {
    if (cmd & 0x80)
      digitalWrite(pin[db_line], HIGH);
    else
      digitalWrite(pin[db_line], LOW);
    cmd <<= 1;
  }
}
在发此贴之前,先谢谢本论坛高手的回复和帮助!
回复

使用道具 举报

发表于 2011-12-28 13:03:49 | 显示全部楼层
本帖最后由 奈何col 于 2011-12-28 13:08 编辑

PORTB = 0xFF;
DDRB  = 0xFF;
直接这样写,就PB全高了~~~程序效率高多了
直接写gcc代码~可以正常编译的~
       
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 19:10:14 | 显示全部楼层
奈何col 发表于 2011-12-28 13:03
PORTB = 0xFF;
DDRB  = 0xFF;
直接这样写,就PB全高了~~~程序效率高多了

无奈老大理解错我的意思啦,用普通AVR单片机编程的话,利用ICC,WINAVR等编程软件这样写是没有问题的,但我的意思是ARDUINO是否也可以这样写呢?看我上面写的一个程序如果用普通AVR写的话只要两行:DDRB=0XFFORTB=0XAA;就搞定了。但是我用ARDUINO就不知道怎么写好了。特别是一次性读取八个IO口。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 19:14:27 | 显示全部楼层
プ汏坏疍 发表于 2011-12-28 19:10
无奈老大理解错我的意思啦,用普通AVR单片机编程的话,利用ICC,WINAVR等编程软件这样写是没有问题的, ...

比如说:我要用ARDUINO 控制一个16个按键的矩阵键盘,要怎么样控制比较好呢?
回复 支持 反对

使用道具 举报

发表于 2011-12-28 19:20:35 | 显示全部楼层
用arduino的函数,就只能一个个的读啊~对程序有要求的话,就直接用GCC写啊~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 20:59:08 | 显示全部楼层
奈何col 发表于 2011-12-28 19:20
用arduino的函数,就只能一个个的读啊~对程序有要求的话,就直接用GCC写啊~

嗯嗯。请问一下无奈大哥,arduino的主IC我们用GCC写了程序生成HEX文件后可以烧到上面去吗?另外烧写的时候是不是就不能用USB线直接给ARDUINO烧HEX文件呢?
回复 支持 反对

使用道具 举报

发表于 2011-12-29 23:26:08 | 显示全部楼层
你要直接烧,得用spi接口下,就UNO上面那个ICSP,,,,买个10多块的usbisp就可以下了
回复 支持 反对

使用道具 举报

发表于 2011-12-29 23:27:08 | 显示全部楼层
其实也可以用转串口的usb下载,但得有单独的上位机程序,,,这个我就不知道哪有了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-30 00:25:33 | 显示全部楼层
奈何col 发表于 2011-12-29 23:27
其实也可以用转串口的usb下载,但得有单独的上位机程序,,,这个我就不知道哪有了

额额,如果这样的话就是直接抛开ARDUINO,把ARDUINO的主IC当成普通的AVR用了,对吗?
回复 支持 反对

使用道具 举报

发表于 2011-12-30 02:46:37 | 显示全部楼层
是的~~~~~~~·
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-30 09:26:26 | 显示全部楼层
奈何col 发表于 2011-12-30 02:46
是的~~~~~~~·

看来这样还是很杯具。我想要的结果是如果能够:既有ARDUINO的“血统”,可以方便应用ARDUINO的库和编程语言,又有普通AVR的另外一个优点,可以方便地控制ARDUINO的八个口,实现一个字节之类的赋值,如果可以这样的话估计写程序就可以集百家之所长,变得很灵活了。特别是对于习惯了玩51,AVR,PIC的人来说。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-30 09:27:05 | 显示全部楼层
奈何col 发表于 2011-12-30 02:46
是的~~~~~~~·

谢谢无奈老大在此贴的不断解答哦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-30 09:41:13 | 显示全部楼层
奈何col 发表于 2011-12-28 19:20
用arduino的函数,就只能一个个的读啊~对程序有要求的话,就直接用GCC写啊~

无奈老大,现在我好高兴呀,貌似找到方法了,http://www.geek-workshop.com/forum.php?mod=viewthread&tid=389 这是我们论坛的高手写的一个程序。哈哈。好激动啊。宣告问题解决,太谢谢老大们的无私解惑和分享了。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 06:14 , Processed in 0.042042 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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