找回密码
 立即注册
楼主: oce4n

【实验箱已收到】STC32位8051单片机_学习打卡心得

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-12 16:27:47 | 显示全部楼层
第十三集 上
回顾,理清程序的逻辑思路。
应用模块化编程
重要的函数添加说明

修饰符 extern 用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

bdata位寻址变量的使用


截图202403121619381785.jpg

这里冲哥声明的
截图202403121621399314.jpg

输出led状态赋值为何还是SEG_SEG 不应该是LED的寄存器组吗
按照视频写就只显示数码管LED不会亮
把标注部分改成led所在的寄存器就可以点亮
可能是因为我的板子有点不一样,再研究研究

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-13 10:41:52 | 显示全部楼层
十三集中 简单定时器多任务
alt+shift 快捷键部分选择
bdata位寻址变量的使用
按键的逻辑分析

截图202403131039588136.jpg

按键分析

按键分析


截图202403131041117473.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-13 11:53:40 | 显示全部楼层
十三集下,完善按键的模块化编程

按键未按下
消抖
单击
单击结束
长按3秒
长按结束
按键松开

几种状态
  1. #include "key.h"
  2. u16 Count[8] = {0,0,0,0,0,0,0};
  3. u8 LastState = 0;                                        //8位变量
  4. void KEY_Deal(void)                    //检查所有按键的状态,10ms计数一次
  5. {
  6.         u8 i = 0;
  7.         for(i=0;i<8;i++)                                 //循环8次,i范围0-7.代表按键状态
  8.         {
  9.                 if(~KEY&(1<<i))                                //如果持续按下,变量+1     & 全1 输出1
  10.                 {
  11.                         if(Count[i]<60000)
  12.                         Count[i] ++;                                        //按键按下,计数+1
  13.                 }
  14.                 else                                                                        //按键松开变量清0
  15.                 {
  16.                         if(Count[i]>0)                                                  //如果变量按下过
  17.                         {
  18.                                 LastState |= (1<<i);                                //这个变量相应的标志位置位
  19.                         }
  20.                         else
  21.                         {
  22.                                 LastState &= ~(1<<i);                                //这个变量相应的标志位清0
  23.                         }
  24.                         Count[i] = 0;                                ////按键松开,计数变量清0
  25.                 }
  26.         }
  27. }
  28. u8 KEY_ReadState(u8 keynum)//读取指定按键的状态
  29. {
  30.         if(Count[keynum]>0)                                        //按键是按下的各种状态返回
  31.         {
  32.                         if(Count[keynum]<3)                        //按下<30ms 返回消抖
  33.                         {
  34.                                 return KEY_FILC;
  35.                         }
  36.                         else if(Count[keynum]==3) //按下正好30ms 返回单机
  37.                         {
  38.                                 return KEY_PRESS;
  39.                         }
  40.                         else if(Count[keynum]<300) //按下不到300ms 返回单机结束
  41.                         {
  42.                                 return KEY_PRESSOVER;
  43.                         }
  44.                         else if(Count[keynum]==300) //按下不到3000ms 返回长安状态
  45.                         {
  46.                                 return KEY_LONGPRESS;
  47.                         }
  48.                         else                                                                                //长安结束
  49.                         {
  50.                                 return KEY_LONGOVER;
  51.                         }
  52.         }
  53.         else                                                                                //按键已经松开 各种状态返回
  54.         {
  55.                 if(LastState &(1<<keynum))                                                                        //按键按下过
  56.                 {
  57.                         return KEY_RELAX;
  58.                 }
  59.                 else                                                                        //按键之前没有按下
  60.                 {
  61.                         return KEY_NOPRESS;
  62.                 }
  63.         }
  64. }
复制代码
这个是主函数中执行的

主函数中的循环

主函数中的循环


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-22 09:28:34 | 显示全部楼层
十四集,矩阵按键
先了解了矩阵按键的原理
用switch语句来显示键码
通过密码锁项目来实现矩阵按键的功能
截图202403220927526545.jpg

下面是部分代码
  1.    KEY_NUM = MateixKEY_Read();                                                        //当前矩阵按键的键值
  2.                         if( KEY_NUM>0 )                                                                                //如果有按键拿下
  3.                         {
  4.                                 BEEP_ON(2);                                                                                //蜂鸣20ms
  5.                                 Show_Tab[KEY_Str] = KEY_NUM;                                        //将当前的按键的键值保存到数码管显示变量里
  6.                                 KEY_Str ++;                                                                                //s输入的密码位数+1
  7.                                
  8.                                 if( KEY_Str == 8 )                                                                //如果密码已经输到了8位
  9.                                 {
  10.                                         KEY_Str = 0;                                                                //清空当前密码的位数
  11.                                         //for
  12.                                         if((Show_Tab[0]==1)&&(Show_Tab[1]==1)&&(Show_Tab[2]==1)&&(Show_Tab[3]==1)&&(Show_Tab[4]==1)&&(Show_Tab[5]==1)&&(Show_Tab[6]==1)&&(Show_Tab[7]==1))        //如果密码正确
  13.                                         {
  14.                                                 LED0  = 0;                                                                //点亮LED0
  15.                                         }
  16.                                         else
  17.                                         {
  18.                                                 BEEP_ON(200);                                                        //密码错误,蜂鸣2秒
  19.                                         }
  20.                                         SEG0 = SEG1 = SEG2 = SEG3 = SEG4 = SEG5 =SEG6 = SEG7 = 21;         //将所有的数码管显示位 -
  21.                                 }
  22.                                 KEY_NUM = 0;                                                                        //清空按键键值
  23.                         }
复制代码



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-25 10:11:44 | 显示全部楼层
十五集 外部中断
根据手册中的打开关闭寄存器通道来写外部中断
熟悉了外部中断的作用和使用方法
这是外部中断0 INT0 的结构
截图202403250954153834.jpg

IT0:外部中断源0触发控制位。IT0=0,上升沿或下降沿均可触发外部中断0。

IT0=1,下降沿触发方式。

截图202403251006544108.jpg

硬件可以自动清零,还是要手动清一下,防止上电就进入中断
截图202403251004181081.jpg

EX0=1;
  1. void INT0_Init(void)                                //外部中断0的初始化
  2. {
  3.         IT0 = 1;                                                //1:下降沿中断   0:上升下降沿中断
  4.         EX0 = 1;                                                //允许中断
  5.         IE0 = 0;                                                //清除中断标志位
  6. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2025-05-07 06:15:15
已绑定手机

17

主题

137

回帖

1543

积分

金牌会员

积分
1543
发表于 2024-3-25 20:54:27 | 显示全部楼层
看起来好厉害的样子!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-26 09:58:03 | 显示全部楼层
电子爱*** 发表于 2024-3-25 20:54
看起来好厉害的样子!

都是看视频跟写,还是得练{:5_336:}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2025-05-07 06:15:15
已绑定手机

17

主题

137

回帖

1543

积分

金牌会员

积分
1543
发表于 2024-3-28 22:15:34 | 显示全部楼层
练得怎么样了,达到什么水平了?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-30 15:18:16
已绑定手机

1

主题

36

回帖

86

积分

注册会员

积分
86
发表于 2024-3-29 09:30:55 | 显示全部楼层
电子爱*** 发表于 2024-3-28 22:15
练得怎么样了,达到什么水平了?

上次学的用定时器多任务来优化电磁炉程序还没写出来呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:398
  • 最近打卡:2025-05-07 06:15:15
已绑定手机

17

主题

137

回帖

1543

积分

金牌会员

积分
1543
发表于 2024-3-29 21:59:45 | 显示全部楼层
比我厉害,我现在程序编程还没弄明白
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 19:31 , Processed in 0.147096 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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