说到C51单片机,那可是我早年搞嵌入式开发时接触最多的东西了。记得那时候,我刚开始学习编程,第一个简单程序就是点亮一个LED灯。说实话,那时候觉得这玩意儿挺神奇的,一个微小的芯片就能控制硬件。
c
include <reg51.h> // 包含51单片机寄存器定义的头文件
void main() {
P1 = 0xFF; // 将P1端口的所有引脚都设置为高电平 while(1); // 无限循环 }
当时,我就在一个面包板上连接了一个LED灯和一个电阻,然后通过编程让这个LED灯亮起来。地点嘛,那是在大学实验室的一个角落里,那时候的电脑还是台式机,编程软件是Keil uVision。
这个程序挺简单的,核心就是设置P1端口的每个引脚为高电平,这样连接的LED灯就会亮。当时我也挺好奇的,这LED灯怎么就亮了呢?后来才知道,是因为电流通过LED灯的负极流向了正极,LED灯发光。
说实话,那时候的编程环境没有现在这么方便,调试程序都是通过串口打印信息来观察结果的。不过,那也让我对单片机编程有了初步的认识。现在回想起来,那段时间的学习经历还是蛮有趣的。
c
include <reg51.h>
void main() {
P1 = 0xFF; // 初始化P1端口为高电平 while(1) { P1 = 0x00; // P1端口置低电平 delay(500); // 延时500ms P1 = 0xFF; // P1端口置高电平 delay(500); // 延时500ms } }
// 延时函数 void delay(unsigned int ms) { unsigned int i, j; for(i = ms; i > 0; i--) for(j = 110; j > 0; j--); }
这就是坑,别直接用循环延时,效率低。
C51单片机简单程序示例: c
include <reg51.h>
void main() {
while (1) { P1 = 0xFF; // 点亮LED delay(1000); // 延时1秒 P1 = 0x00; // 熄灭LED delay(1000); // 延时1秒 } }
// 延时函数 void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 123; j++); }
项目:智能交通灯控制系统 时间:2022年1月 数字:延时1秒对应123次循环
开头
编写C51单片机简单程序其实很简单,关键在于熟悉寄存器操作和中断。
### 展开 先说最重要的,你需要了解单片机的硬件结构,比如如何操作I/O端口。比如,去年我们跑的那个项目,I/O端口操作大概需要3000行代码。另外一点,中断处理也非常关键,比如定时器中断,它在很多应用场景下都不可或缺。还有个细节挺关键的,就是寄存器配置,这直接关系到程序的运行效率和稳定性。
### 思维痕迹 我一开始也以为只要写好逻辑代码就可以了,后来发现不对,硬件配置同样重要。等等,还有个事,单片机的资源有限,所以代码要尽可能简洁高效。
### 结尾 我觉得值得试试的是,在编写程序前先画个流程图,这样有助于理清思路,避免在编码过程中走弯路。