Skip to content

Commit e20abce

Browse files
committed
update
1 parent e7d5ac6 commit e20abce

File tree

7 files changed

+192
-30
lines changed

7 files changed

+192
-30
lines changed

assets/icons/update.svg

+1-7
Loading

config/_default/params.toml

+3-5
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ favicon = ""
66

77
[footer]
88
since = 2023
9-
customText = ""
9+
customText = "**Give_the_world_My_approaches**"
1010

1111
[dateFormat]
1212
published = "2006-01-02"
1313
lastUpdated = "2006-01-02 15:04"
1414

1515
[sidebar]
16-
emoji = "👻"
17-
subtitle = "翹課是爲了更好地學習"
16+
emoji = "🀄"
17+
subtitle = "俺都写嘞啥玩应啊?"
1818
[sidebar.avatar]
1919
enabled = true
2020
local = true
@@ -30,8 +30,6 @@ default = "CC BY-NC-SA 4.0"
3030
## Widgets
3131
[[widgets.homepage]]
3232
type = "search"
33-
# [[widgets.homepage]]
34-
# type = "archives"
3533
[widgets.homepage.params]
3634
limit = 5
3735
[[widgets.homepage]]
+169
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
---
2+
title: "8051单片机练习 | 电子时钟"
3+
date: 2023-12-13T08:33:24+08:00
4+
slug: 8051clock
5+
6+
categories:
7+
- explores
8+
tags:
9+
- embedded
10+
11+
links:
12+
- title: 项目源码
13+
description: 下次不写那么多注释了
14+
website: https://github.com/Proxyerium/8051-digital-clock
15+
image: https://github.com/favicon.ico
16+
---
17+
18+
我刚接触bms时,心血来潮想自己做个手台。但我的电子科技知识匮乏,动手能力也差,只是稍微看了些设计方案就草率开始行动——最终是毫无悬念的大失败:焊坏了3个焊盘、浪费了15张PCB、吃灰了一堆元件,我忏悔😭。对此一直耿耿于怀,所以大学加个社团,看看能不能进去学点什么再去追求我未竟的夙愿;而且当然不止手台,我还有很多别的小玩具想做。
19+
20+
社团首先介绍51系的单片机,我起初做手台尝试的Arduino,虽然Arduino也算简单的,但51事实地更简单,确实应该是我首先应该看看的。
21+
22+
本篇记录我对社团发的考核任务的实现方案。
23+
24+
## 任务内容
25+
26+
题目抽签来的,抽到个比较简单的😏:
27+
```txt
28+
电子时钟
29+
30+
基础部分:
31+
1.无论什么情况,当有按键按下蜂鸣器会响一声(10分)
32+
2.可以通过按键设置时间(切换时分秒),并有基本的时间功能,复位默认05:00:00用 24 小时制(20分)。
33+
3.实现秒表功能,秒暂停键按下停止计时,秒复位键按下後,秒回到00(20分)
34+
4.通过按键实现闹钟设置功能,闹钟时间到蜂鸣器响5次,闹钟时间自己可自己设定(20分)
35+
发挥部分:
36+
1.通过按键可设定日期并显示 (10分)。
37+
2.通过按键实现计时器的功能,即设定时间进行倒计时,倒计时时间可暂停默认10分钟,(也可自己设定),倒计时结束蜂鸣器响3下或者LED闪烁3次(15分)
38+
3.基础部分第3点当秒表停止计时时,可用存储模块储存记录时间数据,并复现(5分)
39+
```
40+
41+
## 我的方案
42+
43+
### 材料清单
44+
45+
![普中51-实验板(STC89C52RC芯片)](mcu.webp)
46+
47+
这就是全部了。我没有预先买任何材料,连这个也是从社团借来的。实现电子时钟应该要用上 *LCD1602* 模块,但是这块实验板上自带的模块已经足够实现题目要求的所有功能。既然如此,那就没有必要再买什么了😝。
48+
49+
### 开发环境
50+
51+
社团用的环境是 *keil5* + *stc-isp*
52+
53+
keil5算是老东西了,没有黑暗主题和自动补全,更不必说其他功能,我要用更现代的环境那就要另寻他法:
54+
55+
编译器[SDCC](https://sdcc.sourceforge.net) + 开发环境[EIDE](https://github.com/github0null/eide) + 下载器[stcgal](https://github.com/grigorig/stcgal)
56+
57+
刚开始遇上一堆问题,工作环境配置、keil和sdcc的语法差异、链接器报错之类的,还好都平稳解决,搞特殊果然总是麻烦一点🤐。
58+
59+
### 总体思路
60+
61+
使用实验板自带的两个 *3461AS* 数码管、蜂鸣器,以及四个独立按键,实现所有功能。
62+
63+
就设置成5种模式:
64+
65+
1. 时钟 `clock()`
66+
2. 日期 `date()` \
67+
算闰年的代码占了好多空间……
68+
3. 闹钟 `alarm()`
69+
4. 秒表 `timer()` \
70+
秒表最多储存10个时间数据,没有必要做太多。
71+
5. 沙漏 `sandglass()`
72+
73+
总体结构是用4个按键构成多级菜单,分别控制各个模式,结构示意如下:
74+
75+
> “|”後的表示长按触发的功能
76+
77+
```txt
78+
K1 -> Clock Mode | Date Mode
79+
K1 -> toggle format
80+
K2 -> setting
81+
K1 -> toggle unit | apply
82+
K2 -> minus
83+
K3 -> plus
84+
K4 -> go back
85+
K3 -> reset
86+
K4 -> go back
87+
88+
K2 -> Alarm Mode
89+
K1 -> toggle unit | apply
90+
K2 -> minus
91+
K3 -> plus
92+
K4 -> go back
93+
94+
K3 -> Timer Mode
95+
K1 -> start/pause | load
96+
K1 -> clear
97+
K2 -> previous
98+
K3 -> next
99+
K4 -> go back
100+
K2 -> save
101+
K3 -> reset
102+
K4 -> go back
103+
104+
K4 -> Sandglass Mode
105+
K1 -> start/pause
106+
K2 -> setting
107+
K1 -> toggle unit | apply
108+
K2 -> minus
109+
K3 -> plus
110+
K4 -> go back
111+
K3 -> reset
112+
K4 -> go back
113+
```
114+
115+
### 按键功能
116+
117+
实验板上那矩阵键盘的16个按钮也能用,但是感觉不方便管理,就用4个得了;也没有那么多功能需要用到长按,所以长按只写在K1里。
118+
119+
### 定时器和中断系统
120+
121+
用到了 `T0` `T1` 两个内部定时器。
122+
123+
`T0` 用于需要触发的模式:计时器和沙漏,用户通过按钮控制 `TR0` ,状态为开启时才工作;
124+
125+
`T1` 用于需要持续运行的模式:时钟和闹钟,日期等着时钟的溢加就得,所以没有放进去。
126+
127+
### process类方法
128+
129+
这类方法通过中断系统的执行来处理各个功能的运行逻辑,只需考虑溢加和各单位的进位就得。
130+
131+
### setting类方法
132+
133+
这类方法让用户调整时间数据,和process类一样只需注意进位,不同之处是多了下溢的情况。
134+
135+
unsigned char 类型的数值范围是0~255,发生下溢时会从0跳至255。
136+
137+
## 遭遇的问题
138+
139+
没有遇到难以逾越的障碍,基本是一些细枝末节卡得我发慌,然後突然莫名其妙地全部迎刃而解😩。
140+
141+
- 忘记打开中断系统的总开关(EA);
142+
- `switch` 的每个 `case` 都要加上 `break;` 否则它会继续往下执行;
143+
144+
## 没实现的效果
145+
146+
- **根菜单是空的** \
147+
就显示了个 `[------]` ,其实可以设定个默认模式之类的,但是懒得弄了。
148+
- **74HC595** \
149+
*74HC245* 驱动的数码管,但是控制数码管显示位的引脚和那一排LED的是共用的,所以有三个LED总是常亮,想换 *74HC595* 驱动数码管,但是懒得学了。
150+
- **按键位置不合适** \
151+
Timer读取历史记录时是K1按钮清空历史数据,应该把调整加减的按钮全设为K1和K2才对,这样清零和复位就都放在K3了,但是懒得挪了。
152+
- **数码管闪烁** \
153+
本来以为 `delay()` 没办法实现的,做完才想到其实也能行的,但是懒得再搞了。
154+
- **统一蜂鸣器频率** \
155+
忘记了,懒得调了。
156+
157+
总结与反思:懒得。
158+
159+
## 收尾
160+
161+
这算是我第一个正经做出来的项目呢,前前後後写了两周多,最终还挺像那么一回事。这个项目不会再更新了,毕竟只是个小小的作业而已,做完之後就把板子还回去了,没机会再调试。
162+
163+
## 参考资料
164+
165+
[普中官方数据手册](https://www.stcmicro.com/datasheet/STC89C51RC-cn.pdf)
166+
167+
[Bilibili - 51单片机入门教程-2020版](https://www.bilibili.com/video/BV1Mb411e7re)
168+
169+
[Bilibili - 入坑单片机--[12]](https://www.bilibili.com/video/BV1YV4y1K72Q)
96.7 KB
Binary file not shown.

content/post/dorm-router/index.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ slug: dorm-router
66
categories:
77
- explores
88
tags:
9-
- internet
9+
- web
1010
- hardware
1111
---
1212

13-
很有必要在宿舍使用路由器。这边的网络是**每个学生向运营商办一份校园宽带,由管理员将其同学生账号绑定**后才可使用校园网。电信的宽带起步都59了,只是为了用个网就要交那么多月租,很不划算的。<br>
13+
很有必要在宿舍使用路由器。这边的网络是**每个学生向运营商办一份校园宽带,由管理员将其同学生账号绑定**後才可使用校园网。电信的宽带起步都59了,只是为了用个网就要交那么多月租,很不划算的。<br>
1414
所以使用路由器的话,和其他同学合租一个套餐,就能省下不少月租的开销😋。
1515

1616
本篇记录我在折腾路由器时遇到的问题和解决方法 ~~和我愚蠢的思路~~
1717

1818
****
1919
## 🚩路由器
2020
校园网的方案是每个宿舍设置一台光猫,有线网络连网线;无线信号由光猫发射,都是2.4GHz的。<br>
21-
学校说是禁止使用路由器,后来又更新了规定说是不推荐使用路由器,现在这两条规定自相矛盾地共存着。而且似乎也没说有什么违规惩罚,只有**可能会出现网络频繁掉线或重新登陆或被封禁5分钟的情况**
21+
学校说是禁止使用路由器,後来又更新了规定说是不推荐使用路由器,现在这两条规定自相矛盾地共存着。而且似乎也没说有什么违规惩罚,只有**可能会出现网络频繁掉线或重新登陆或被封禁5分钟的情况**
2222

2323
家里有空闲的路由器能用,不过我还是买了个。因为当时既没有所需的工具,更因为我太菜了根本不会线刷路由器😭。
2424

@@ -97,7 +97,7 @@ OpenWrt是一个基于Linux的针对嵌入式设备和路由器的操作系统
9797

9898
## 📡网络配置
9999
这一部分走的弯路最多。<br>
100-
我最开始是连接为主路由,wifi用不得就以为这样不行,又尝试旁路由,路由器又连不上网了,绕到最后才知道wifi在`Interfaces`里面要选择lan接口才对,其实最开始的主路由就是正确的,我是白痴😭。
100+
我最开始是连接为主路由,wifi用不得就以为这样不行,又尝试旁路由,路由器又连不上网了,绕到最後才知道wifi在`Interfaces`里面要选择lan接口才对,其实最开始的主路由就是正确的,我是白痴😭。
101101

102102
### 网线连接
103103
示意图:
@@ -141,7 +141,7 @@ WAN 路由器
141141
1. 到`System/Software`面板中;
142142
2. 点击`Update lists...`等待完成;
143143
3. `Filter`搜索**luci-i18n-base-zh-cn**
144-
然后`install`等待完成;
144+
然後`install`等待完成;
145145
4. 到`System/System/`面板中,`Language and Style`标签中切换语言。
146146

147147

content/post/sorting-algorithms/index.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,16 @@ tags:
1212

1313
****
1414
## 冒泡排序 Bubble-sort
15-
最简单的算法之一。比较两个数据,然后根据需求交换位置,循环至没有任何数据被交换,即完成排序。
15+
最简单的算法之一。比较两个数据,然後根据需求交换位置,循环至没有任何数据被交换,即完成排序。
1616

1717
### 复杂度
1818
> 时间复杂度:$O(n^2)$ \
1919
> 空间复杂度:$O(n)$
2020
2121
### C实现
2222
```c
23-
/*
24-
flag: immediately terminate sorting if equal 0
25-
*/
23+
// flag: immediately terminate sorting if equals 0
24+
2625
for(int i=0; i<len-1; i++){
2726
for(int ii=0;ii<len-1-i; ii++){
2827
if(a[ii]>a[ii+1]){
@@ -32,10 +31,12 @@ for(int i=0; i<len-1; i++){
3231
flag += 1;
3332
}
3433
}
35-
if(flag==0)
34+
if(flag==0){
3635
break;
37-
else
36+
}
37+
else{
3838
step += flag;
3939
flag = 0;
40+
}
4041
}
4142
```

content/post/use-hugo/index.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ tags:
1111
links:
1212
- title: hugo官方文档
1313
description: 在看了在看了🤯
14-
website: https://gohugo.io/documentation/
15-
image: https://d33wubrfki0l68.cloudfront.net/d7c79b5c53384a57cfcf5bfb1a3f6f009a058b0b/16f81/images/gopher-hero.svg
14+
website: https://gohugo.io/documentation
15+
image: https://gohugo.io/favicon.ico
1616
---
1717

1818
hugo是我用的第一个静态网页框架。
@@ -21,12 +21,12 @@ hugo是我用的第一个静态网页框架。
2121
本篇记录我在探索Hugo的基本的搭建流程以及遇到的各种问题。
2222

2323
****
24-
## 🎈安装hugo
24+
## 安装hugo
2525
hugo有两个版本,*standard**extended**extended*自带scss转译器,hugo的主題多是用scss的,所以最好直接用*extended*,不然主题都用不得。
2626

2727
hugo提供很多安装方式,我还没有用包管理器的习惯,所以直接到[releases](https://github.com/gohugoio/hugo/releases)下载。
2828

29-
## 🎨使用主题
29+
## 使用主题
3030
hugo的[官方的主题列表](https://themes.gohugo.io/),提供几百种主题可选;
3131

3232
这里用的是[@CaiJimmy](https://github.com/CaiJimmy)大佬的[hugo-theme-stack](https://github.com/CaiJimmy/hugo-theme-stack)主题,简洁大方🥰:
@@ -51,7 +51,7 @@ hugo主题有*git submodule*和*hugo module*两种安装方法。
5151

5252
我用的*hugo module*,因为我实在懒得解决使用*git submodule*造成的主题没生效而导致Page Not Found😵。
5353

54-
## 📄内容管理
54+
## 内容管理
5555
内容管理是hugo的核心内容最多的部分。不可能用这么短的篇幅介绍完的(挖坑)。<br>
5656
目前就只是能把网站跑起来的阶段,也就理解了皮毛,更深的我不会🤓。
5757

@@ -96,7 +96,7 @@ description: "放点图片"
9696
9797
这种结构好像不用来写文章,应该是用于整理不同分区类型的,总之我还不会用🤓。
9898

99-
## 📤部署网站
99+
## 部署网站
100100
### Hugo Build
101101
直接用hugo自己的部署方式,这种方式简单。在命令行直接`hugo`,hugo会渲染出静态网页,放到`public`文件夹,然後直接把该文件夹推至远程仓库即可,不需要什么改动了。
102102

@@ -111,7 +111,7 @@ description: "放点图片"
111111
> 以上两种方法不出意外的话效果都一样的,只不过前者的源码没在仓库里。
112112
113113

114-
## 🎉收尾
114+
## 收尾
115115
暂时先这么多,还有很多核心功能我都还没怎么摸过:`shortcodes``templates``i18n``archetypes`...
116116

117117
等我回去再看一段时间😭🌹。

0 commit comments

Comments
 (0)