单片机学习之——C51初识

  在搞清楚进制转换之后,接下来就正式进入C51单片机的学习了,在学习的过程中会穿插一些关于C语言的一些知识,毕竟C51本身就是C语言的一种衍生与应用。接下来我将会按照哔哩哔哩上找的视频教程针对C51进行逐步的学习。

  视频传送门:C51单片机编程基础-变量

一、C51的头文件

  我们先从程序框架来了解C51程序。

#include<reg51.h>   //头文件
int main(void) //主函数,main函数
{

return 0;
}

  这里的头文件分别有两种类型,一种是带有尖括号的叫做系统头文件,另一种是带有双引号的叫做自定义头文件。即:

<reg51.h>           //系统头文件
"head.h" //自定义头文件

  这意味着未来我们可以编写自己的头文件以用于我们自己写的程序。

二、C51当中的数据类型

  C语言当中常见的数据类型有以下几类:

char 字符型
int 整型
long 长整型
float 单精度浮点型
double 双精度浮点型
unsigned char 无符号字符型
unsigned int 无符号整型
unsigned long 无符号长整型

  然而在C51当中则还有以下几种常见的数据类型:

sfr 特殊功能寄存器
sfr16 16位特殊功能寄存器
bit 位类型
sbit 可寻址位

  例:

sfr P0 = 0x80;      //定义P0为P0端口在片内的寄存器,P0端口地址为80H
sfr P0 = 0x90; //定义P1为P1端口在片内的寄存器,P1端口地址为90H

sbit P1_1 = P1^1; //P1_1为P1中的P1.1引脚
//这样在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作

  在了解完前面的内容之后,我们可以通过一个简单的案例来实际应用一下。

  例题:简单地实现灯的亮灭。

  具体的代码过程如下:

#include <STC15.h>       //和C语言一样,在程序的开头引入STC15单片机的头文件。
sbit LED=P0^0; /*这里的“sbit”语句叫做“位定义”,即把单片机上的P0.0端口使用“LED”来表示。
应当需要注意的是,当定义io口的时候,“P”为大写字母,否则编译器会报错。*/
void delay(); /*请注意,这里的“delay”是延时函数,其目的是为了实现在LED灯亮灭间的时间间隔。
由于“main”这一主函数放在程序的最前面,当把自定义函数放在“main”函数后面时,
需要在“main”函数的前面添加该函数的声明。*/
void main()
{
while(1) //while旁边的括号当中为非0实数表示该循环语句为无限循环。
{
LED=0; //这里的“0”或者“1”需要查看原理图,“0”与“1”则代表高低电平,从而点亮LED灯。
delay();
LED=1;
delay();
}
}
void delay()
{
unsigned int i,g; /*这里定义了两个无符号的整型变量,在定义变量的时候请注意数字相对应的大小,
否则会产生数据溢出,也不必给予过多的内存空间,适量即可。*/
for(i=0;i<183;i++)
{
for(g=0;g<1000;g++); //这个“for”语句请看下面的讲解。
}
}

  上述代码当中出现了这么一段“奇怪”的代码:

for(g=0;g<1000;g++);

  其实这一段代码是下面这段代码的缩写:

foe(g=0;g<1000;g++)
{
; //这里只有分号,表示这里是一段空代码。
}

  “delay”函数在执行的时,程序执行“for”语句的嵌套循环,由代码可知,该“delay”函数将空代码执行了183000次。执行这一代码的时间刚刚好满足1秒,从而实现对LED灯亮灭的控制。