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

STC32单片机学习记录 | 建议立即 【免费+包邮送】实验箱,提高学习效率

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:507
  • 最近打卡:2025-05-06 07:45:00
已绑定手机

1

主题

836

回帖

1517

积分

金牌会员

积分
1517
发表于 2023-12-28 19:25:01 | 显示全部楼层
立创EDA很简单的,一学就会
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-05-06 15:17:04
已绑定手机

17

主题

81

回帖

398

积分

中级会员

积分
398
发表于 2023-12-28 20:13:00 | 显示全部楼层
第九集
静态数码管的使用

数码管可以分为共阴和共阳两种,本质上就是多段LED灯
3.png


P67
P66
P65
P64
P63
P62
P61
P60

dp
g
f
e
d
c
b
a
0
1
1
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
2
1
0
1
0
0
1
0
0
3
1
0
1
1
0
0
0
0
4
1
0
0
1
1
0
0
1
5
1
0
0
1
0
0
1
0
6
1
0
0
0
0
0
1
0
7
1
1
1
1
1
0
0
0
8 1 00 0 0 0 0 0
9 1 0 0 0 1 0 0 0
这是共阳极数码管段码表,共阴极就是按位取反
给要显示的位选口赋1,把上表的二进制数转化成16进制或10进制存放在数组里面,赋值给P6口就可以让数码管显示相应的数字了!




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-05-06 15:17:04
已绑定手机

17

主题

81

回帖

398

积分

中级会员

积分
398
发表于 2023-12-29 13:30:19 | 显示全部楼层
第十集

数码管的动态显示
数码管动态显示的原理就是利用人眼分辨不出50HZ以上的刷新率
4.png
只要让相邻两个数码管亮的间隔为1ms,在我们视角里它就是同时点亮的。
同时点亮八个数码管,逻辑就是:位选——段选——1ms延时——位选....
有一点我不明白,能不能让这个数码管亮的间隔更小呢?1us可以吗?
截图202312291327414480.jpg
后面冲哥又以免单计数器给我们实战演练了一下动态数码管的应用,学一个东西马上就去实践它,好的教学!!!




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-05-06 15:17:04
已绑定手机

17

主题

81

回帖

398

积分

中级会员

积分
398
发表于 2023-12-29 14:50:10 | 显示全部楼层
第十一集

定时器的使用
截图202312291333561591.jpg

截图202312291337092927.jpg

delay函数占用CPU大量时间,利用定时器中断可以定时进中断,提高CPU的运行效率
冲哥举了一个很形象的例子,主程序:你在背书 中断:妈妈让你5min后去看看锅里的汤有没有烧干
而如果不用中断表示的话,那就是 主程序:你在背书,过5min后再去看看锅里的汤有没有烧干
很明显你背书的时间是不确定的,中断可以打断你的背书,5min后立马去看看水有没有烧干,再回来继续背
而如果不用中断,你就要等背完书再去看看水有没有烧干,说不定那个时候水已经烧干了呢?
截图202312291417475185.jpg

截图202312291420052038.jpg

使用定时器0定时要把TMOD中的 截图202312291420561900.jpg 清零,分频与不分频取决于T0x12,计数值相差12倍
截图202312291430178088.jpg 截图202312291430561641.jpg


截图202312291432312085.jpg 截图202312291433228438.jpg

定时时间计算方法:
截图202312291439446847.jpg

截图202312291443263714.jpg

配置定时器0进行1ms定时,定时器0中断号为1,中断处理函数要加上interrupt 1,函数名可以随便起
这样就配置好了1ms的定时器中断
计算定时长度太麻烦的话可以使用stc-isp软件

截图202312291449023624.jpg





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-05-06 09:22:11

718

主题

1万

回帖

1万

积分

管理员

积分
15674
发表于 2023-12-29 14:54:05 | 显示全部楼层
建议立即 【免费+包邮送】实验箱,提高学习效率

截图202312291453405479.jpg
深圳国芯人工智能有限公司-工具软件 (stcai.com)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2025-05-06 11:39:51

5

主题

296

回帖

2080

积分

金牌会员

积分
2080
发表于 2023-12-29 15:55:11 | 显示全部楼层

我的板子在定时器里调用printf可以使用,但是在主函数里会卡在哪里是咋回事?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:394
  • 最近打卡:2025-05-06 07:53:41

45

主题

381

回帖

1587

积分

金牌会员

静坐常思己过,闲谈莫论人非

积分
1587
发表于 2023-12-29 16:29:00 | 显示全部楼层
lzl1*** 发表于 2023-12-29 15:55
我的板子在定时器里调用printf可以使用,但是在主函数里会卡在哪里是咋回事? ...

你把你的主程序和定时器的程序贴上来看看才能分析一下,不然看见你的问题有点蒙
处事要代人所想,读书需切己用功
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2025-05-06 11:39:51

5

主题

296

回帖

2080

积分

金牌会员

积分
2080
发表于 2023-12-29 16:34:18 | 显示全部楼层
在外面等下回去就贴上来一起研究下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-05-06 15:17:04
已绑定手机

17

主题

81

回帖

398

积分

中级会员

积分
398
发表于 2023-12-30 16:56:52 | 显示全部楼层
本帖最后由 Crystalline 于 2023-12-30 16:57 编辑

感谢STC!实验箱已经在路上了!如此良心!不愧是国产单片机/MCU的领航者,1T 8051单片机的领导者,328051单片机的领导者!
第十二集
计数器的使用
上一节课用的是定时器0作为定时器的模式,这节课是作为计数器的模式

截图202312301341442207.jpg


定时器是系统内部时钟进行计数
计数器就是通过外部引脚输入的脉冲信号计数,可以借助编码器用于电机测速
冲哥利用了按键模拟脉冲信号,要配置内部引脚的上拉电阻才可以做到电平从高到低的转变
stc-isp软件中有快速配置的方法
截图202312301635502930.jpg 截图202312301636589281.jpg

看冲哥视频,是脉冲下降沿计数,按键按下,电平由高-低-高,有一个下降沿
计数溢出产生中断,在中断中把LED引脚电平取反
但是如果实际中要用到上升沿或者双边沿计数怎么办?怎么配置呢?想请教一下各位
手上有一个旋转编码器,就只能用编码器测试一下了
这里用的是定时器1作为串口1的波特率发生器,定时器0计数,不断向串口发送当前计数值
给大家看一下

1703926476906.mp4

7.17 MB, 下载次数: 208

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-05-06 15:17:04
已绑定手机

17

主题

81

回帖

398

积分

中级会员

积分
398
发表于 2023-12-30 17:02:00 | 显示全部楼层
Crysta*** 发表于 2023-12-30 16:56
感谢STC!实验箱已经在路上了!如此良心!不愧是国产单片机/MCU的领航者,1T 8051单片机的领导者,32位8051 ...
  1. #include <STC32G.H>
  2. #include <stdio.h>
  3. unsigned int count = 0;
  4. void System_Init()
  5. {
  6.         EAXFR = 1;
  7.         CKCON = 0x00;
  8.         WTST = 0x00;
  9.         //高阻输入模式
  10.         P3M0 = 0x00; P3M1 = 0x10;
  11.         EA = 1;
  12. }
  13. void Uart1Init(void)                //9600bps@24.000MHz
  14. {
  15.         SCON = 0x50;                //8位数据,可变波特率
  16.         AUXR |= 0x40;                //定时器时钟1T模式
  17.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  18.         TMOD &= 0x0F;                //设置定时器模式
  19.         TL1 = 0x8F;                        //设置定时初始值
  20.         TH1 = 0xFD;                        //设置定时初始值
  21.         ET1 = 0;                        //禁止定时器中断
  22.         TR1 = 1;                        //定时器1开始计时
  23. }
  24. void Timer0_Count()
  25. {
  26.         TMOD = TMOD|0x04; // 16位计数模式
  27.         TL0 = 0xff;
  28.         TH0 = 0xff;
  29.         ET0 = 1;
  30.         TR0 = 1;
  31. }
  32. void Timer0_handler() interrupt 1
  33. {
  34.         count++;
  35. }
  36. void UART_SendByte(unsigned char Byte)
  37. {
  38.         SBUF = Byte;
  39.         while(!TI);
  40.         TI = 0;
  41. }
  42. void main()
  43. {
  44.         System_Init();
  45.         Uart1Init();
  46.         Timer0_Count();
  47.         while(1)
  48.         {
  49.                 UART_SendByte((unsigned char)(count>>8));
  50.                 UART_SendByte((unsigned char)count);               
  51.         }
  52. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 21:49 , Processed in 0.143900 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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