第一步,在Proteus中绘制原理图

(一)新建项目

1. 点击图标新建项目646959fac796411c917ea144e1d235e2.png

2.修改工程名称,随后点击Next(下一步)d455ff710532467dbf1c1e5418b4b190.png

3. 点击Next,下一步ea8d1369307840e386141c7ef9f27db0.png

4. Next

57c547ef653545eeb39096a61c522952.png

5. Next

147dc03f30c340699760cbb27dd3733a.png

6. 最后点击Finish

a1d14ceb13104ca3b3ac2976f79162c7.png

(二)摆放元器件

1. 添加元器件

fc217b5cac504228b7a0029513c642a1.png 添加一下元器件

d6c6a4eb3f5d42ad9b645fdb02b76fdd.png

2. 摆放单片机+晶振电路,注意晶振要设置成12MHZ,电容要设置成22pF

2315c27819ad403282b5139c36c31802.png 双击CRYSTAL,设置频率

81d41d6136924f049198b600449d7425.png双击C1 C2 设置电容为22pF82b11c0ac9524c4095b9bce4e5b58369.png

3. 摆放led等和电阻,并连接到P0口上

558e8dc9367b4f6faf886fba8dbf0bed.png

4. 最后给RST接上Power

06022a40672d4a96bda038199f0333cd.png

到此电路已经连接完毕,接下来可以开始编写51单片机的c语言程序,并实现 流水灯程序。

第二步,编写C程序,实现流水灯控制

1. 编写c语言代码

c
123456789101112131415161718192021222324252627282930313233343536
#include <reg51.h>

void delay_ms(unsigned int ms)
{
    unsigned int i;
    volatile unsigned char j; 

    if (ms == 0)
        return;

    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 125; j++)
            ; // 内层循环耗时约 1ms
    }
}

void main(void)
{
    int b;
    while (1)
    {
        // 10000000
        b = 128;
        for (int i = 0; i < 8; ++i)
        {
            // 对b取反,0变1,1变0
            P0 = ~b;
            // 向右移动
            b >>= 1;
            delay_ms(300);
        }

    }
}

代码的原理就是当通过右移和取反实现流水灯的运行,在第一次执行的时候设置b为128,所以b的二进制就是 10000000,然后对b取反就变成了 011111111,随后右移,b就变成了 01000000,取反后变成 10111111,循环往复。在上图中,vcc接到led,再接P0,那么只需要把P0的任意口设置成0(GND),led即可导通,取反就是让原有的1变成0,1变成0之后,那么对应的led口点亮,如果是1,那么对应的led就是灭的。 举个例子方便理解:原本10000000,取反后变成01111111,那么只有第一个是点亮的。

2. 复制以上代码到你的项目中

把代码复制到项目里面,这里就不重复不讲如何创建项目和构建项目了。

最后双击单片机,点击下面的图标,指定hex文件。

adce95a3ee6c453b9fe44570623bb6f9.png

41c75c6f910e4ff394966d177624e79b.png

最终效果

6b07746475984865b072c1b219f0111e.gif