写给自己的话

原文链接:https://www.9mblog.com/112.html

还记得大概两年前,也是初夏时节。我在csdn上写了第一篇激励自己学习的文章,之后便开始了每天更新一篇suricata源码分析。用了近一月的时间,把自己从suricata的门外带了进来。回想那时,学习是痛苦的,但进步也是飞速的。

之后很长的一段时间里,虽偶有更新,但大多都只是做个记录或随笔。没有成系统的进行学习。一年多的积累,居然不及当初一个月的成果显著。想想之前虚度的光阴,不免令人唏嘘。

时隔两年,还是相近的时间。我又要开始新一轮的学习了,这次的目标是traffic server。再照搬之前和尚和道士的故事未免显得老套。就把我这次的学习写成一个故事,故事的主旨叫做坚持。

 

准备开个关于traffic server插件的专栏。

Traffic server中大框架已经搭好,许多定制功能都可以通过插件完成。当然离自己开发还有一段距离,先从认识traffic server提供的插件开始。

这里要安利一下纸鸢的博客,里面对traffic server做了详细的解读。其中关于插件的文章有两篇:

ATS的插件介绍及使用

入门TrafficServer插件开发的正确姿势

我也是站在前人的肩膀上做一些补充工作,希望能对其他人有所帮助。

 

```markdown # 普中51实验板功能实现 —— 自主编写指南 ## 编写思路概述 要自己从零写出该程序,需遵循“模块化设计”思想,按以下步骤逐步构建: 1. **明确硬件连接** 确定按键、LED、数码管、蜂鸣器分别接在单片机的哪些引脚。 2. **划分功能模块** - 按键检测(带去抖) - LED控制 - 数码管动态扫描显示 - 蜂鸣器开关控制 3. **逐个实现函数** 将每个功能封装成独立函数,便于调试和维护。 --- ## 推荐代码结构(自主编写模板) ```c #include <reg52.h> // === 一、硬件引脚定义 === sbit KEY_S1 = P3^0; sbit KEY_S2 = P3^1; sbit KEY_S3 = P3^2; sbit KEY_S4 = P3^3; sbit LED = P2^0; sbit BEEP = P3^7; #define SEG_PORT P0 // 数码管段选接P0口 // 共阳极数码管编码:0~9 unsigned char code segCode[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; // === 二、延时函数 === void delay_ms(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } // === 三、按键去抖检测函数 === unsigned char readKey(sbit key) { if (key == 0) { // 检测到低电平(按下) delay_ms(10); // 软件延时去抖 if (key == 0) return 1; } return 0; } // === 四、动态数码管显示函数 === void showNumber(int num) { unsigned char temp[3]; temp[0] = num / 100; // 百位 temp[1] = (num / 10) % 10; // 十位 temp[2] = num % 10; // 个位 for (int i = 0; i < 3; i++) { SEG_PORT = segCode[temp[i]]; // 送段码 P2 = (P2 & 0xF1) | (1 << (i + 1)); // 打开对应位选(P2.1~P2.3) delay_ms(1); P2 &= 0xF1; // 关闭所有位选,防止重影 } } // === 五、主函数 === void main() { int count = 0; // 数码管显示值 bit beepOn = 0; // 蜂鸣器状态标志 // 初始化 LED = 1; // 初始熄灭(若高电平灭) BEEP = 1; // 蜂鸣器关闭(低电平响,故高为关) while (1) { // S1:切换LED if (readKey(KEY_S1)) { LED = !LED; delay_ms(20); } // S2:递增显示数字 if (readKey(KEY_S2)) { count++; if (count > 999) count = 0; delay_ms(20); } // S3:切换蜂鸣器 if (readKey(KEY_S3)) { beepOn = !beepOn; BEEP = beepOn ? 0 : 1; delay_ms(20); } // S4:LED翻转 + 数码管归零 if (readKey(KEY_S4)) { LED = !LED; count = 0; delay_ms(20); } // 刷新数码管显示 showNumber(count); } } ``` --- ## 自主编写建议流程 | 步骤 | 内容 | |------|------| | 1 | 先点亮一个LED,验证IO控制是否正常 | | 2 | 实现一个按键控制LED,掌握输入检测 | | 3 | 单独测试数码管静态显示一个数字 | | 4 | 实现动态扫描显示递增数 | | 5 | 添加蜂鸣器控制逻辑 | | 6 | 整合所有按键功能 | --- # 知识点 - **GPIO输入输出控制**:通过sbit定义引脚,读取按键状态或驱动外设,是单片机最基础操作。 - **按键去抖技术**:机械按键按下瞬间会产生抖动,需用软件延时(如10ms)过滤误触发。 - **动态数码管扫描原理**:分时选通每位数码管并送对应段码,利用视觉暂留实现多位显示效果。 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值