51单片机—实验一(LED数码管)

该文章仅为作者大学期间的一时兴起!!!

一、器件描述

先直接看一下我们要用的proteus仿真图吧!

本篇博客,主要介绍当中的51单片机和共阴极的6位一体数码管以及拨码开关。


1. 51单片机:


   名称和类型:这是一款经典的嵌入式微控制器,通常用于各种电子应用中。
   功能和用途:51单片机用于控制和处理各种电子设备,包括嵌入式系统、传感器数据采集、控制器等。
   技术规格:描述其型号、时钟频率、内存容量和其他技术规格。
   连接和集成:说明如何将51单片机与其他组件连接,可能需要讨论其引脚分配以及通信接口。

2. 共阴极6位一体数码管:


   名称和类型:这是一种显示设备,通常用于显示数字字符。
   功能和用途:用于显示数字、字母或符号,常见于计时器、温度计、电子秤等设备。
   技术规格:描述其位数、亮度、电源电压要求等规格。
   连接和集成:说明如何连接该数码管到其他电路,可能需要讨论连接引脚和限流电阻。

3. 拨码开关:


   名称和类型:这是一种开关设备,通常用于选择不同的配置选项。
   功能和用途:用于设置或选择不同的参数、模式或选项,常见于电子设备的配置部分。
   技术规格:描述拨码开关的位数和可配置选项的数量。
   连接和集成:说明如何将拨码开关连接到电路,以及如何读取其状态。

二、实现的功能


功能1:实现数码管的动态显示

话不多说直接上代码(接线参照上面的仿真图):

// 数码管动态显示函数
// 参数:
//   seg_nums - 一个数组,用于每位数码管的显示,数组元素为数码管显示的段码;
//   n - 需要使用几位数码管,取值范围为 0 到 NUM_DIGITS。
void seg_show(uchar *seg_nums, uchar n)
{
    uint time = 10; // 延时时间,单位毫秒
    uchar i = 0;
    if (n > NUM_DIGITS) // 数码管位数大于上限值返回函数
        return;
    // 循环显示每位数码管的内容
    for (i = 0; i < n; i++)
    {
        // 根据当前i的值选择要显示的数码管位
        DIG_SET(i);       // 选择一位数码管
        P2 = seg_nums[i]; // 根据当前的i值设置数码管段码
        delay_ms(time);   // 延时显示
    }
}

这段代码实现了一个动态显示共阴极数码管内容的函数。通过传入包含每位数码管段码的数组`seg_nums`和需要显示的数码管位数`n`,函数循环选择每位数码管,设置其段码,并在每次切换后延时一定时间,实现了数码管内容的动态显示效果。这种功能常用于数字时钟等电子设备中,使得数码管能够连续显示不同的数字或字符。

代码中的NUM_DIGITS、DIG_SET(i)为下面这样的定义:


// 数码管最大位数
#define NUM_DIGITS 6
// 定义函数宏DIG_SET(x),用于设置数码管的某一位为1,x表示该位的位置
#define DIG_SET(x) (P1 = 0x80 >> (2 + x))

 使用时传入要显示的数组和数组的位数即可。

// 数码管显示数字码(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
const uchar nums[] = {
    0x3f, 0x06, 0x5b, 0x4f, // 0,1,2,3
    0x66, 0x6d, 0x7d, 0x07, // 4,5,6,7
    0x7f, 0x6f, 0x77, 0x7c, // 8,9,A,B
    0x39, 0x5e, 0x79, 0x71  // C,D,E,F
};

void main()
{
    P0 = 0xff; // P0端口全部置1
    P1 = 0x00; // P1端口全部置0
    P2 = 0x00; // P2端口全部置0
    P3 = 0x00; // P3端口全部置0
    while(1)
    {
        seg_show(nums,6);
    }
}

三、相关练习实验

1、每2个数码管为一组,交替点亮“8”。

2、对第4个数码管按照一段亮、二段亮à三段亮……全部亮、灭一段、灭二段……全部灭方式,如此反复进行。

3、将开关K0~K5的置位情况显示在数码管上,开关置“ON”的对应数码管显示“0”,开关置“OFF”(拨向下)的对应数码管显“1”。

4、将开关K0~K7的置数显示在数码管上,如K0~K7全部为OFF,第1,2位数码管显示FF。

相关链接实验1 LED数码管与拨码开关.docx

四、预告

最容易理解的矩阵键盘实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
51单片机中开关控制LED数码管静态显示的基本原理是:通过设置开关的状态,控制51单片机上的GPIO口的电平状态,从而控制LED数码管的亮灭。 首先,我们需要连接开关和LED数码管51单片机。将开关的一个引脚连接到GND,另一个引脚连接到51单片机上的一个GPIO口(例如P1.0),以输入方式连接。然后,将LED数码管的各个段选引脚分别连接到51单片机上的不同GPIO口,以输出方式连接。通过这样的连接方式,我们可以通过控制51单片机的GPIO口的电平状态来控制LED数码管的亮灭。 接下来,我们需要在51单片机的程序中进行相应的设置。首先,我们需要配置P1为输入口,可以设置P1的相应寄存器(比如P1CON)来将其设置为输入模式。然后,我们可以使用51单片机的输入相关的函数(如P1的输入函数)读取开关的状态,即判断开关是否闭合或打开。 在主程序中,我们可以使用if语句来判断开关的状态。当开关闭合时,我们设置相应的GPIO口输出低电平,以控制LED数码管的亮灭;当开关打开时,我们设置相应的GPIO口输出高电平,以控制LED数码管的熄灭。具体的代码可以如下: ```c #include <reg51.h> #define GPIO_LED_P1 P1 // LED数码管连接到P1口 sbit SW = P1^0; // 开关连接到P1.0引脚 void main() { GPIO_LED_P1 = 0xFF; // 给所有段选引脚置高电平,熄灭数码管 while(1) { if(SW == 0) { // 开关闭合 GPIO_LED_P1 = 0x00; // 给所有段选引脚置低电平,亮起数码管 } else { // 开关打开 GPIO_LED_P1 = 0xFF; // 给所有段选引脚置高电平,熄灭数码管 } } } ``` 以上就是51单片机中开关控制LED数码管静态显示的基本原理和一个简单的代码示例。通过控制开关的状态,可以实现LED数码管的亮灭,从而达到静态显示的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱笑还清明

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值