51单片快速入门教程——51核心开发板(STC89C52RC)2

第三章 LED

LED灯左侧接入电源Vcc,通过限流电阻后分别连接至STC89C52RC芯片的P2.4~P2.7引脚。 R1~R4为限流电阻,避免LED因电流过大而损坏。 以LED1为例,当P2.4引脚为低电平时,LED两侧产生电压差,LED1点亮。反之,当P2.4引脚为高电平时,LED1熄灭。

了解相关寄存器

名称

字节

地址

位地址

bit[7]

bit[6]

bit[5]

bit[4]

bit[3]

bit[2]

bit[1]

bit[0]

P0

0x80

0x87

0x86

0x85

0x84

0x83

0x82

0x81

0x80

P1

0x90

0x97

0x96

0x95

0x94

0x93

0x92

0x91

0x90

P2

0xA0

0xA7

0xA6

0xA5

0xA4

0xA3

0xA2

0xA1

0xA0

P3

0xB0

0xB7

0xB6

0xB5

0xB4

0xB3

0xB2

0xB1

0xB0

P4

0xE8

-

-

-

-

0xEB

0xEA

0xE9

0xE8

那么如何控制相关寄存器:用高电平1和低电平0来表示。

sfr P2=0xA0//定义P2地址(这些定义一般都在<reg52.h>或者其他源文件)

P2

bit[7]

bit[6]

bit[5]

bit[4]

bit[3]

bit[2]

bit[1]

bit[0]

LED

LED4

LED3

LED2

LED1

\

\

\

\

取值

1

0

1

0

默认值(1

默认值(1

默认值(1

默认值(1

状态

熄灭

点亮

熄灭

点亮

\

\

\

\

P2=0xAF;//点亮LED1和3 二进制:1010 1111

but更简便的某个灯亮的表示:

sbit LED1=P2^4(在原理图可看见相应的引脚);

LED1=0;

设计程序流程:

拓展:延时函数的调用方法

参考流水灯视频:

【51核心开发板——流水灯实验】 https://www.bilibili.com/video/BV1ZC411h7Ew/?share_source=copy_web&vd_source=a85f5cd1c8dc38fdd970302da00bd865

接下来是流水灯原理与代码:

#include <STC89C5xRC.H>//也可以是<reg52.h>

void Delay1ms(unsigned int xms)		//@11.0592MHz延时函数
{
  while(xms--)
  {
    unsigned char i, j;

    
    i = 2;
    j = 199;
    do
    {
      while (--j);
    } while (--i);
  }
	
}
void main()//主函数
{
  unsigned int i;
  while(1)
  {
    P2=0xEF;
    for(i=0;i<4;i++)
    {
      Delay1ms(500);//停顿时间
      P2=P2<<1;//流水灯,每循环一次左移一位
      
    }
  }
}

第四章 按键检测

知识点:

1.当按键未按下时,输入芯片引脚的电平为高电平; 按键按下时,输入芯片引脚上的电平为低电平

按键消抖,因此需要借助延时函数。(上一章的方法会极大占用CPU,实际开发不采用)

第五章 蜂鸣器

芯片P1.0引脚与限流电阻R19相连接。当J102相接时,R20作为上拉电阻,确保三极管在P1.0引脚不为低电平时保持截止状态。 蜂鸣器的最大工作电流为30mA,由于51单片机引脚输出电流较小,不足1mA,不能够驱动蜂鸣器工作,需要利用三极管Q5形成一个控制电路。 蜂鸣器的正极与三极管Q5的集电极(c)相连,当P1.0引脚为高电平时,三极管的基极(b)和发射极(e)均为5V,三极管Q5截止,电流无法通过蜂鸣器,此时蜂鸣器关闭; P1.0为低电平时,三极管Q5工作在饱和区,电流从发射极流向集电极并通过蜂鸣器,此时蜂鸣器工作。

第六章 数码管

七段数码管是由组成8字形状的发光二极管,加上小数点,一共8段发光二极管构成,每一段可以分别用字母a、b、c、d、e、f、g、dp表示。

介绍完后看看我们用的:

那么显示数字如何对应段码?

8位段码

a b c d e f g dp

显 示 字 符

8位段码

a b c d e f g dp

显 示 字 符

0000 00110x03

0

0000 00010x01

8

1001 11110x9F

1

0000 10010x09

9

0010 01010x25

2

0001 00010x11

A

0000 11010x0D

3

1100 00010xC1

b

1001 10010x99

4

0110 00110x63

C

0100 10010x49

5

1000 01010x85

d

0100 00010x41

6

0110 00010x61

E

0001 11110x1F

7

0111 00010x71

F

课后题,按下key1键,每次数码管显示加一代码参考:

#include <STC89C5xRC.H>
void Delay1ms(unsigned int xms)		//@11.0592MHz
{
  while(xms--)
  {
    unsigned char i, j;
    i = 2;
    j = 199;
    do
    {
      while (--j);
    } while (--i);
  }
	
}
sbit G1=P2^3;//根据原理图来定义
sbit G2=P2^2;
sbit G3=P2^1;
sbit G4=P2^0;
sbit KEY1=P3^2;
void main()
{
  static unsigned char s_arrNumber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,041,0x1f,0x01,0x09};//0~9的数码管的表示
  
    unsigned int count=0,Count=0;  
       
  while(1)
  {
    
    if(KEY1==0)
      {
        Delay1ms(200);
        count++; 
        if(count>9){count=0;Count++;}
      }
      P0=s_arrNumber[count];
      G2=0;
      Delay1ms(5);
      G2=1;
        
      P0=s_arrNumber[Count];
      G1=0;
      Delay1ms(5);
      G1=1;
     
      if(Count==9 && count==9)
      {
        count=0;
        Count=0;
       }
    }
     
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值