一、 51单片机基础要点
1. C51系列单片机是八位单片机,供电是TTL电平(5V为1,0V为0)
2. CPU通过配置外设寄存器(高低电平)来控制硬件电路的电压变化,硬件电路执行功能
3. 51单片机的IO口是一种弱上拉(高电平驱动能力弱)强下拉(低电平驱动能力强)的工作模式
4. 寄存器顺序从高位到低位进行配置(例子:P2_7-P2_0)
二、LED
1. LED中文名:发光二极管
2. 要点:区分正负极,电流从正极流向负极,LED点亮
如下图所示,左正右负
2.1 点亮一个LED灯
LED正极接到VCC,负极接到单片机的IO口,通过配置单片机的P2口来选择点亮LED灯
代码如下所示:
#include <REGX51.H>
void main()
{
P2=0xFE; //1111 1110 P2_7~P2_0
while(1)
{
}
}
2.2 LED闪烁
选择控制LED亮灭状态交替循环扫描,即可实现LED闪烁功能
代码如下所示:
#include <REGX51.H>
/*
函数功能:程序延时500ms
*/
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0xFE;
Delay500ms();
P2 = 0xFF;
Delay500ms();
}
}
2.3 LED流水灯
通过LED闪烁,循环扫描每个LED,实现流水灯
代码如下所示:
#include <REGX52.H>
/*
函数功能:程序延时500ms
*/
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0xFE; //1111 1110;
Delay500ms();
P2 = 0xFD; //1111 1101;
Delay500ms();
P2 = 0xFB; //1111 1011;
Delay500ms();
P2 = 0xF7; //1111 0111;
Delay500ms();
P2 = 0xEF; //1110 1111;
Delay500ms();
P2 = 0xDF; //1101 1111;
Delay500ms();
P2 = 0xBF; //1011 1111;
Delay500ms();
P2 = 0x7F; //0111 1111;
Delay500ms();
}
}
三、按键
按键本质上是一个电子开关,当按键按下的时候,电路导通,松手,电路断开;
注意点:按键在按下和松手的过程中,金属弹片会存在抖动的情况,即反应的延迟。
解决办法:延时消抖处理
如上图所示,在按下按键和松手时,按键会存在5-10ms的抖动过程,影响程序的进行。
按键原理图如下所示:
3.1 按键控制LED亮灭
通过循环扫描按键状态,进行LED灯的电平翻转,实现按键点亮LED
#include <REGX52.H>
/*
函数功能:程序延时x ms
参数:延时时间
*/
void Delay(unsigned int xms)
{
while(xms)
{
unsigned char i, j;
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms --;
}
}
void main()
{
while(1)
{
if (P3_1 == 0) //判断是否按下按键
{
Delay(20); //消抖
while(P3_1 == 0) //检测是否按键是否松手
Delay(20); //消抖
P2_0 = ~P2_0; //电平翻转
}
}
}
四、总结
初识51单片机部分,学习了单片机编程的基本流程,项目创建,.c程序新建,.hex文件的生成和烧录;了解了51系列单片机的相关知识,以及寄存器配置在51单片机中的重要地位;学习了LED和按键模块的相关知识和如何使用。