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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱笑还清明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值