// L1-016 8位二进制计数灯 教师完整版
// 位权:128、64、32、16、8、4、2、1
int b128 = 13;
int b64 = 12;
int b32 = 11;
int b16 = 10;
int b8 = 9;
int b4 = 8;
int b2 = 7;
int b1 = 6;
int count = 0;
void setup()
{
pinMode(b128, OUTPUT);
pinMode(b64, OUTPUT);
pinMode(b32, OUTPUT);
pinMode(b16, OUTPUT);
pinMode(b8, OUTPUT);
pinMode(b4, OUTPUT);
pinMode(b2, OUTPUT);
pinMode(b1, OUTPUT);
}
void loop()
{
// 逐位解码:低位取余、高位整除剥离
digitalWrite(b1, (count % 2 == 1) ? HIGH : LOW);
digitalWrite(b2, ((count / 2) % 2 == 1) ? HIGH : LOW);
digitalWrite(b4, ((count / 4) % 2 == 1) ? HIGH : LOW);
digitalWrite(b8, ((count / 8) % 2 == 1) ? HIGH : LOW);
digitalWrite(b16, ((count / 16) % 2 == 1) ? HIGH : LOW);
digitalWrite(b32, ((count / 32) % 2 == 1) ? HIGH : LOW);
digitalWrite(b64, ((count / 64) % 2 == 1) ? HIGH : LOW);
digitalWrite(b128,((count / 128)% 2 == 1) ? HIGH : LOW);
delay(150);
count++;
// 8位二进制溢出归零
if(count > 255)
{
count = 0;
}
}