流水灯是一个很经典的入门项目,学单片机大部分都是从流水灯开始!
一、编程
先贴上代码:
#include <reg51.h>
#include <intrins.h>
void delay_ms(int a)
{
int i,j;
for(i=0;i<a;i++)
{
for(j=0;j<1000;j++) _nop_();
}
}
void main(void)
{
while(1)
{
P0=0xfe;
delay_ms(50);
P0=0xfd;
delay_ms(50);
P0=0xfb;
delay_ms(50);
P0=0xf7;
delay_ms(50);
P0=0xef;
delay_ms(50);
P0=0xdf;
delay_ms(50);
P0=0xbf;
delay_ms(50);
P0=0x7f;
delay_ms(50);
}
}
1.关于头文件
(1)51单片机编程的常用头文件有以下几个:
reg51.h,math.h,stdio.h,stdlib.h,absacc.h,intrins.h
(2)头文件里头是什么内容呢?
我们可以单击头文件的那一行,然后右键,选择“open document <xxx.h>”,然后我们就可以看看头文件里是什么内容了。
对于头文件<reg51.h>,我们打开后可以发现是这样的:
sfr 声明一位8位寄存器
sfr16 16位特殊功能寄存器
sbit 声明特殊功能位
bit 位变量的声明
2.关于延迟函数
首先我们得先来讲一下时钟周期,如果单片机的晶振是a MHz,那么时钟周期就是1/a微秒。而单片机执行一条语句的时间,也就是机器周期,为12个时钟周期,也就是12/a微秒。如果单片机的晶振是12MHz,那么一个机器周期就是1微秒,那么延时1微秒就只需要执行一个空语句。依次类推,延时1ms就要执行1000个空语句。
3.生成hex文件
不论是proteus仿真还是真正的单片机执行,要加载或下载的都是这个hex文件。那么如何生成hex文件呢?见以下的两步操作:
然后再编译一次就可以了。
二、仿真
先贴上仿真效果:
1.关于proteus的放置元器件
(1)放置元件和单片机
然后在框里打入关键字即可。
(2)放置电源和地
(3)放置总线
然后在图中想要的地方画上,结尾处要双击
2.关于总线
画上总线后,将单片机的各个引脚街道总线上,并把各个LED的引脚接到总线上,这个时候,系统是不知道单片机的哪个引脚和LED的引脚接在一起的,因此要使用网络标签,具有相同网络标签的引脚就是接在一起的。
3.画好原理图后怎么仿真呢?
然后找到刚刚保存的hex文件加载进去,就可以进行仿真了!
对流水灯的编程和仿真就讲到这里了,如有什么疑问或文章有什么纰漏,都欢迎留言交流呀!大家互相学习,共同进步!