使用Proteus 仿真51单片机流水灯
第一步,在Proteus中绘制原理图
(一)新建项目
1. 点击图标新建项目
2.修改工程名称,随后点击Next(下一步)
3. 点击Next,下一步
4. Next

5. Next

6. 最后点击Finish

(二)摆放元器件
1. 添加元器件
添加一下元器件

2. 摆放单片机+晶振电路,注意晶振要设置成12MHZ,电容要设置成22pF
双击CRYSTAL,设置频率
双击C1 C2 设置电容为22pF
3. 摆放led等和电阻,并连接到P0口上

4. 最后给RST接上Power

到此电路已经连接完毕,接下来可以开始编写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文件。


最终效果

