一只小菜鸟 发表于 2025-1-21 13:19:29

擎天柱相关问题咨询

求大佬帮忙解决
第一个问题:擎天柱运行带跟上位机串口通讯的程序,不能“离线”运行:不插电脑直接连接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;”就正常工作了。
就这个函数,有没有更简洁明了的编写方式?

CyberHamster 发表于 2025-1-21 16:34:39

跟上位机串口通讯的程序,会等待USB连接,不连接USB就死等
页: [1]
查看完整版本: 擎天柱相关问题咨询