找回密码
 立即注册
查看: 1198|回复: 4

32G12K128实验-LED数码管动态显示实验

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2024-10-23 17:26:58

5

主题

19

回帖

209

积分

中级会员

积分
209
发表于 2024-10-8 16:54:42 | 显示全部楼层 |阅读模式
本帖最后由 惦饭宝 于 2024-10-9 07:03 编辑

实验二 LED数码管动态显示实验🕵️‍♀️
一、实验要求
    利用STC32G12K128实验箱,制作一个数码管动态显示系统。参考实验箱原理图,控制实验箱8只数码管,分别滚动显示单个数字0~7。
    程序运行后,单片机控制左边第一个数码管显示0,其它数码管不显示;演示之后,控制左边第2只数码管显示1,其它不显示;.......直至第8只数码管显示7,其它不显示;反复循环上述过程。
二、实验目的
    掌握单片机控制LED共阳极数码管的动态显示。
三、实验拓展
    1)应用已掌握的单片机GPIO的控制原理,设计一款电磁炉的电子控制系统,系统控制要求包括:
    按下开机键,电磁炉会产生蜂鸣提示开机成功;用按键选择不同的加热模式,待选的模式会点亮对应的led灯作为提示,按下确认键会选中该模式,并蜂鸣提示选择成功;
    等待1s钟,电磁炉根据选定模式对应的加热温度开始加热,并通过数码管显示加热的温度;
    通过按键“+”和“-”调节加热温度;再次按下开机键,电磁炉蜂鸣提示并关机。
    2)设计一款电饭煲的电子控制系统,系统控制要求类似电磁炉控制,细化控制要求略有不同,可以增加不同模式的定时控制和延时控制。
    3)思考除上述家电外,还有哪些日常家用电器可以用已掌握的单片机控制技术来实现,并在这些家用电器控制系统里增加网络功能,比如wifi入网或者zigbee入网等,将家用电器都接入物联网。
四、实验报告撰写
    (包括数码管动态显示系统的原理图;实验程序;调试过程以及实验心得体会和实验拓展部分的思考),要求实验报告提交手写纸质版。

五、相关内容
实验原理图: stc32g实验箱原理图.pdf (374.9 KB, 下载次数: 66)

软件安装教程[冲哥]:👉点我👈
//=======================================================================================================================================================================================//
实验报告👧
一、实验要求
利用STC32G12K128实验箱,制作一个数码管动态显示系统。参考实验箱原理图,控制实验箱8只数码管,分别滚动显示单个数字0~7。
程序运行后,单片机控制左边第一个数码管显示0,其它数码管不显示;演示之后,控制左边第2只数码管显示1,其它不显示;直至第8只数码管显示7,其它不显示;反复循环上述过程。
二、实验目的
    掌握单片机控制LED共阳极数码管的动态显示。
三、实验原理
//=========================================//
   3.1数码管原理图
    截图202410081537057954.jpg
//=========================================//
    3.2 按键原理图
   
//=========================================//
    3.3延时函数原理

    //延时函数delay_ms 延时n毫秒
    //6000为经验值,使得i = MAIN_Fosc / 6000 = 4000 ,即这一个循环里面i就循环了4000次,大致为1ms的时间。
      #define MAIN_Fosc  24000000UL //晶振频率
      void delay_ms(u16 ms)        //unsigned int
       {
          u16 i;
          do
          {
                i = MAIN_Fosc/6000;
                while(--i);
          }while(--ms);
         }   
//=========================================//
    3.4 按键消抖原理

    因为按键是机械开关所以当机械触点断开、闭合时,由于机械触点的弹性作用,
    一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动(电压上下波动)。
    对于一个开关来说,整个按键周期中有效的时间大约在50-200ms,即大约10ms的抖动之后就是正常的低电平。


   
//=========================================//
    3.5 LED灯原理图
   
//=========================================//
    3.6 蜂鸣器原理图
    截图202410081547387143.jpg
//=========================================//

四、实验程序
    4.1 基础实验:数码管滚动显示0-7 CODE:
    思路:将各个数码管设置成一个数组,通过变量i调用。
    u8 i = 0;
    u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };        //数码管显示的0-9数字
    u8 COM_Tab[8] = { 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe };                   //0-7的位码数组   

    for ( i = 0; i < 8; i++) // 控制8个数码管逐个显示数字
    {
        P7 = COM_Tab;     // 选择当前数码管
        P6 = SEG_Tab;     // 显示相应的数字
        delay_ms(1000);      // 每个数码管显示1秒
    }

    其他代码略..

    实验效果:

    CODE: 0-7数码管滚动.zip (113.91 KB, 下载次数: 61) (改写自冲哥课堂案例)
//=====================================================================================================//
   4.2 拓展实验:设计电磁炉电子控制系统 CODE:

   思路:该系统使用了蜂鸣器,LED灯,按键,数码管等模块,需要先将各个模块完善,再综合应用。
    //=========================================//
    //蜂鸣器模块
    #define BEEP P54                //定义蜂鸣器引脚,根据原理图可知蜂鸣器通过P54来开关。

    函数名称: BEEP_RUN
    功能: 蜂鸣器的运行函数。每10ms执行一次,根据变量 Time_Beep 的值决定是否打开或关闭蜂鸣器。如果 Time_Beep 大于0,蜂鸣器保持响并且 Time_Beep 递减,直至为0时关闭蜂鸣器。
    备注: 需要每10ms执行一次。

    函数名称: BEEP_ON
    功能: 设置蜂鸣器响的持续时间,以10ms为单位。根据输入的 time 参数设置 Time_Beep 的值,控制蜂鸣器持续运行的时间。

    函数名称: BEEP_OFF
    功能: 立即关闭蜂鸣器。将 Time_Beep 设为0,停止蜂鸣器的运行。

    模块代码: BEEP.zip (1.03 KB, 下载次数: 58)
//=========================================//
    //LED灯模块
    P40 = 0;                        //由原理图,使用LED灯需要将P40口设置为0使三极管导通
//=========================================//  
    //按键模块   
    综合分析:电磁炉电子控制子系统需要5个按键为:开机、模式选择、确认、温度'+'、温度'-'
    故需要定义5个按键,SW32-SW36使用矩阵按键扫描(矩阵按键代码见附录)

    函数名称: KEY_Deal
    功能: 读取按键状态。循环检查8个按键端口的状态,并将按下时间存储在 Count 数组中,按下的状态赋值给 LastState。如果按键按下,计数器递增;如果松开,计数器清零。每10ms执行一次。

    函数名称: KEY_ReadState

    功能: 读取指定按键的状态。根据按下时间的长短返回不同的状态,包括未按下、消抖、单击、长按等。通过判断 Count 数组的值返回相应的按键状态。

    函数名称: MateixKEY_delay

    功能: 矩阵按键读取专用的延时函数。提供短暂延时,用于矩阵按键读取过程中确保按键状态稳定。

    函数名称: MateixKEY_Read

    功能: 读取矩阵按键按下的状态。通过行列扫描的方法,结合延时操作,检测出当前按下的按键并返回其键码。如果没有按键按下,则返回0。

    模块代码: KEY.zip (2.46 KB, 下载次数: 58)
//=========================================//  
    //数码管模块
    综合分析:
    函数名称:Update_Temperature_Display
    功能:通过对设定好的temperature进行数学运算,将温度值分解为数码管显示的各个位数,并且从右边开始填充数码管。

    函数名称:Clear_Temperature_Display()
功能:调用一个for循环来清空数码管显示。

    函数名称: SEG_LED_Show
    功能: 循环刷新8位数码管和8个LED。此函数每1ms调用一次,在前8ms刷新数码管显示,第9ms刷新LED状态,第10ms留空不进行刷新。
    通过 num 变量循环控制数码管和LED的刷新顺序,使用预定义的段码数组 SEG_Tab 和位码数组 COM_Tab 来控制显示内容。
    数码管刷新: 前8ms内,选择不同的数码管位(SEG_COM)并通过 SEG_Tab 显示相应的数字。
    LED刷新: 在第9ms时,打开LED电源并刷新LED的状态。
    空闲: 在第10ms时,关闭所有数码管和段码信号。

    模块代码: LED_ESG.zip (1.62 KB, 下载次数: 55)
//=========================================//  
    //定时器0模块
    综合分析:由于单片机内部需要不断扫描矩阵按键读取到的数值,会占用数码管的显示,所以需要将数码管显示放置到定时器0中。

    EA = 1;                                        //需要让CPU开放中断,打开总中断。
    函数名称: Timer0_Init
    功能: 初始化定时器0,使其在1毫秒内产生一个中断,时钟频率为24.000MHz。设置定时器的模式为12T模式,并配置定时初始值,使定时器开始计时,并且使能中断。

    模块代码: TIM.zip (952 Bytes, 下载次数: 53)
//=========================================//  
    程序总体代码: 电磁炉子系统.zip (208.18 KB, 下载次数: 60)
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-08 13:05:37
已绑定手机

6

主题

202

回帖

834

积分

高级会员

积分
834
发表于 2024-10-12 15:36:57 | 显示全部楼层
4位8段管动态扫描时,某位不显示的段会微亮显示其他位的内容,即鬼影现象,如何解决呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2024-10-23 17:26:58

5

主题

19

回帖

209

积分

中级会员

积分
209
发表于 2024-10-13 09:05:14 | 显示全部楼层
spring*** 发表于 2024-10-12 15:36
4位8段管动态扫描时,某位不显示的段会微亮显示其他位的内容,即鬼影现象,如何解决呢 ...

软件逻辑没问题的话要不试试把数码管扫描的频率降低些,并适当增加每一位的点亮时间?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:429
  • 最近打卡:2025-05-08 00:01:49
已绑定手机

19

主题

3196

回帖

4956

积分

论坛元老

积分
4956
发表于 2024-10-13 11:12:44 来自手机 | 显示全部楼层
把这个移植到stc8h应该很简单
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-08 13:05:37
已绑定手机

6

主题

202

回帖

834

积分

高级会员

积分
834
发表于 2024-10-14 08:34:42 | 显示全部楼层
惦*** 发表于 2024-10-13 09:05
软件逻辑没问题的话要不试试把数码管扫描的频率降低些,并适当增加每一位的点亮时间? ...

现在是1ms溢出后切换位选择,2ms会有闪烁感
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 07:53 , Processed in 0.115796 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表