有了点亮第一个LED灯的实验作为基础,我们对使用仿真软件和编程软件有了一定了解,知道如何进行仿真,如何编写程序。那么接下来让我们来看一下51单片机的实物,了解C语言基础,通过一个一个的实验去理解C语言语句的作用。通过实际的例子去理解C语言和单片机的结合使用。
0. 回忆点亮单灯实验代码
在点亮第一个LED灯的实验中,我们编写了这样一段代码。
就这么几行代码,就能让LED灯亮起来。我们有很多种方法都可以让LED点亮,这里不过是用了单片机,用到了编程将它实现,那么它到底有什么魔力呢,让我们来一一揭晓。
第一行代码,#include<文件名>,这是C语言的预处理指令,那么什么是预处理指令呢,这里做一个简单的介绍。
· 以“#”开头的指令叫预处理指令。
· 可以出现在任何位置,必须以一行结束,如果要换行,必须用“\”来连接两行内容。
· 预处理指令指示在程序正式编译前就由编译器进行的操作。
我们这里的预处理指令是文件包含。预处理指令还有宏定义,条件编译,宏指令,宏函数等,这里就不展开讲解了,如果大家有兴趣可以去查阅相关C语言资料。
该行代码中包含的是reg51.h这个文件,它主要是一些特殊功能寄存器的地址声明,比如代码中的P1,可以进行位寻址,还包括一些位地址的声明。在后面会详细说到这个文件中的内容。
第二行代码,void main(),首先我们知道C语言是面向过程的编程语言,函数是它的基本组成单位。C语言只有一个主函数,这个函数就是main(),程序的从这里开始执行,从这里结束,那么这句代码就是创建主函数的关键代码。主函数的完整代码如下。
void main() { 语句块; }
这个void是C语言的关键字,表示空类型,因为我们主函数是没有返回值的所以为空。
第四行代码,while(1),while也是C语言的关键字,用于创建循环语句,括号中是它结束的条件,条件为假时结束循环,当他的包含多条语句时需要用花括号把代码括起来。因为我们这里给了他一个常量,所以条件一直真,就会无限次执行这个循环里的代码。在我们的代码里面它会一直执行P1 = 0xfe;这句代码,所以大家会看到LED小灯会一直亮。
第六行代码,P1 = 0xfe;这句代码是给P1赋值,P1这个变量在reg51.h这个文件中已经定义好了,他表示的就是单片机的P1口,我们这里用的是字节操作,一次给单片机的8个I/O赋值。0xfe是一个十六进制数,它用二进制表示为 11111110,最低位刚好就是0,对应就给P1.0这个端口赋值为0,由此就可以点亮LED小灯。
1. 改进单灯实验代码介绍完了每一句代码的作用,那么我们就开始来改一改代码,让他又不一样的变化。
实验二:用位操作实现单灯闪烁。
需求分析:实现单灯闪烁。
硬件搭建:硬件还是点亮单灯的连接方式,这次我使用实物向大家展示真实效果,让大家有一个真实感受。
硬件实物
我们利用面包板和51单片机最小系统进行实验。
硬件:单片机最小系统,LED小灯,240Ω电阻,杜邦线,面包板。
实物原理图
实物连接
我这款单片机最小系统是带CH340串口转USB芯片的可以直接通过电脑进行烧写程序,如果是电脑仿真就可以直接进行烧写。
程序编写:我们要让这个灯在亮灭间循环,简单来说就是需要让P1.0这个口输出高低电平,我们让它输出一段时间高电平,再输出一段时间低电平就可以实现需求。
单灯闪烁代码
代码分析,这里我们新定义了一个函数delay(),用做软件延时,通过sbit关键字定义了LED0,让它表示我们的P1.0这个端口。这里的P1^0表示的是取P1口的第0位。通过延时我们让P1.0口不断地输出高低电平,由此就实现了实验需求。
程序烧写:
我们通过stc的官方烧写工具给单片机进行程序烧写。
stc官方烧写工具
首先我们需要选择单片机型号,我这款是stc89c52rc,然后选择串口号,我的串口号是com4,不同的电脑就不太一样,当然单片机上要有串口转USB的芯片才会出现这个选项,如果没有可以使用ISP下载,需要一各ISP下载器,可以根据自己的实际情况进行选择购买。左后就是选择打开程序文件,将hex文件在这个地方选好,就可以点击下载/编程按键,正常情况机会看到下面这个效果。
到此我们以及完成了整个实验。
2. 小小总结通过实物让大家感受单片机控制外部器件的能力,简单介绍了编写C语言的一些问题,作者能力有限,篇幅有限,很多地方没有讲全,我希望通过这个例子,来展示如何利用好软件,如何编写程序,怎么去实现自己想要的效果。
下一篇文章我将会在通过一个实例去讲解C语言如何控制单片机的输入输出,让对单片机感兴趣的读者进一步了解如何通过编写程序让单片机去控制外部硬件。如果有兴趣可以关注我,持续更新中。
点赞 关注 转发,是我创作的动力。希望大家继续支持我这个小小科技仔。