• 单片机编程小技巧总结--随时更新


    字节操作修改位

    设置TMOD

    将定时器0设置为模式1,且不干扰定时器1配置

    TMOD = TMOD&0xF0;//高四位不变,低四位清零
    TMOD = TMOD|0x01;//高七位不变,最低位置1

    简写

    TMOD &= 0xF0;
    TMOD|= 0x01;

    数码管扫描

    动态扫描switch简写

    P0 = 0xFF;
    P1 = (P1 & 0xF8) | i;
    P0 = LedBuff[i];
    if(i < 5)
        i++;
    else
         i = 0;

    注:这部分与硬件有关,不能照搬,需要对应自己数码管电路

     0xF8即为二进制11111000,与P1与即,不改变P1高5为,后3为置零;与i或则第三位值为i。

     我的数码管由三八译码器控制;

    引脚分别为P2^0, P2^1, P2^2.记为P20, P21, P22.

    按P22,P21,P20顺序,初始值全为1,即0b111,

    减1为0b110,此时小灯亮

    再减1为0b101,此时末尾数码管亮(最右边)

    再减1为0b100,此时从右边数第二个数码管亮,以此类推

    十进制 二进制
    0 0000
    1 0001
    2 0010
    3 0011
    4 0100
    5 0101
    6 0110
    7 0111

    所以按顺序应为:(P1&0xF8)|(~(i+1))

    注:
    直接P1 等于一个值,P1^0对应的是这个值的二进制最低位。

    P1=2,2的二进制是 10,送到 1 位引脚的数据,只能是末尾的 0。

    --欢迎各位补充

  • 相关阅读:
    CJB的大作
    OI省选算法汇总
    bzoj1078【SCOI2008】斜堆
    zrt中文题
    bzoj4726【POI2017】Sabota?
    bzoj4591 【Shoi2015】超能粒子炮·改
    bzoj2086【Poi2010】Blocks
    bzoj2091【Poi2010】The Minima Game
    bzoj2038小z的袜子
    bzoj4282慎二的随机数列
  • 原文地址:https://www.cnblogs.com/hgyzm/p/14446693.html
Copyright © 2020-2023  润新知