找回密码
 立即注册
查看: 172|回复: 1

擎天柱相关问题咨询

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-03-18 11:09:37
已绑定手机

23

主题

20

回帖

207

积分

中级会员

积分
207
发表于 2025-1-21 13:19:29 | 显示全部楼层 |阅读模式
求大佬帮忙解决
第一个问题:擎天柱运行带跟上位机串口通讯的程序,不能“离线”运行:不插电脑直接连接5V电源就死机。


第二个问题:任意IO口组成矩阵键盘数据口的问题。4x4矩阵键盘如果用成组的IO口,编程相对容易。
如果换为任意8个IO口组成矩阵键盘数据接线,就遇到了一个无法解释的问题。关键是我C语言基础太差了。
具体如下:下面一个函数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;”就正常工作了。
就这个函数,有没有更简洁明了的编写方式?

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2025-1-21 16:34:39 | 显示全部楼层
跟上位机串口通讯的程序,会等待USB连接,不连接USB就死等
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:43 , Processed in 0.106055 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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