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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版