之前买来的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;
}
}
在发此贴之前,先谢谢本论坛高手的回复和帮助! |