擎天柱相关问题咨询
求大佬帮忙解决第一个问题:擎天柱运行带跟上位机串口通讯的程序,不能“离线”运行:不插电脑直接连接5V电源就死机。
第二个问题:任意IO口组成矩阵键盘数据口的问题。4x4矩阵键盘如果用成组的IO口,编程相对容易。
如果换为任意8个IO口组成矩阵键盘数据接线,就遇到了一个无法解释的问题。关键是我C语言基础太差了。{:yun:}
具体如下:下面一个函数Matrixkey_R()里面,8条语句不能用同样的语句“if(COL1)n|= 0x01; ”改用了最上面一条 “n&=(u8)COL1;”程序就正常工作了。
第三个问题:sbit COL1 = P2^0; //矩阵键盘的数据口端口定义
sbit COL2 = P2^1;
sbit COL3 = P2^2;
sbit COL4 = P2^3;
sbit ROW1 = P5^7;
sbit ROW2 = P5^6;
sbit ROW3 = P3^7;
sbit ROW4 = P3^6;
//矩阵端口数据处理
void Matrixkey_W(u8 m) //向8个管脚写入数据
{
COL1 = m & (0x01<<0);
COL2 = m & (0x01<<1);
COL3 = m & (0x01<<2);
COL4 = m & (0x01<<3);
ROW1 = m & (0x01<<4);
ROW2 = m & (0x01<<5);
ROW3 = m & (0x01<<6);
ROW4 = m & (0x01<<7);
}
u8 Matrixkey_R() //从8个管脚读出数据
{
u8 n;
n&= (u8)COL1;
// if(COL1) //这个地方有个疑问,如用了这两行代码,程序跑起来就不正常,
// n |= 0x01; //改用上一条代码,程序就正常,真是奇了怪了!
if(COL2)
n |= 0x02;
if(COL3)
n|= 0x04;
if(COL4)
n |= 0x08;
if(ROW1)
n |= 0x10;
if(ROW2)
n |= 0x20;
if(ROW3)
n |= 0x40;
if(ROW4)
n |= 0x80;
return n;
}
下面一个函数里面,8条语句不能用同样的语句“if(COL1)n|= 0x01; ”改用了最上面一条 “n&=(u8)COL1;”就正常工作了。
就这个函数,有没有更简洁明了的编写方式?
跟上位机串口通讯的程序,会等待USB连接,不连接USB就死等
页:
[1]