本例仿真中,LED共阳极方式连至P1口,且按低位到高位排列 ? ? ? ? ? ? ? ? ? ? ?↓为实现显示二进制式 一般,单片机上电默认是高电平,此时:P1=1111 1111(即十六进制的F),所有灯不亮 ? ? ? ? ? ? ? ? ? ? ?↓ ⑴以亮的方式递增显示二进制 ? ? 由仿真电路图中,可知第一个LED是低位的开始,要让第一个LED亮起表示0001,此时对应 ????P1.0=0,则P1=1111 1110,往下分析可得:1111→1110→1101→ 1100→1011→1010?→…… ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? F? ? ?→E? ? ?→D? ? ?→C? ? ? →B? ? ? →A? ? ? →…… ? ? ①可以发现,每次倒叙都是上次-1的结果,即P1=P1-1或P1--。于是采用自减法: →
? ? ?②~0001=1110→~0010=1101→~0011=1100→……,可以发现是1111逐渐+1同时取反的结果, ? ? ? ??于是采用自增法: → ? ?此时发现,与目标不符合,分析代码的逻辑为: ??????????????????????????????开始时P0=1111 1111; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??~?P0 =0000 0000; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? P0++=0000 0001(即在共阳极LED下,第一个不亮其它全亮) ? 分析后得知,需1111 1111自增的同时取反,故给这个1111 1111赋值给一个变量,对变量进行 ??操作: →
⑵以灭灯的方式递增显示二进制则与以上的运算符相反即可。
|