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

【冲哥版】stc32学习心得

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-12 14:31:38 | 显示全部楼层
第十三集:简易多任务处理上


1.写程序重点是理清程序的逻辑思路。

2.模块化编程:8051单片机搞不了,还得是stc32.  这是和c++写程序思路差不多了。

3.函数备注:

//========================================================================
// 函数名称:
// 函数功能:
// 入口参数:
// 函数返回:
// 当前版本:
// 修改日期:
// 当前作者:
// 其他备注:
//========================================================================
4.没事走三步
截图202405121414055994.jpg

5.extern 修饰符  表明这个个变量在别处定义的,没事你先用吧。不能赋初值。

6.   截图202405121416417267.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-12 14:46:48 | 显示全部楼层
本帖最后由 zhange 于 2024-5-12 15:35 编辑

第十三集:简易多任务处理中


1.既然学到模块化编程了,就自己动手写个,延时函数做到一块吧!常用的1ms  10毫秒  1s  先来3  练练手。

用上了,嘎嘎香。。。。。。
截图202405121446133180.jpg


2.bdata  学习3月了一次没用过   再不用就还给冲哥吧!


  1. unsigned char bdata led;
  2. sbit led0 = led^0;
  3. sbit led1 = led^1;
  4. sbit led2 = led^2;
  5. sbit led3 = led^3;
  6. sbit led4 = led^4;
  7. sbit led5 = led^5;
  8. sbit led6 = led^6;
  9. sbit led7 = led^7;
  10. //注意高位在前低位在后。sfr   sbit bdata  单片机专属。。。。
复制代码


3.以前不明白别人为啥老是给io口别名,现在明白了,方便移植。

4.有个疑问备注占用单片机rom吗??老师这里每行都备注??有必要吗???
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-12 16:09:50 | 显示全部楼层
第十三集:简易多任务处理下


1.又学一个新的循环,for循环小扩号里用的是分号??有没有发现其他都是(,)。也就是说这里的指令分三次执行的。

  1. for(i = 0; i<8;i++)
  2. {
  3. printf("第%d次",i);
  4. }
  5. //
复制代码
2.if  else  程序的灵魂呀
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-12 17:33:19 | 显示全部楼层
本帖最后由 zhange 于 2024-5-12 17:36 编辑

第十三集:简易多任务处理终


1.看了好像都会了,一写又不会了。还得多练。

2.把复杂的东西简单化,多功能一定要先拆解成最简单的任务。先做一个蜂鸣器试试手。

  1. #ifndef __BUZZER_H
  2. #define __BUZZER_H
  3. #include "stc32g.h"
  4. //yijiao
  5. #define bezzer P00
  6. void buzzerRun(void);
  7. void buzzerTime(unsigned char i);
  8. #endif
复制代码

  1. #include "buzzer.h"
  2. unsigned char bt;
  3. void buzzerRun(void)
  4. {
  5.                 if(bt > 0)
  6.                 {
  7.                         bt--;
  8.                         bezzer = 0;
  9.                 }else if(bt == 0)
  10.                 {
  11.                         bezzer = 1;
  12.                 }
  13. }
  14. void buzzerTime(unsigned char i) //i 单位 ms
  15. {
  16.         bt = i;
  17. }
复制代码


  1. Delay10ms();
  2.                 buzzerRun();
  3.                 if(P33 == 0)
  4.                         {
  5.                                 buzzerTime(3);                                
  6.                         }
复制代码



3.程序看来还是得多练,蜂鸣器写了半个小时,一直错误,按一下一直响,逻辑没搞清楚,把蜂鸣器运行函数放到按键判断里了,拿出来就好了。

4.看会了不代表你会写了,一写就露馅了。还是那句话菜就多练,菜就多练,菜就多练。。。。

5.我买的蜂鸣器分正负极,红线正极,接错了也不响。哈哈可以给电子表加个闹钟了。。。。。。

22.jpg






回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-12 20:55:19 | 显示全部楼层
本帖最后由 zhange 于 2024-5-12 21:08 编辑

第十四集:矩阵按键


1.按键原理:系统默认io口输出是1,试验箱按键一端链接的地端,按键按下io口被接地,系统读出来为低电平。所以说你设置的和你读出来的不一定一样。一定要看懂下图
截图202405122056245995.jpg
上图1为你写进去的 2为系统读出来的

2.8个按键判断。
步骤说明
1.初始化:配置单片机的I/O端口,将用于键盘的行线和列线分别连接到单片机的不同I/O端口上。
2.扫描键盘:通过软件轮询的方式,依次将每一行置为低电平(或高电平),然后读取所有列的状态,判断是否有按键按下。
3.消抖处理:当检测到按键按下时,使用软件延时或再次检测的方法来消除按键抖动,确保按键的稳定性。
4.确定按键值:根据行线和列线的状态,计算出被按下的按键的编码值。
5.执行相应操作:根据按键的编码值,执行相应的操作或功能。

3.%02x  表示打印出来2位的十六进制数   还记得%D  %s  %c  吗??????? 都忘了吧
printf("0x%02x",key);

4.switch开关函数
  1. switch(i)
  2. {
  3. case 0x41:
  4.         key = 1;
  5.         break;
  6. case 0x42:
  7.         key = 2;
  8.         break;
  9. }
复制代码


5.有没有新手学习的你们都是看几次学会???我这第二次了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-13 10:51:21 | 显示全部楼层
本帖最后由 zhange 于 2024-5-13 11:02 编辑

第十九集:NTC温度采集


1.ntc原理

截图202405131023149876.jpg


2.主要用到的就是电阻分压原理,电阻随着温度的增加不断减小。分得的电压不断减少。

3.ntc采集来的可能是非标准数值,也就是可能含有小数。
截图202405131051178232.jpg

4.现在手里没样品,买了再来二刷。。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-13 17:14:13 | 显示全部楼层
第二十集:串口通信上


1.终于学到串口了,前几节没设备,没法测试,等几天返炉。

2.有没有发现老师声音变大了??

3.串口通信分为:同步串口通信,异步串口通信(这一节主要是异步串口uart)
截图202405131714529141.jpg

4.异步串口通信  
  1.以字符为单位  2.相邻字符间间隔任意长。

5.全双工:可以同时发送和接收  半双工:只能发送或者接收  单工:只能单向  

6.  波特率    发送数据的速度    9600 表示1秒可以发送9600个位   
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-14 21:06:52 | 显示全部楼层
第二十集:串口通信下


1.自己鼓捣了一天esp01s,串口设置会了,但是esp玩的还不好,学串口还是得做项目。

2.学习得和老师同步,还是得申请试验箱。

3.定时器可以为四个串口同时作为波特率提供。只有定时器2可以。

4.波特率计算公式:

截图202405142106123701.jpg

5.设置波特率可以在isp里快速获取。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-15 20:51:41 | 显示全部楼层
本帖最后由 zhange 于 2024-5-15 21:28 编辑

第二十一集:串口应用上


1.rxd和txd都是成对出现,rxd是接收线,txd是发送线。接收线接对面的发送线,发送线同理。
截图202405152051268228.jpg


2.stc32一共有4组串口,串口可以选择引脚,可以看手册。

3.串口出来的都是ttl电平。5v为1或3.3v为1(看mcu电压)   0v为0

4.单片机借助usb转ttl模块和电脑通信。

5.移植程序前,先测试程序能不能用。注意引脚?????




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:268
  • 最近打卡:2025-06-17 07:01:20

62

主题

830

回帖

1552

积分

金牌会员

积分
1552
发表于 2024-5-16 08:21:00 | 显示全部楼层
第二十一集:串口应用下


1.\r\n   win系统下的换行符

2.串口接收 存储的字符串,控制住不要越界 可能出现意想不到的错误。
esp8266测试的时候,你可能得不到正确的值。
接收存储数据位归零:1.可以在中断里软件判断结束位,置零。(比较准确)老师教的
                                2.也可以等上一段时间,在main函数中,置零。(我的esp8266就是这样,但是不准确 需要连接的服务器不挂机)

3.发送字符对应的数字,要对应好。发送字符0,到单片机他收到的不是0而是48。ascll字码表。
截图202405160820552632.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-19 05:54 , Processed in 0.154323 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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