单片机的概念
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
单片机工作的基本时序
(1)振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,我们开发板上为12MHZ。
(2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的
(3)机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
(4)指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。
MCS-51系统中,有单周期指令、双周期指令和四周期指令。
2.接受外部的控制,通过I/O来感受外部的电压。
3.51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。4个I/O端口都能作输入输出口用。
STC89C52RC原理图
电亮一颗led
流水灯模块原理图
如图,2号脚VCC提供高电平。要想led灯点亮则需要拉低对应IO口的电平.
示例代码:
#include <reg52.h>
sbit led1 = P1^0; //绑定led1到IO口 P10
int main()
{
led1 = 1;
return 0;
}
led流水灯
通过引用头文件 #include <intrins.h>
调用左移函数 _crol_()
或 右移函数 _cror_()
对整个P1口进行移位操作从而实现流水灯效果。
示例代码:
#include <reg52.h>
#include <intrins.h>
uchar temp; // led相关变量
//延时函数
void delay(unsigned char z) {
unsigned char x, y;
for (x = z; x > 0; x--)
{
for (y = 114; y > 0; y--);
}
}
int main()
{
temp = 0xfe;
P1 = temp;
while (1) {
temp = _crol_(temp, 1);
P1 = temp;
delay(100);
}
return 0;
}
用法:
_crol_(移位变量, 移位数);
通过PWM调节led亮度
脉宽调制(PWM)的基本原理
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等但宽度不一致的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率
示例程序涉及定时计数器内容,以后填坑。
蜂鸣器
蜂鸣器模块原理图
如图,蜂鸣器1脚接入PNP型三极管S8550,三极管S8550的Q1脚接入VCC。当IO口P23为低电平时三极管S8550饱和导通,蜂鸣器工作。
示例代码:
#include <reg52.h>
sbit beep = P2^3; //绑定蜂鸣器到IO口 P23
//延时函数
void delay(unsigned char z) {
unsigned char x, y;
for (x = z; x > 0; x--)
{
for (y = 114; y > 0; y--);
}
}
int main()
{
while(1)
{
delay(500);
beep = ~beep;
}
return 0;
}