C51单片机
51单片机
电平特性
1高电平
0低电平
高电平 5V
低电平 0V
此外还有电平临界值
进制与逻辑运算
二进制
十六进制 0x
逻辑运算
- 逻辑与
- 逻辑或
- 逻辑非
与C语言中一致
按位取反 符号 ~
运算
同或运算
- 必须相同,否则没有
异或运算
- 必须不同,否则没有
C简介
发展史–
很多硬件使用C语言进行开发
对平台依赖比较低
效率高 硬件开发友好
单片开发中 C语言还有汇编语言 C语言有很大的优点
C语言比较结构化
C数据类型
数组和结构体使用还是蛮多的
可以让程序结构优化
C语言指针类型 是C的灵魂
常量 变量等等
单片机也需要运算 ,为了合理运用内存空间 ,所以要使用好数据类型
C51基础知识
C51扩充数据类型
所有声明 都在头文件中提供了 初学者可以先不了解
sfr寄存器声明
例如:sfr SCON = 0x98
例如: sbit TI = SCON^1
类型转换规律 大的转换到小的
C51运算量
常量
常量是指在程序执行过程中其值不能改变的量。
变量
变量是在程序运行过程中其值可以改变的量。
[存储种类] 数据类型说明符 [存储器类型] 变量名 1[=初值],变量名 2 [初值]…
typedef c51固有的数据类型说明符 别名;
暂时跳过C基础部分 回头复习 其中的C51特性 稍后研究
直接开始 江科大51单片机教程
江科大 C51单片机
手搓代码 让单片机烧起来
两款开发工具
开始肯定需要安装开发工具 51单片机需要两款:
keil 5 编译工具
stc-isp 烧录工具
注意安装目录 工具收费 学习过程中可以使用绿色学习版本
安装破解 正常流程 开始实操
介绍单片机
MCU 单片机
内部集成各种硬件功能等,可以简单理解为超微型电脑
单品阿吉的任务是信息采集(依靠传感器)处理和硬件设备的控制
袖珍版计算机,一个芯片就能构成完成的计算机系统。但在性能上,与计算机相差甚远,但是单片机成本低廉、体积小、结构简单,生活和工业控制领域大有所用
学习使用单片机是了解计算机原理与结构的最佳选择
单片机使用领域十分广泛,实施工控、通讯设备、导航、家用电器等。这种产品常常冠以“智能型”
单片机家族
STC89C52单片机
老东西 上世纪80年代的产物 inter开发的 8051单片机
命名规则
内部结构图
flash闪存 rom io口都是引脚
单片机最小系统
介绍了开发板
控制LED
小的一端正极 大的负极 长脚正极 短脚负极
电阻 命名方式 101 = 10 0 类似科学计数法
如何控制引脚电压
mcu中包含cpu 还包含寄存器 寄存器通过驱动器来链接引脚 可以给寄存器写值来控制电流
程序中不支持直接输入二进制 一般转换为十六进制 或十进制
控制p2寄存器 输出电流 控制一个LED灯
可以使用stc-isp小工具生成延时代码 灰常好用
编写延时函数,调整为可定义延时参数的函数
独立按键
数据运算
一些结构
按键取反操作
先了解按键的抖动 机械按键开闭的瞬间不会立即连接上电路会有一些干扰
消除抖动 两种方法
- 硬件防抖 加入一些电路消除
- 软件防抖 代码中加入一些延时操作 把抖动跳过 20ms ok
按键控制状态
按键控制LED如二进制
独立按键控制LED移位
#include <REGX52.H>
//ÑÓʱº¯Êý
void Delay(unsigned int xms)
{
unsigned char i,j;
while(xms--)
{
i = 2;
j = 239;
do{
while(--j);
}while(--i);
}
}
//
unsigned char LEDNum = 0;
void main()
{
P2 = ~0x01;
while(1)
{
if(P3_1 == 0)
{
Delay(20);
while(P3_1 == 0)
Delay(20);
LEDNum ++;
if(LEDNum >= 8)
{
LEDNum = 0;
}
P2 = ~(0x01<<LEDNum);
}
///
if(P3_0 == 0)
{
Delay(20);
while(P3_0 == 0)
Delay(20);
if(LEDNum == 0)
{
LEDNum = 7;
}else
{
LEDNum --;
}
P2 = ~(0x01<<LEDNum);
}
}
}
LED数码管
上面单的 下面是四位一体 学习用的开发板即是四位一体数码管
数组来控制LED数码管
先引入C51数组概念 即C数组 还有C子函数
子函数
子函数可以优化代码结构还有代码的复用
动态数码管显示问题
需要消影
因为运算速度太快了 所以造成数据的错乱 在后面加一个延时清零
数码管驱动方式
模块化编程
LCD调试 封装好的 导进去 直接调用封装好的函数 可以显示调试
矩阵键盘
读取矩阵键盘的键码值
矩阵形式来减少IO口占用
扫描的概念
扫描速度非常快 所以人眼无法看出闪烁
节省IO口
这里开发板按行扫描 蜂鸣器会响 所以这里采用按列扫描
手册与开发板原理图 非常重要 需要能看懂
双向口 开漏输出
在Keil 5 中 左边布局 有一个Templates 可以简化输入
定时器
- SYSclk: 系统时钟,即晶振周期,本开发板上的晶振位12MHz
中断系统
一堆电路电门需要区分
TMOD 工作模式寄存器
TCON 计数器控制寄存器
定时器可以使用stp-isp工具生成
串口通信
串口的介绍
交叉连接 一端发送一端接收
串口电平和单片机并不相同 所以要定义一个电平标准
串口走的是RS232电平,也有可能走RS485电平也称为差分电平
usb也是差分电平 TTL电平和RS232电平就十多米长了传输错误
RS485传输可达上千米
进入考核第二阶段 暂停