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字码表。