51单片机从零到实战(5)——C语言补课
2026/7/24 1:33:12 网站建设 项目流程

第 5 篇:C 语言补习——单片机必须掌握的语法

前 4 篇可能有些语法大家半懂不懂。这篇帮零基础读者快速补齐。


1. 数据类型

类型大小范围单片机常用
unsigned char8 位0 ~ 255✅ 最常用
char8 位-128 ~ 127
unsigned int16 位0 ~ 65535✅ 延时/计数
unsigned long32 位0 ~ 4,294,967,295✅ 长时间计时

单片机第一原则:能用 unsigned char 就不用 int,能省 RAM 就省。512 字节的 RAM,每个变量都珍贵。

unsignedcharled_state;// 0~255,存 8 个 LED 状态,完美unsignedcharcount=0;// 0~255,计 100 次,够用unsignedinttime_ms=0;// 计毫秒,char 不够,必须 int

2. 位运算——单片机最核心的操作

// 把 P1 口的第 3 位清零,其他位不变P1&=~(1<<3);// P1 = P1 & (~0x08)// 把 P1 口的第 3 位置 1,其他位不变P1|=(1<<3);// P1 = P1 | 0x08// 取反第 3 位P1^=(1<<3);// 判断第 3 位是 0 还是 1if(P1&(1<<3)){// 第 3 位是 1}else{// 第 3 位是 0}

理解这句代码 = 单片机上了一个台阶:

P1|=(1<<3);// 1 << 3 = 0000 0001 左移 3 位 = 0000 1000// P1 | 0x08 → P1 的第 3 位一定是 1,其他位不变

3. #define 宏

#defineLED_PORTP1// 用名字代替数字#defineLED0P1^0#defineON0// LED 低电平亮#defineOFF1LED0=ON;// 今天写 ON/OFFdelay(500);LED0=OFF;// 三个月后回来看代码,秒懂

4. 模块化编程——拆分 .h 和 .c

MyProject/ ├── main.c // 主逻辑 ├── delay.h // 延时函数声明 ├── delay.c // 延时函数实现 ├── led.h // LED 模块声明 └── led.c // LED 模块实现

led.h:

#ifndef__LED_H__#define__LED_H__#include<reg52.h>voidled_init(void);voidled_on(unsignedcharnum);voidled_off(unsignedcharnum);#endif

led.c:

#include"led.h"voidled_init(void){P1=0xFF;}voidled_on(unsignedcharnum){P1&=~(1<<num);}voidled_off(unsignedcharnum){P1|=(1<<num);}

main.c:

#include"led.h"#include"delay.h"voidmain(){led_init();while(1){led_on(0);delay(200);led_off(0);delay(200);}}

5. 常用关键字

关键字含义用途
code存 Flash段码表、字库等大量常量
data存内部 RAM(低 128B)频繁读写的变量
xdata存外部 RAM大数组(如果外扩了 RAM)
sbit定义位变量操作单个引脚
sfr定义特殊功能寄存器P1=0x90 这种映射

6. 小结

  • unsigned char 是单片机的"主力类型"
  • 位运算(& | ~ ^ << >>)必须熟练掌握
  • 宏定义让代码可读性提升 10 倍
  • 模块化从第一个工程就开始做

下一篇:中断——让单片机同时做多件事


下一篇:中断——让单片机同时做多件事

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询