嵌入式51单片机01-开发版介绍与LED流水灯系列

文章目录

      • 1. STC89C52单片机介绍
      • 2. 单片机预备知识
      • 3. LED灯操作系列
        • 1. 点亮LED
          • 1. LED原理图连接方式
          • 2. proteus接线图
          • 3. keil代码
        • 2. LED灯闪烁
          • 1. 实验电路图
          • 2. keil源代码
          • 3. 实验结果
        • 3. switch条件判断和开关控制流水灯
          • 1. 实验电路图
          • 2. keil源代码
          • 3. 实验效果
        • 4. switch条件判断流水灯
          • 1. keil源代码
          • 2. 实验结果
        • 5. 位运算实现流水灯
          • 1. keil源代码
        • 6. 按键控制流水灯
          • 1. 原理图
          • 2. keil源代码
          • 3. 实验结果

1. STC89C52单片机介绍

  • 所属系列:51单片机系列

  • 公司:STC公司

  • 位数:8位

  • RAM:512字节

  • ROM:8K(Flash)

  • 工作频率12MHz

  • 单片机版型

  • 单片机开发板具体结构

    1. 超声波模块接口
    2. NRF24L01无线模块接口
    3. 无源蜂鸣器
    4. DS18B20温度传感器接口
    5. 红外接收头
    6. 电源开关
    7. 自动下载电路(CH340转换芯片)
    8. miniUSB接口(供电或下载程序或串口通信)
    9. ISP下载接口(为AT及AVR系列单片机下载)
    10. 复位按键
    11. LCD12864模块接口
    12. LCD1602模块接口
    13. 数码管模块(2个四位一体共阴数码管)
    14. DS1302时钟模块
    15. LED模块(8个LED)
    16. 独立按键模块(4个独立按键)
    17. 单片机所有IO口(方便用户外扩功能模块)
    18. 单片机紧缩座
    19. 矩阵按键模块
    20. LED点阵模块
    21. 74HC245芯片(驱动数码管模块)
    22. 步进电机模块(五线四项步进电机,驱动芯片ULN2003,也可以驱动直流电机)
    23. 74HC138译码器芯片(控制数码管位选)
    24. EEPROM模块(24C02芯片)
    25. 74HC595模块(内含8个LED)
    26. AD/DA模块

2. 单片机预备知识

  • 电平特性

    • 数字电路中只有两种电平:高电平和低电平

      • 高电平:5V或3.3V,取决于单片机电源;
      • 低电平:0V。
    • RS232电平:计算机串口的电平

      • 高电平:-12V;
      • 低电平:12V。
    • 所以当我们用单片机跟电脑通信的时候,我们要通过各种元器件将单片机的电平转换为计算机可识别的电平才能跟电脑进行通信。

  • 8051单片机内部结构图
    嵌入式51单片机01-开发版介绍与LED流水灯系列_第1张图片

    • 总线:是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线;外部总线是CPU与其他部件之间的连线。外部总线有三种:数据总线、地址总线、控制总线。

    • CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器。

    • RAM:用于存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据。

    • ROM:用以存放程序、一些原始数据和表格。

    • I/O口:四个8位并行I/O口,既可以用作输入又可以用作输出。

    • T/C:两个定时器/计数器,既可以工作在定时模式,也可以工作在计数模式。

    • 五个中断源的中断控制系统。

    • 一个全双工UART的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信。

    • 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。

  • 单片机工作的基本时序

    • 时钟周期:也称振荡周期, 是指为单片机提供时钟脉冲信号的振荡源的周期,我们开发板上为12MHz。

    • 状态周期:每个状态周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。

    • 机器周期:一个机器周期包含 6 个状态周期S1~S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU可以完成一个独立的操作。

    • 指令周期:它是指CPU完成一条操作所需的全部时间。 每条指令执行时间都是由一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。

  • 单片机IO口的结构
    嵌入式51单片机01-开发版介绍与LED流水灯系列_第2张图片

    • 上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻起到一个限流的作用,下拉就是下拉到低电平。

    • 作用

      1. OC门要输出高电平,外部必须加上上拉电阻

      2. 加大普通IO的驱动能力

      3. 起到限流的作用

      4. 抵抗电磁干扰

  • C-51数据类型扩充定义

    • sfr:特殊功能寄存器声明

      sfr   变量名=地址值;
      
    • sbit:特殊功能位声明

      sbit  变量名=地址值;
      
    • bit:位变量声明

    • #ifndef…#endif :条件编译,常用于头文件的定义还有一些程序条件编译

      #ifndef __LED_H
      #define __LED_H
      
      #endif
      
  • 单片机最小系统

    • 电源电路
    • 复位电路
    • 时钟电路
    • 下载电路

3. LED灯操作系列

1. 点亮LED

1. LED原理图连接方式

嵌入式51单片机01-开发版介绍与LED流水灯系列_第3张图片

​ LED的正极通过电阻连接到电源上,阴极连接P2口,此时只有给P2口低电平的时候,LED灯才会亮。

2. proteus接线图

嵌入式51单片机01-开发版介绍与LED流水灯系列_第4张图片

3. keil代码
#include "reg52.h"  


//将单片机的P2.0端口定义为led
sbit led=P2^0;	   


void main()
{
	while(1)
	{
		//P2.0端口设置为低电平
		led=0;	
	}		
}

2. LED灯闪烁

1. 实验电路图

嵌入式51单片机01-开发版介绍与LED流水灯系列_第5张图片

电路图与点亮LED灯的电路图相同,设置P2.0口输出低电平的时候,LED灯会点亮;设置P2.0口为低电平的时候,LED灯会熄灭。然后通过一定的延时,可以让LED灯出现闪烁的效果。

2. keil源代码
#include 
#include "intrins.h"


//延时函数,会提供500ms的延时
void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
        //灯亮
		P2=0xfe;
        //延时
		Delay500ms();
        //灯灭
		P2=0xff;
        //延时
		Delay500ms();
	}
}
3. 实验结果

3. switch条件判断和开关控制流水灯

1. 实验电路图

嵌入式51单片机01-开发版介绍与LED流水灯系列_第6张图片

2. keil源代码
#include
#include "intrins.h"


int t=0,j,i;


void Delay150ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 2;
	j = 13;
	k = 237;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while (1)
	{	
		if (P3_1==0)
		{
			Delay150ms();	   //消振
			if (P3_1==0)
			{
				t++;
				if (t==9)
					t=1;
			}
		}
		
		switch(t)
		{
			case 1:P2=0xfe;break;
			case 2:P2=0xfd;break;
			case 3:P2=0xfb;break;
			case 4:P2=0xf7;break;
			case 5:P2=0xef;break;
			case 6:P2=0xdf;break;
			case 7:P2=0xbf;break;
			case 8:P2=0x7f;break;
			default :P2=0xff;break;
		}
	}
}
3. 实验效果

4. switch条件判断流水灯

1. keil源代码
#include

void delay(unsigned int n)
{
	unsigned int i,j;
	for (i=n;i>0;i--)
	for (j=110;j>0;j--);
}

void main()
{
	unsigned int t=0;
	while (1)
	{	
		switch(t)
		{
			case 0:P2=0xfe;delay(250);break;
			case 1:P2=0xfd;delay(250);break;
			case 2:P2=0xfb;delay(250);break;
			case 3:P2=0xf7;delay(250);break;
			case 4:P2=0xef;delay(250);break;
			case 5:P2=0xdf;delay(250);break;
			case 6:P2=0xbf;delay(250);break;
			case 7:P2=0x7f;delay(250);break;
			default :P2=0xff;delay(250);break;
		}
		t++;
		t=t%8;
	}
}
2. 实验结果

5. 位运算实现流水灯

1. keil源代码
#include
int i,j,t;
int a[8]={0,1,1,1,1,1,1,1};

void delay(int n)
{
	for (i=n;i>0;i--)
	for (j=150;j>0;j--);
}

void main()
{
	while(1)
	{	
		P2=0xff;
		delay(250);
		for (t=0;t<8;t++)
		{	
			P2=(P2<<1)+a[t];
			delay(250);
		}
	}
}

6. 按键控制流水灯

1. 原理图

嵌入式51单片机01-开发版介绍与LED流水灯系列_第7张图片

2. keil源代码
#include

void delay(int n)
{
	unsigned int i,j;
	for (i=n;i>0;i--)
	for (j=150;j>0;j--);
}

void main()
{
	int t;
	while (1)
	{
		if (P3_1==0)
		{
			P2_0=0;	P2_1=0;
			delay(250);
			P2_0=1;	P2_1=1;
			delay(250);

		}
		if (P3_0==0)
		{
			for (t=0;t<2;t++)
			{
				P2_2=0;	P2_3=0;
				delay(250);
				P2_2=1;	P2_3=1;
				delay(250);
			}
		}

		if (P3_2==0)
		{
			for (t=0;t<3;t++)
			{
				P2_4=0;	P2_5=0;
				delay(250);
				P2_4=1;	P2_5=1;
				delay(250);
			}
		}

		if (P3_3==0)
		{
			for (t=0;t<4;t++)
			{
				P2_6=0;	P2_7=0;
				delay(250);
				P2_6=1;	P2_7=1;
				delay(250);
			}
		}
	}
}
3. 实验结果

你可能感兴趣的:(嵌入式,单片机,51单片机,stm32)