一. 基础知识1.1 主频与时间主频CPU工作频率频率单位HZKHZ 1KHZ 10^3HZMHZ 1MHZ 10 ^3KHZ 10^6HZGHZ 1GHZ 10 ^3MHZ 10^9HZTHZ 1THZ 10^3GHZ 10^12HZ小频率 - 大频率 除大频率 - 小频率乘主频2.1GHZ - HZ: 2.1GHZ * 10^9 2,100,000,000HZ时间时间和频率呈倒数关系1 / 2,100,000,000HZ 0.5ns时间单位smsusns1.2 晶振晶振分为12 MHZ与11.0592MHZ1.3 芯片的封装形式双列直插式40引脚封装引脚划分成4组P0、P1、P2、P3每组有8个引脚1.4 其他电阻数字标注法102 数字标注法前面两位/三位作为有效数字最后一位数表示10的几次方10 * 10^2 1KΩ103:10 * 10^3 10k外设寄存器能够操作硬件具有固定地址的空间二. 51单片机2.1 基础51单片机是一个8位单片机1980Intel公司MCS-51系列8051处理器架构AtmelAT89C51、PhilipP89V51 增强型单片机 在线编程、STC宏晶半导体(STC89C51 STC89C52 STC89C52RC)处理器架构x8632位、x6464位、80518位、ARM32位CPUCentral Processing Unit中央处理器完成指令处理和数据运算MCUMicro Controller Unit微控制器集成度高把所有功能集成到一块芯片中CPU、RAM、ROM、Timer、GPIO、中断、UART成本低应用简单控制领域MPUMicro Processing Unit微处理器集成度低只有一块单独的CPU芯片需要单独外接存储模块、外设模块成本高复杂应用领域跑Linux操作系统GPUGraphics Processing Unit图形处理器图形处理、图像渲染NPUNeural Processing Unit神经网络处理器AI推理、AI加速神经网络处理卷积算法FPUFloat Point Unit浮点数运算单元大部分集成在CPU内部SOCSystem On Chip片上系统将很多个芯片集成到一起2.2 单片机最小系统单片机最小系统电源电路晶振电路复位电路2.3 内存与外存内存读写速度快掉电数据丢失价格昂贵内存条存放程序中的变量外存读写速度慢掉电数据不丢失价格便宜硬盘、SD卡存放程序、代码、指令ROM:Read - Only Memory,只读存储器存放单片机程序、代码、指令RAM: Random Aceess Memory,随机访问存储器存放程序运行过程中的变量2.4 CPU与RAM之间的三大总线1. 地址总线CPU通过地址总线寻找RAM中的地址最大寻址范围2^8(256byte) 单向2. 数据总线CPU与RAM之间进行数据传输双向3. 控制总线CPU通过控制总线发送控制指令 双向三. 位运算在操作硬件时位运算很常用这里简单介绍3.1 按位或用途将指定一位置位其余位不变常见用法undigned char t 0xFF t | (1n);/将t的第n位置1其余位不变 t | (12) | (13);/将t的第2与3位置1其余位不变3.2 按位与用途指定位清零常见用法unsigned char t 0xFF; t ~(1 n);将第n位清零3.3 异或将对应位的bit进行比较相同为0相异为1用途不断的与0xFF异或就可以实现翻转LED四. LED发光二极管4.1 自定义接口//LED初始化 void led_init() { P2 0xFF; } //LED全亮 void led_on_all() { P2 0; } //LED全灭 void led_off_all() { P2 0xFF; } //LED指定某位亮 void led_on(unsigned int i) { P2 ~i; }4.2 流水灯//流水灯 int i 0; led_init(); while(1) { for(i 0; i 6; i) { led_on(1 i); delay(500); led_off_all(); } for(i 7; i 0; i--) { led_on(1 i); delay(500); led_off_all(); } }五. 数码管5.1 数码管51单片机搭载4位共阴极数码管原理图5.2 操作方法先位选(NPN三级管)P10-P13给高电平选中再段选给对应引脚高电平即可共阴极给高电平点亮动态显示人眼的视觉暂留效应1、选择第一位数码管显示第一个数值快速刷新2、选择第二位数码管显示第二个数值快速刷新5.3 示例代码//共阴极段码表 unsigned char seg[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //位选 void select_bit(unsigned int n) { P1 ~(0x0F 0);//将低四位清零 P1 | (1 n); } //段选 void select_seg(unsigned int n) { P0 seg[n]; } //数码管动态显示 void digiter_show(unsigned int n) { int t 0; int m; while(n ! 0) { m n % 10; P0 0;//消隐 select_bit(t); select_seg(m); delay(1); n / 10; } }