第2章 C51程序设计
2.1 C语言的特点
C语言具有简洁紧凑、灵活方便、运算符丰富、数据类型丰富、可移植性强、可直接访问硬件等特点。这些特点使得C语言非常适合用于51单片机的开发,既可以进行底层硬件操作,又能实现复杂的逻辑功能。
2.2 C语言程序的格式和特点
C语言程序由函数构成,至少包含一个 main 函数。程序以 ; 作为语句结束标志,使用 {} 来界定代码块。例如:
#include <reg51.h> // 包含51单片机的头文件,定义了特殊功能寄存器等
// main函数,程序入口
void main() {
// 主程序代码
while(1) {
// 无限循环
}
}
2.3 数据类型与存储区域的使用
2.3.1 C语言的数据类型
C语言基本数据类型包括整型(int)、字符型(char)、实型(float、double)等。例如:
int num; // 定义一个整型变量num
char ch; // 定义一个字符型变量ch
float f; // 定义一个单精度浮点型变量f
2.3.2 C51新增数据类型与存储区域的使用
C51针对51单片机特点新增了一些数据类型,如 bit(位类型)、sbit(可寻址位类型),以及不同的存储区域修饰符,如 data(内部数据存储器)、code(程序存储器)等。例如:
bit flag; // 定义一个位变量flag
sbit led = P1^0; // 定义P1.0口为led,可直接操作该位
unsigned char data buffer[10]; // 在内部数据存储器定义一个长度为10的无符号字符数组buffer
unsigned char code table[] = {
0x3F, 0x06, 0x5B, 0x4F}; // 在程序存储器定义一个数组table
2.4 运算符与表达式
2.4.1 算术运算符与算术表达式
算术运算符包括 +(加)、-(减)、*(乘)、/(除)、%(取余)等。例如:
int a = 5, b = 3;
int result1 = a + b; // result1为8
int result2 = a - b; // result2为2
int result3 = a * b; // result3为15
int result4 = a / b; // result4为1,因为是整数除法
int result5 = a % b; // result5为2
2.4.2 赋值运算符和赋值表达式
赋值运算符为 =,用于将右边的值赋给左边的变量。还有复合赋值运算符,如 +=、-= 等。例如:
int num = 10; // 赋值10给num
num += 5; // 等价于num = num + 5,此时num为15
2.4.3 关系运算符和关系表达式
关系运算符有 >(大于)、<(小于)、==(等于)、!=(不等于)、>=(大于等于)、<=(小于等于)。关系表达式的结果为真(1)或假(0)。例如:
int a = 5, b = 3;
int result1 = a > b; // result1为1
int result2 = a == b; // result2为0
2.4.4 逻辑运算符和逻辑表达式
逻辑运算符有 &&(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑表达式的结果同样为真(1)或假(0)。例如:
int a = 5, b = 3;
int result1 = (a > 0) && (b > 0); // result1为1,因为a > 0和b > 0都为真
int result2 = (a > 10) || (b > 0); // result2为1,因为b > 0为真
int result3 =!(a > 0); // result3为0,因为a > 0为真,取反后为假
2.5 指针与绝对地址访问
2.5.1 指针
指针是一个变量,其值为另一个变量的地址。例如:
int num = 10;
int *ptr; // 定义一个指向整型的指针ptr
ptr = # // 将num的地址赋给ptr
2.5.2 绝对地址的访问
在51单片机中,可以通过指针或C51提供的宏来访问绝对地址。例如:
#include <absacc.h> // 包含绝对地址访问头文件
#define P1_ADDR 0x90 // 定义P1口地址
unsigned char *p1 = (unsigned char *)P1_ADDR; // 定义指向P1口地址的指针
*p1 = 0x00; // 向P1口写0x00
2.6 控制语句与程序设计
2.6.1 C语言语句概述
C语言语句包括表达式语句、控制语句、函数调用语句、复合语句等。控制语句用于控制程序的执行流程。
2.6.2 赋值语句
如前面所述,用于给变量赋值。例如:
int num;
num = 20; // 赋值语句
2.6.3 if语句
用于条件判断。例如:
int a = 5;
if (a > 0) {
// 如果a > 0,执行这里的代码
} else {
// 如果a <= 0,执行这里的代码
}
2.6.4 switch语句
用于多分支选择。例如:
int num = 2;
switch (num) {
case 1:
// 当num为1时执行
break;
case 2:
// 当num为2时执行
break;
default:
// 当num不为1和2时执行
break;
}
2.6.5 goto语句以及用goto语句构成循环
goto 语句用于无条件跳转。例如:
int i = 0;
start:
if (i < 10) {
i++;
goto start;
}
2.6.6 while语句与do - while语句
while 语句先判断条件,再执行循环体;do - while 语句先执行循环体,再判断条件。例如:
// while语句
int i = 0;
while (i < 10) {
i++;
}
// do - while语句
int j = 0;
do {
j++;
} while (j < 10);
2.6.7 for语句
常用于已知循环次数的循环。例如:
for (int i = 0; i < 10; i++) {
// 循环体
}
2.6.8 break语句和continue语句
break 语句用于跳出循环或 switch 语句;continue 语句用于跳过本次循环的剩余部分,开始下一次循环。例如:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i为5时,跳出循环
}
}
for (int j = 0; j < 10; j++) {
if (j == 5) {
continue; // 当j为5时,跳过本次循环剩余部分
}
// 其他代码
}
2.7 位运算
位运算符包括 &(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)。例如:
unsigned char a = 0x05; // 二进制00000101

5681

被折叠的 条评论
为什么被折叠?



