谁能解释一下这个程序的哪些灯亮,怎么亮啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能解释一下这个程序的哪些灯亮,怎么亮啊?相关的知识,希望对你有一定的参考价值。

#include<reg52.h>
typedef unsigned int uint;typedef unsigned char uchar;
sbit k1=P3^5; sbit k2=P3^4;
void led1();
void led2();
void delay(uint x) uchar a,b;
for(a=x;a>0;a--) for(b=110;b>0;b--);
void led1()
while(1) P1=0xff;
delay(500);
P1=0x7f;
delay(500);
P1=0x3f;
delay(500);
P1=0x9f;
delay(500);
P1=0xcf;
delay(500);
P1=0xe7;
delay(500);
P1=0xf3;

delay(500);
P1=0xf9;
delay(500);
P1=0xfc;
delay(500);
P1=0xfe;
delay(500);
P1=0xff;
delay(500);
if(k2==0) delay(5);
if(k2==0) led2();
while(!k2);
void led2() while(1) P1--; delay(100);
if(k1==0) delay(5);
if(k1==0) led1();

while(!k1);
void main()while(1) if(k1==0) delay(5);
if(k1==0) led1(); while(!k1);
if(k2==0) delay(5);
if(k2==0) led2();
while(!k2);

    这是一个用于控制LED灯的程序,适用于8051单片机。在这个程序中,有两种不同的LED闪烁模式:led1() 和 led2()。
    当按下k1按钮时(P3^5引脚接地),将执行led1函数;当按下k2按钮时(P3^4引脚接地),将执行led2函数。同时,在主循环main中检查是否有任何键被按下,并相应调用对应的功能。
    以下是每个功能如何工作以及它们使哪些LED亮起:
    - led1(): 这个函数会让8位二进制数从右到左依次点亮一盏灯并关闭前面已经点亮过得灯, 点完最后一盏之后所有都关上然后重复此操作。
    - P0: 01111111 (第一个 LED 关闭)
    - P0: 00111111 (第二个 LED 关闭)
    - P0: 10011111 (第三个 LED 关闭)
    ...

    - led2(): 这个函数会让8位二进制数从全开状态开始逐渐减小直至为零(即全部关闭),然后再恢复到全开状态重新开始。
    例如:
    * 开始:255
    * 减少:254
    * 减少:253
    ...
    注意,在每次改变LED状态之间还存在延迟(delay)来降低切换速度,提高观察效果。例如,在led1()中,每次改变LED状态后会有500个单位的延迟;在led2()中则是100个单位。
    总之,这段代码主要用于控制8盏 LED 灯以两种不同模式。
参考技术A 程序乱七八糟的……总之led1()是一个向下的低速流水灯,led2()是一个向上不断累积的快速流水灯。程序里面如果按键还能相互调用,可是又没有声明重入,编译器会警告的。

谁能解释一下栅栏密码??

参考技术A 栅栏密码
一、基本介绍
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。
一般来说见到一堆字母没有空格,就应该想一想是不是栅栏。
比较常见的是2栏的棚栏密码。
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
这样就得到我们需要的密码了!
而解密的时候,我们先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER
但是有些人就偏不把密码作出2栏,比如:
明文:THERE IS A CIPHER
七个一组:THEREIS ACIPHER
抽取字母:TA HC EI RP EH IE SR
组合得到密码:TAHCEIRPEHIESR
那么这时候就无法再按照2栏的方法来解了...
不过棚栏密码本身有一个潜规则,就是组成棚栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
这样,我们可以通过分析密码的字母数来解出密码...
比如:TAHCEIRPEHIESR
一共有14个字母,可能是2栏或者7栏...
尝试2栏 T A H C E I R
P E H I E S R
TPAEHHCIEEISRR
失败
尝试7栏
T A
H C
E I
R P
E H
I E
S R
THERE IS A CIPHER
成功
但是有的人出题时,题目中的字母个数是奇数,所以就有了下面的这种情况:
1,明文 you are beautiful
2,去空格
3,把它的字母一上一下地写:
y u r b a t f l
o a e e u i u
4,合并空格,然后把第二行移上来就成了:yurbatfloaeeuiu
二、变体
虽然栅栏密码最先主要是针对英文进行加密,但是随着越来越多的中国推理爱好者对加密方式的熟悉,他们自然而然的就想到了将栅栏与与汉语拼音结合。不过,当栅栏和拼音相结合后,诞生出一种令人痛恨的新思路...
比如在正道学院网络版的开篇flash中出现过这样一个棚栏:
QGBKSYSHJIEUEIIIIAN
总共19个字母~貌似不符合棚栏的规则...其实是因为出现了一个叫做捆绑的东西:
Q G B K S Y SH J
I E U E I I I IAN
七个不可思议事件
看到了吗?上面是声母,下面是韵母...
声母中的sh和韵母中的ian都是被作者当为一个字符使用
三、总结
今天所要讲的内容就是这些了。虽然内容有些简短,不过基本包含了栅栏密码中的一些要点。但是请大家注意,今天我虽然将栅栏密码单独进行了讲解,但是并不代表栅栏和其他的密码没有联系。其实每一种密码都可以和其他密码相结合,进行多次加密。因此,在以后解题的时候,不能局限于题目中的一两个特征就随意认为是用的哪一种密码。要仔细分析题目和所给的提示,防止自己上当受骗。本回答被提问者采纳

以上是关于谁能解释一下这个程序的哪些灯亮,怎么亮啊?的主要内容,如果未能解决你的问题,请参考以下文章

谁能解释这个 Erlang 崩溃转储?

我的代码出错了,谁能解释一下怎么回事?

谁能给我解释一下BIM轻量化是啥?而且我现在看到好多公司都在做BIM轻量化,有谁给我解释一下吗?

谁能解释一下float4数据类型

谁能解释一下linux下execle函数的用法吗?最好能给一个程序例子!

谁能解释一下啥叫看门狗