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

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单片机内部结构图
    请添加图片描述

    • 总线:是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是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口的结构
    在这里插入图片描述

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

    • 作用

      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原理图连接方式

在这里插入图片描述

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

(2) proteus接线图

在这里插入图片描述

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


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


void main()
{
	while(1)
	{
		//P2.0端口设置为低电平
		led=0;	
	}		
}
2. LED灯闪烁
(1)实验电路图

在这里插入图片描述

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

(2)keil源代码
#include <reg51.h>
#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)实验结果

从结果可以看出,LED灯在闪烁,间隔500ms亮灭。

3. switch条件判断和开关控制流水灯
(1)实验电路图

在这里插入图片描述

(2)keil源代码
#include<AT89X51.h>
#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)实验效果

从实验结果可以看出,每次按键按下的时候,LED灯亮的位置会向右移动一位。

4. switch条件判断流水灯
(1)keil源代码
#include<AT89X51.h>

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<AT89X51.h>
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)实验电路图

在这里插入图片描述

(2)keil源代码
#include<AT89X51.h>

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)实验结果

从实验结果可以看出,用四个按键控制四组LED灯的闪烁,第一组使用按键P31,前面两个LED灯会闪烁一次;第二组使用按键P30,第三第四个LED灯会闪烁两次;第三组使用按键P32控制,第五第六个LED灯会闪烁三次;第四组使用按键P33控制,最后两个LED灯会闪烁四次(顺序从左向右)。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值