分享

MicroPython&PICO 8位二进制计数器

 新用户5228KeDY 2023-02-04 发布于北京

人类历史上最早的计算机是帕斯卡的加法机,纯机械式的,十进制,有不少视频可以看到,极精妙。最简单的加法机应该用二进制,象周易里的八卦那样,111→110→101→011……分别对应“连连连”、“断连连”、“连断连”、“连连断”……明显是移位再按位或运算。

STC89C51的流水灯里也是如此。先是给led一个最低位亮灯。经典51是低位亮起的。

led = 0b11111110;

P1= led;

接着把低位0移动7次,同时按位或0b00000001

for (i=0; i<7; i++) {

led = led << 1 | 0b00000001;

P1 = led;

}

这样就把脑子里的计算soft思维过程,放在电子的hardware电路过程里面了。这种软硬之间的切换和对应,实在神奇。

使用MicroPython也能模拟二进制运算,把数字和LED的亮暗对应到一起,如果有按钮,也是可以输入任意数字的。以下示例摘自Raspberry Pi Pico Essentials(Program, Build, and Master Over 50 Projects with MicroPython and the RP2040 Microprocessor)一书。代码中对LED引脚的list化和二进制串位的补齐,值得学习。

from machine import Pinimport utimePORT = [7, 6, 5, 4, 3, 2, 1, 0] # port connectionsDIR = ["0","0","0","0","0","0","0","0"] # port directonsL = [0]*8
def Configure_Port(): for i in range(0, 8): if DIR[i] == "0": L[i] = Pin(PORT[i], Pin.OUT) else: L[i] = Pin(PORT[i], Pin.IN) return
def Port_Output(x): print('dec b:',x) b = bin(x) # convert into binary print('bin b:',b) b = b.replace("0b", "") # remove leading "0b" diff = 8 - len(b) # find the length for i in range (0, diff): b = "0" + b # insert leading os for i in range (0, 8): if b[i] == "1": L[i].value(1) else: L[i].value(0) print(b[i],end='') print('\n--------------------') return## Configure PORT to all outputs#Configure_Port()## Main program loop. Count up in binary every second#cnt = 0while True: Port_Output(cnt) # send cnt to port utime.sleep(1) # wait 1 second cnt = cnt + 5 if cnt < 255 else 0

结果:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多