常用原件记录
-
数码管
- SEG
- 7SEG-MPX1-CA 8个引脚
- 7SEG-MPX4-CA 多位数码管
- 7SEG-COM-ANODE(共阳
-
上拉电阻
- RESPACK-8
-
锁存器
- 74HC573
-
三极管
- NPN
-
电阻
-
10WATT100R
-
排阻
- RES16DIPIS
-
-
按键
- button
-
电容
- C1808C161MZGACTU
-
拓展芯片
- 拓展输出
- CD4094
- 74LS164
- 拓展输入
- CD4014
- 74LS165
- 拓展输出
学习过程中的问题
为什么数据类型多用unsigned
-
省内存
-
C51设计之初,不支持有符号操作
前人在学习时,早期的代码示例是unsigned,后人学习也就成了习惯
sbit和bit 的区别
- 都是C51的拓展的变量类型
- bit
- 动态分配
- 外部或内部
- 更像是数据类型
- sbit
- 绝对地址
- 只能外部
- 主要用于寄存器
- 为分配内存空间的变量取一个别名
bit i = 0;意思就是在内存中划一块空间给i,让他存储0这个数据位,没有这个语句之前,内存里面任何一个地址空间都没有i这个变量存在。
sbit Flag = P0^1;意思就是给P0^1取一个别名,ta叫做Flag,没有这个语句之前,P0^1这个数据位已经有一个明确的地址空间,ta就是0x80的第二位数据位。
多分支管理
- 基础版本同时需要扩展多种验证方案的工程
- 相同框架同时扩展多种组合需求方案的工程
- 一套软件有不同配置需求的工程
- 同个业务逻辑,不同底层驱动的工程
- 这会让你的作品看起来更由条理,更容易管理
IO端口
-
P0端口:引脚P0.0~P0.7,输入八路信号,输出八路信号
- I/O输出时,输出0为低电平,输出1为高阻态
- I/O输入时,不需要接上拉电阻,但要先置1,使端口处于高阻浮空状态
-
P1端口
-
当时老师给的资料也没相关的介绍
-
反正,我理解的就是
输出 输入 1亮 0不亮 0亮 ,1不亮
-
-
P2端口:引脚P2.0~P2.7,输入8路信号,输出8路信号
- 当使用外部存储器时,还可以与P0口配合使用,作为16位地址总线的高8位
-
P3端口:引脚P3.0~P3.7,输入8路信号,输出8路信号
- P3.0,RXD,串行数据接收
- P3.1,TXD,串行数据发送
- P3.2,INT0,外部中断0申请P3.3,INT1,外部中断1申请
- P3.4,T0,定时器/计数器0计数输入
- P3.5,T1,定时器/计数器1计数输入
- P3.6,WR,外部RAM写选通
- P3.7,RD,外部RAM读选通
锁存器,静态显示,动态显示
幕布内容来源于网络
中断
图片源于肖谧老师的课件
计时器/定时器
串口通信
注意事项
新建项目
Keil uVision5 + VScode,VScode插件:keil assistant + C++/C + ...
-
Keil新建项目,勾选生成hex选项,添加源文件
不在keil中加的话,build的时候可能会有warning,生成的hex文件,在Proteus中也无法使用
至于具体原因自己也没有复盘?
命名规范
-
变量命名
- 见名知意(少用拼音
- 每个单词首字母缩写(可缩写
- 风格统一(我可能采取下划线的方式)
-
函数命名
-
专有名词全部大写
-
函数名_功能
char UART_IsTxBuffFull();
-
-
代码风格
全靠编译器
烧录
-
stc-isp
烧录时,一直显示“正在检测目标单片机”直接冷启动,引导区到程序区