你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Char型变量与Bit型变量,如何进行”或运算”

[复制链接]
feixiang20 提问时间:2018-12-2 22:14 /
学习金沙工作时宋雪松老师《手把教你学 51 单片机 -C语音版》遇到不同变量直接的运算问题。
小人看C语言描述 :运算时 都是短字节向长字节转换。如char型变量 & int型变量,进行运算时,是编译器强制将char 转换成int型。

但宋雪松老师讲的如下:连续将key4值通过T0中断,一位一位用“或运算“写入char 型变量keybuf中。这与其他地方对不同变量的运算描述不符,请大神们赐教。小弟拜谢。

void InterruptTimer0() interrupt 1
{  static unsigned char keybuf = 0xFF;  //按键扫描缓冲区,保存一段时间内的扫描值   
    TH0 = 0xF8; TL0 = 0xCD;   
    keybuf = (keybuf << 1) | KEY4;  //只取KEY4为例,缓冲区左移一位,并将当前扫描值移入最低位
    if (keybuf == 0x00)
    { //当连续8次扫描值都为0,即16ms内都只检测到按下状态时,可认为按键已按下
        KeySta = 0;       //按键状态值为按下
    }
    else if (keybuf == 0xFF)
    { //当连续8次扫描值都为1,即16ms内都只检测到弹起状态时,可认为按键已弹起
        KeySta = 1;      //按键状态值为弹起
  }

评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20

查看全部评分

收藏 评论1 发布时间:2018-12-2 22:14

举报

1个回答
toofree 回答时间:2018-12-3 09:30:57
C51表达式默认是8位,除非表达式中有变量或常量超过8位的情况下,自动转为16位。
A = B + C;
当A为8位时,B+C之和的低8位赋给A;
当A为16位时,B+C之和的低16位赋给A;

评分

参与人数 1ST金币 +5 蝴蝶豆 +2 收起 理由
STMCU + 5 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版