手把手教你学51单片机-C语言基础

二进制、十进制和十六进制

对于二进制来说,8 位二进制我们称之为一个字节。

我们在进行 C 语言编程的时候,我们只写十进制和十六进制,那么不带 0x 的就 是十进制,带了 0x 符号的就是十六进制。

C 语言变量类型和范围

C 语言的数据基本类型分为字符型、整型、长整型以及浮点型。

for 循环语句

while 循环语句

函数

形式参数列表,也叫做形参列表,这个是函数调用的时候,相互传递数据用的

 

函数值类型,就是函数返回值的类型。

一个工程文件必须有且仅有一个 main 函数,程序执行的时候,都是从 main 函数开 始的。

Keil 软件延时

 精确延时有两个方法,一个方法是用定时器来延时,另外一个就是用库函数_nop_();,一个 NOP 的时间是一个机器 周期的时间。

调试看一下延时的时间:

 

 流水灯程序

从左移到右,然后右边左移 

#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
    unsigned int i = 0;   //定义循环变量i,用于软件延时
    unsigned char dir = 0;   //定义移位方向变量dir,用于控制移位的方向
    unsigned char shift = 0x01;  //定义循环移位变量shift,并赋初值0x01

    ENLED = 0;
    ADDR3 = 1;
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
    while (1)  //主循环,程序无限循环执行该循环体语句
    {
        P0 = ~shift;              //P0等于循环移位变量取反,控制8个LED
        for (i=0; i<20000; i++);  //软件延时
        if (dir == 0)             //移位方向变量为0时,左移
        {
            shift = shift << 1;   //循环移位变量左移1位
            if (shift == 0x80)    //左移到最左端后,改变移位方向
            {
                dir = 1;
            }
        }
        else                      //移位方向变量不为0时,右移
        {
            shift = shift >> 1;   //循环移位变量右移1位
            if (shift == 0x01)    //右移到最右端后,改变移位方向
            {
                dir = 0;
            }
        }
    }
}
#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
    unsigned int i = 0;     //定义循环变量i,用于软件延时
    unsigned char cnt = 0;  //定义计数变量cnt,用于移位控制

    ENLED = 0;
    ADDR3 = 1;
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;
    while (1)  //主循环,程序无限循环执行该循环体语句
    {
        P0 = ~(0x80 >> cnt);      //P0等于0x80右移cnt位,控制8个LED
        for (i=0; i<20000; i++);  //软件延时
        cnt++;                    //移位计数变量自加1
        if (cnt >= 8)             //移位计数超过7后,再重新从0开始
        {
            cnt = 0;
        }
    }
}

 移位操作,其中>代表的是右移。比如 a = 0x01<<1;就是 a 的结果等于 0x01 左移一位。移位完之后,低位补0。