zhange 发表于 2024-5-12 14:31:38

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


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

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

3.函数备注:

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


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

6.

zhange 发表于 2024-5-12 14:46:48

本帖最后由 zhange 于 2024-5-12 15:35 编辑

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


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

用上了,嘎嘎香。。。。。。



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


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

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

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

zhange 发表于 2024-5-12 16:09:50

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


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

for(i = 0; i<8;i++)
{
printf("第%d次",i);
}
//2.ifelse程序的灵魂呀{:lol:}{:lol:}{:lol:}{:lol:}

zhange 发表于 2024-5-12 17:33:19

本帖最后由 zhange 于 2024-5-12 17:36 编辑

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


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

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

#ifndef __BUZZER_H
#define __BUZZER_H

#include "stc32g.h"

//yijiao

#define bezzer P00



void buzzerRun(void);
void buzzerTime(unsigned char i);

#endif

#include "buzzer.h"

unsigned char bt;

void buzzerRun(void)
{
                if(bt > 0)
                {
                        bt--;
                        bezzer = 0;
                }else if(bt == 0)
                {
                        bezzer = 1;
                }
}


void buzzerTime(unsigned char i) //i 单位 ms
{
      bt = i;
}


Delay10ms();
                buzzerRun();
                if(P33 == 0)
                        {
                              buzzerTime(3);                              
                        }


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

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

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








zhange 发表于 2024-5-12 20:55:19

本帖最后由 zhange 于 2024-5-12 21:08 编辑

第十四集:矩阵按键


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

上图1为你写进去的 2为系统读出来的

2.8个按键判断。
步骤说明
1.初始化:配置单片机的I/O端口,将用于键盘的行线和列线分别连接到单片机的不同I/O端口上。
2.扫描键盘:通过软件轮询的方式,依次将每一行置为低电平(或高电平),然后读取所有列的状态,判断是否有按键按下。
3.消抖处理:当检测到按键按下时,使用软件延时或再次检测的方法来消除按键抖动,确保按键的稳定性。
4.确定按键值:根据行线和列线的状态,计算出被按下的按键的编码值。
5.执行相应操作:根据按键的编码值,执行相应的操作或功能。
3.%02x表示打印出来2位的十六进制数   还记得%D%s%c吗??????? 都忘了吧 {:lol:}
printf("0x%02x",key);

4.switch开关函数
switch(i)
{
case 0x41:
      key = 1;
      break;
case 0x42:
      key = 2;
      break;
}

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

zhange 发表于 2024-5-13 10:51:21

本帖最后由 zhange 于 2024-5-13 11:02 编辑

第十九集:NTC温度采集


1.ntc原理




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

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


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


zhange 发表于 2024-5-13 17:14:13

第二十集:串口通信上


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

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

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


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

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

6.波特率    发送数据的速度    9600 表示1秒可以发送9600个位   

zhange 发表于 2024-5-14 21:06:52

第二十集:串口通信下


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

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

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

4.波特率计算公式:



5.设置波特率可以在isp里快速获取。

zhange 发表于 2024-5-15 20:51:41

本帖最后由 zhange 于 2024-5-15 21:28 编辑

第二十一集:串口应用上


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



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

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

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

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




zhange 发表于 2024-5-16 08:21:00

第二十一集:串口应用下


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

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

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


页: 1 2 3 [4] 5 6 7
查看完整版本: 【冲哥版】stc32学习心得