51单片机 ——点灯、蜂鸣器、数码管显示

51单片机笔记(一)


基础知识

  1. TTL电平:高+5V 、低0V
  2. 计算机串口:高-12V 、低+12V(+3~+15之间)
  3. 总线:数据总线DB、地址总线AB、控制总线AB
  4. 51单片机四个8位并行I/O口,即可以作为输入也可以作为输出
  5. C51的数据类型扩展定义:str:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位的声明 bit:位变量声明
  6. ‘>>’ 位右移 & 按位与 ^按位异或 ~按位取反
  7. 基本语句:if while for switch/case do-while
  8. 最小系统运行起来的必要条件:1.电源 2.晶振 3.复位电路
  9. LED电流点亮,电流要求是在3-10mA范围内
  10. 单个电阻计算方法:(5-1.7)/3 大约1K
  11. 基本时序:机器周期和指令周期(一个机器周期是12个时钟周期,一个时钟周期就是一个振荡周期)

点亮LED

在这里插入图片描述

使能P2 IO口使其为低电平
在这里插入图片描述

//点亮一个灯		     |   //点亮第二个灯
#include <reg52.h>   |    总线操作 #include <reg52.h>
sbit D1=P1^0;		 |				void main()
void main()		 	 |				{
{					 |					P1=0xfd;  111111017-0while(1)		 |				}
	{				 |
	   D1=0;		 |
	}				 |
					 | 
}					 |

Keil软件调试功能:
在这里插入图片描述

//一个灯亮灭间隔450ms
#include "reg52.h"
#define u16 unsigned int
#define u8 unsigned char
sbit LED = P2^0;

void delay(u16 i)
{
	while(i--);
}
void main()
{
	while(1)
	{
		 LED = 0;
		 delay(50000);
		 LED = 1;
		 delay(50000);
	}
}

//流水灯

#include"reg52.h"
#include <intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define led P2
void delay(u16 i)
{
	while(i--);
}
void main()
{
	u8 i;
	led=~0x01;
	delay(50000);
	while(1)
	{	//for循环实现流水灯		//调用_crol_、_cror_函数实现流水灯
		for(i=0;i<8;i++)		//for(i=0;i<7;i++)
		{						//{
			P2=~(0X01<<i);		//led=_cror_(led,1);
			delay(50000);		//delay(50000);
		}						//}
	}
}

蜂鸣器

三极管放大电流控制蜂鸣器发声( 51单片机 IO 口的驱动能力较弱(即使外接上拉电阻),蜂鸣器驱动需要约 30mA)
在这里插入图片描述
R2 和 PNP 三极管 TP1 进行电流放大
在这里插入图片描述

#include "reg52.h"
#include <intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;

sbit beep=P1^5;
void delay(u16 i)
{
	while(i--);
}
void main()
{
	while(1)
	{
		beep=~beep;		//反复翻转以产生脉冲信号从而使无源蜂鸣器发声
		delay(100);
	}
}

数码管显示

在这里插入图片描述

在这里插入图片描述

#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(u16 i)
{
	while(i--);
}

void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
	switch(i)
	{
	case(0):
	LSA=1;LSB=1;LSC=1;break;		//C为高位 低电位有效
	case(1):
	LSA=0;LSB=1;LSC=1;break;
	case(2):
	LSA=1;LSB=0;LSC=1;break;
	case(3):
	LSA=0;LSB=0;LSC=1;break;
	case(4):
	LSA=1;LSB=1;LSC=0;break;
	case(5):
	LSA=0;LSB=1;LSC=0;break;
	case(6):
	LSA=1;LSB=0;LSC=0;break;
	case(7):
	LSA=0;LSB=0;LSC=0;break;
	}
P0=smgduan[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}

void main()
{
 while(1) 
{ 
	DigDisplay(); //数码管显示函数
} 
}

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想前

看客 多少意思意思

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值