历史上的今天
今天是:2025年08月20日(星期三)
2021年08月20日 | 51单片机-流水灯的优化解说
2021-08-20 来源:eefocus
1.题目
为了更好地体现上一讲优化好的不支持连按代码的优势,我们来一道题目:用上7盏灯,左边6盏不停地流水,最右边1盏实现按键切换灯的打开和关闭,且按键动作不能干扰到流水灯的流速状态。
实验现象状态模拟如下
11111011//按键没按下
11110111//按键没按下
11101110//按键按下后抬起
11011110//按键没按下
10111111//按键按下后抬起
01111111//按键没按下
11111011//按键没按下
......
2.升华
在书写代码之前,我们来思考一下如何做到简化,如果按照以前的思路就是sbit的一个一个位地定义,这样的话就可以避免影响到LED2,因为LED2要实现自由,仅允许让按键来控制它的亮灭而已。
如果像之前用“P0=~(0x04<
首先要了解到“0xFE|0x00”还是等于0xFE,“0xFE|0x01”就等于0xFF了。
我们也知道LED2要么是等于0,要么是等于1的。当然也可以这么说:LED2要么是等于0x00,要么是等于0x01。十进制和十六进制表示的都是确定的数,只是书写方法不一样而已,比如我们都知道“P0=0xFF;”是熄灭8盏灯的作用,但是我们也可以这样写“P0=255;”,因为0xFF和255都是一个确定的数,只不过用0xFF更能让人快速反应出这个值用二进制表示会立马呈现出8个IO端口的输出状况。
所以我们只要这样表示“0xFE|LED2”,那这个表达式要么是等于0xFE要么是等于0xFF。
我们接着再了解,“(~0x04)&0xFF”还是等于(~0x04),用二进制表示为11111011,赋给P0就是只有LED4亮。
而“(~0x04)&0xFE”等于0xFA, 用二进制表示11111010,赋给P0就是只有LED2和LED4亮。
于是这么写“P0=~(0x04)&(0xFE|LED2);”的时候,LED2等于0时,就是LED2和LED4亮;LED2等于1时,只有LED4亮而已。
要想实现六盏灯流水则“P0=~(0x04<
本讲的代码我们在下一讲贴出,目的是为了比较当使用“while(KEY4==0);”的方式时是有多拙劣。
下一篇:51单片机-代码对比
史海拾趣
|
布线中除环路最小化原则外,还有一个环路的变化最小化原则,这个原则对于减小DC-DC的地弹意义重大。 ADI对此有一篇文章专门对此进行了详细的说明。非常值得EE们参考。… 查看全部问答> |
|
今天听交通台,主题是“快速解决”。一人说自己的前任得罪了一位四十多岁的客户,人家死活不签单。自己接手后,就紧着夸这位大姐:“您怎么看上去这么年轻”“您怎么这么事业有成”,该客户第二天就签单了。 真的是“千穿万穿,马屁不穿” ...… 查看全部问答> |
|
我用的TI的DM642DSP和BCM5221以太网芯片,进行连网 采用UDP协议,报文头: typedef union { Uint8 Bytes[6]; Uint16 Words[3]; }MacAddr; // Ethernet Header #define ETHHDR_SIZE&nbs ...… 查看全部问答> |
|
新买了一台电脑,是windows7的正版,不想删了,看到有人装了ce6.0,也试了一下,能装,但是每个月的update却装不了.有人碰到过吗? 安装顺序是这样的, 1,vs2005 2vs2005sp1 3.s2005 for vista 4.wince6.0 5.wince6.0 sp1 6.wince6.0 r2 7.update. ...… 查看全部问答> |
|
在照明行业,人们对于LED光源的调光往往有个误区,即认为对比其他光源(荧光灯,金卤灯和钠灯等)的调光LED相对容易的多。而现实是LED光源调光技术在工程中的应用中往往不尽人意,为什么会是这样的情形?是LED光源的调光 ...… 查看全部问答> |
|
哪些手段确保FPGA外部芯片提供的数据准确无误地进入FPGA内部? 通常采用哪些手段确保FPGA外部芯片(比如ad芯片,存储器读数据时)提供的数据准确无误地进入FPGA内部? \0\0\0eeworldpostqq… 查看全部问答> |




