二进制、十进制和十六进制
对于二进制来说,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。