找回密码
 立即注册
楼主: 千年老姚

接下来我在这个帖子里准备发对冲哥视频做的笔记

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2022-12-23 11:15:10 | 显示全部楼层

要提前打开内部上拉的 4K 电阻

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2022-12-23 12:22:46 | 显示全部楼层
已收到姚总配发的STC全家福!接下来我会将之前的作业一些效果图以及视频发于此。
也请姚总帮我提高等级,以便让我上传视频!
QQ图片20221223122126.jpg
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2022-12-23 13:22:00 | 显示全部楼层
您已是金牌会员
1.png
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2022-12-23 13:27:08 | 显示全部楼层
“开源广场及教学视频交流”版块已开通上传播放视频功能
【新提醒】论坛上传视频方法介绍 - 开源广场及教学视频交流 国芯论坛 (stcaimcu.com)
1.png
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2022-12-24 19:58:30 | 显示全部楼层
本帖最后由 千年老姚 于 2023-1-4 19:23 编辑

各位晚上好!今天是2023考研第一天
听说英一特别难?:dizzy:
政治肖秀荣发挥依旧稳定:lol
刚才看完了第十二集,以下为简略版笔记
若笔记有误,请各位指正
第九章:数码管的静态使用
一.认识数码管
数码管为LED数码管,内部是由多个发光二极管封装在一起组成。
本质都是点亮内部LED来显示的,只要面板做好了,理论可以显示任意的字符或者图案。
开发板中带了两个四位数码管。
按发光二极管单元连接方式可以分为共阳极数码管和共阴极数码管,尾缀A标识共阳,K表示共阴。
共阳接通:某管给低电平
共阴接通:某管给高电平
开发板上:共阳数码管/
二.控制原理
今日任务:点亮最后一位8
使用P6和COM0即可点亮LED
COM0——P7.0
码表
P67
P66
P65
P64
P63
P62
P61
P60
十进制
16进制
dp
g
f
e
d
c
b
a
0
1
1
0
0
0
0
0
0
192
C0
1
1
1
1
1
1
0
0
1
249
F9
2
1
0
1
0
0
1
0
0
164
A4
3
1
0
1
1
0
0
0
0
176
B0
4
1
0
0
1
1
0
0
1
153
99
5
1
0
0
1
0
0
1
0
146
92
6
1
0
0
0
0
0
1
0
130
82
7
1
1
1
1
1
0
0
0
248
F8
8
1
0
0
0
0
0
0
0
128
80
9
1
0
0
1
0
0
0
0
144
90

三.数码管实现0-9的显示
1.用数组定义0-9的内码
2.尝试用延时实现0-9的循环显示
3.用按键控制数字的加或者减。
代码如下(省略部分头文件)
  1. u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
  2. void main()
  3. {
  4. num = 0;
  5. while(1)
  6. {
  7. P70 = 0 ;//开启一个数码管
  8. P6 = SEG_Tab[num];  //该数码管输出段码
  9. num++;
  10. delay_ms(1000);
  11. if (num>9)
  12. num = 0;
  13. }
  14. }
复制代码

3.按键加减
  1. #define KEY1 P32
  2. #define KEY2 P33
  3. #define BEEP P54
  4. ......
  5. u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
  6. void main()
  7. {
  8. num = 0;
  9. while(1)
  10. {
  11. P70 = 0 ;//开启一个数码管
  12. P6 = SEG_Tab[num];  //该数码管输出段码
  13. if (KEY1 == 0)
  14. {
  15. delay_ms(10);
  16. if (KEY1 == 0)
  17. {
  18. BEEP = 0;
  19. delay_ms(10);
  20. BEEP = 1;
  21. while(KEY1 == 0)
  22. if (num < 9)
  23. {
  24. num++;
  25. }
  26. }
  27. }
  28. if (KEY1 == 0)
  29. {
  30. delay_ms(10);
  31. if (KEY2 == 0)
  32. {
  33. BEEP = 0;
  34. delay_ms(10);
  35. BEEP = 1;
  36. while (KEY2 == 0)
  37. if (num > 0)
  38. {
  39. num--;
  40. }
  41. }
  42. }
  43. }
  44. }
复制代码

自己需要学会取码,后期学习LCD会运用到。
总结:
1.了解数码管的数字内码的由来
2.学会数码管通过数组的方式获取数值。
课后练习:1.尝试使用数码管显示  -   H  J    L   N   o  P   U  t  r 等字母或符号。
2.通过一个按键设置数码管显示数字0-9循环,在按一下另一个按键的时候,数码管上显示的数字几,蜂鸣器就响几声。

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2022-12-26 20:13:54 | 显示全部楼层
本帖最后由 千年老姚 于 2023-1-4 19:26 编辑

各位晚上好!
刚才看完了第十三集,以下为简略版笔记
若笔记有误,请各位指正
第十章:数码管的动态显示
1.数码管动态刷新的原理
后面附图
2.控制原理
注意:延时不能太短,人眼难以分辨50hz以上动态刷新
3.八位数码管的同时点亮
1.在上一节课的基础上,新增一个位码选择的数组
数组  
P77        P76        P75        P74        P73        P72        P71        P70
1        2        3        4        5        6        7        8        十六进制
点1                0        1        1        1        1        1        1        1        7F
点2                1        0        1        1        1        1        1        1        BF        
点3                1        1        0        1        1        1        1        1        DF
点4                1        1        1        0        1        1        1        1        EF
点5                1        1        1        1        0        1        1        1        F7
点6                1        1        1        1        1        0        1        1        FB
点7                1        1        1        1        1        1        0        1        FD
点8                1        1        1        1        1        1        1        0        FE


2.调用数组选择位码

  1. //以下省略部分头文件
  2. u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
  3. u8 COM_Tab[8]= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE} //点亮某个数码管
  4. void main()
  5. {
  6. while(1)
  7. {
  8. P7 = COM_Tab[0];
  9. P6 = SEG_Tab[0];
  10. delay_ms(200);
  11. P7 = COM_Tab[1];
  12. P6 = SEG_Tab[1];
  13. delay_ms(200);
  14. P7 = COM_Tab[2];
  15. P6 = SEG_Tab[2];
  16. delay_ms(200);
  17. P7 = COM_Tab[3];
  18. P6 = SEG_Tab[3];
  19. delay_ms(200);  //显示0123
  20. }
  21. }
复制代码

简略写法(省去部分头文件,函数定义):
  1. while(1)
  2. {
  3. P7 = COM_Tab[num];
  4. P6 = SEG_Tab[num+1];
  5. delay_ms(200);
  6. num++;
  7. if(num > 7)
  8. num = 0;
  9. }
复制代码


3.新建一个数组选择每个位需要显示的内容
  1. //以下省略部分头文件
  2. u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
  3. u8 COM_Tab[8]= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE} //点亮某个数码管
  4. u8 Show_Tab[8] = [1,9,1,9,8,1,0,0]
  5. void main()
  6. {
  7. while(1)
  8. {
  9. P7 = COM_Tab[num];  //位码的选择
  10. P6 = SEG_Tab[Show_Tab[num]]; //需要显示数字的内码 赋给 P6
  11. //num = 0 —> Show_Tab[num] = 1 —> P6 = 0xF9
  12. P6 = SEG_Tab[num+1];
  13. delay_ms(200);
  14. num++;
  15. if(num > 7)
  16. num = 0;
  17. }
  18. }
复制代码


实战小练:简易10秒免单计数器
1.在前四位数码管上显示目标时间,即“ 10. 00 ”表示定时时间10秒钟
2.后四位显示当前的计时00.00,最小单位为10ms.
3.按下开始按钮后,每10ms最末尾的数字+1;直到按下结束按钮后停止计数。

  1. //以下省略部分头文件
  2. //u8 SEG_Tab[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
  3. //带小数点段码:最高位- 0x80就可以
  4. u8 SEG_Tab[10] = { 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  5. u8 COM_Tab[8]= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //点亮某个数码管
  6. u8 Show_Tab[8] = {0,0,0,0,10,0,0,0};
  7. u32 TimCount = 0;  //计数单位1ms
  8. bit RUN_State = 0 //开始运行/结束运行
  9. void main()
  10. {
  11. while(1)
  12. {
  13. Show_Tab[0] = 1;
  14. Show_Tab[1] = 10;
  15. Show_Tab[2] = 0;
  16. Show_Tab[3] = 0;
  17. P7 = COM_Tab[num];  //位码的选择
  18. P6 = SEG_Tab[Show_Tab[num]]; //需要显示数字的内码 赋给 P6
  19. //num = 0 —> Show_Tab[num] = 1 —> P6 = 0xF9
  20. P6 = SEG_Tab[num+1];
  21. delay_ms(200);
  22. if (RUN_State == 1)
  23. {
  24. TimCount++;
  25. Show_Tab[4] = TimCount/1000%10;
  26. Show_Tab[5] = TimCount/1000%10;  //显示小数点和千位
  27. Show_Tab[6] = TimCount/100%10;   //取百位
  28. Show_Tab[7] = TimCount/10%10;  //取十位
  29. }
  30. num++;
  31. if(num > 7)
  32. num = 0;
  33. if (KEY1 == 0)
  34. {
  35. delay_ms(10);
  36. if (KEY1 == 0)
  37. {
  38. BEEP = 0;
  39. delay_ms(10);
  40. BEEP = 1;
  41. while(KEY1 == 0)
  42. {
  43. P7 = COM_Tab[num];  
  44. P6 = SEG_Tab[Show_Tab[num]];
  45. delay_ms(200);
  46. num++;
  47. if(num > 7)
  48. num = 0;
  49. }
  50. if (RUN_State == 0)
  51. RUN_State = !RUN_State;
  52. }
  53. }
  54. }
  55. }
复制代码

总结:
1.了解数码管怎么实现的动态显示。
2.学会每一位的数码管的任意内容的显示。
课后练习:
一、做一个简易时钟,功能如下
1.初始状态显示 00 - 00 - 00,分别作为时,分,秒
2.每隔一秒钟,秒+1,一分钟,分+1,以此类推
3.时间到达00 - 00 - 30的时候,蜂鸣响3秒钟表示闹钟
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2022-12-26 20:50:45 | 显示全部楼层
这几天有点累 笔记质量有些下降。
我这周主要任务是上传作业视频给各位 以供各位参考。
今年考研数学太难了 我看的都头晕:dizzy:
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2022-12-29 20:27:44 来自手机 | 显示全部楼层
各位 我最终还是羊了 大家要注意身体
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2022-12-29 21:13:46 | 显示全部楼层
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2024-08-23 14:40:43

6

主题

60

回帖

1427

积分

金牌会员

积分
1427
发表于 2023-1-1 18:34:22 来自手机 | 显示全部楼层
昨天测得 还没好 继续养身体
IMG_20221231_130303.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-2 20:32 , Processed in 0.187342 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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