字节操作修改位
设置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。
--欢迎各位补充