欢迎各位新生来到科协电子部!
考虑到很多人并没有特别多的电子基础,并且很希望加入科协这个平台。我特地出了一道比较简单的免试题,相信大家只要跟着这个教程走完,是一定能够做出来的。
本文相较于传统的免试题,更像是一个入门教程。跟着本文走完全程,相信你会对总线通信,外设控制,乃至单片机底层原理产生更深的理解。
这个教程还在更新中,欢迎催更。有什么有趣的想法或建议欢迎qq咨询,题目也许因为你而改变哦!遇到了困难也欢迎提问。(8.12)
鉴于很多人没有什么基础,这里给出完成这题的速通方案:(9.12日更新)
- 看https://www.bilibili.com/video/BV1s84y1h77Q学习stm32(学习到点灯
- 看https://www.bilibili.com/video/BV1nx411U7Ht学习74hc595的使用
- 跳转到基础部分验收点,搭建电路,完成本题
在本文中散布着很多代码,收集起来即可组成验收代码 : )
0. 背景知识
要完成这个项目,你只需要:
- 会C语言的基本用法(变量定义,if,while,for,函数声明,基础的位运算!)
- 关于位运算可以看:https://www.bilibili.com/video/BV1YT4y117AH(第一个视频)
- 会单片机点灯
需要的硬件有:
单片机一块,面包板一块,LED若干,1k电阻若干,74hc595若干
如果你不会C语言,可以找网上快速入门的教程去学习。
如果你不会单片机点灯:
Arduino: B站上教程很多,都可以看
stm32:
https://www.bilibili.com/video/BV1dC41147eL (建议有一定基础的人观看,上手快,三分钟学会点灯)
https://www.bilibili.com/video/BV1q4411d7RX(新手友好)
推荐教程
推荐看ben eater的通信教程: https://www.bilibili.com/video/BV1JJ411h7B7 (B站上只找到无字幕的版本)
https://www.youtube.com/watch?v=eq5YpKHXJDM (yt版本有中文字幕,需要科学上网)
1. 通信
大家看到的电路板上的各种芯片之间是通过电信号来相互交流的,这也就是信号与通信。
数字电信号通信最简单,也最直观能想到的一种方式就是使用一条线来传输信号,也就是像下图这样,代表了二进制数据:01001000,十六进制:0x48
在一根线上根据时间改变其高低电平,就可以得到这样一个最简单的通信方式。
我们来尝试使用C语言实现一下:
新增解释(8.13更新)
在电脑中,数据是以二进制的形式储存的。
如char data = 3; 那么data本质上就是一串二进制数据
data: 00000011 : 二进制转为十进制为3
关于位移操作见:https://www.bilibili.com/video/BV1YT4y117AH(第一个视频)
void writeData(char data) {
// data为八位二进制数据
for (