ershiji 发表于 2023-11-12 23:12:25

stc32打卡和学习心得以及困惑

本帖最后由 ershiji 于 2023-11-15 18:08 编辑

通过今天的视频学习我了解了单片机的外观,功能,以及优势。
外观:不同的单片机具有不同的封装
功能:广泛应用于仪器仪表,家用电器,医用设备,航空航天,专用设备的智能化管理及过程控制等领域,大致可分为

智能仪器:电压,电流,功率,频率,湿度,流量等的仪器仪表
工业控制:工厂流水线的智能化,电梯智能化控制,各种报警系统等
家用电器:电饭煲,洗衣机,电冰箱,空调机,彩电等
网络和通信:手机,电话机,楼宇自动通信呼叫系统,列车无线通信等
医用设备领域:医用呼吸机,监护仪,超声波诊断设备及病床呼叫系统等
模块化系统: 电子音乐贺卡,plc工控板等
汽车电子:发动机控制器,基于CAN总线的汽车发动机智能电子控制器,gps导航系统,abs防抱死系统,制动系统,胎压检测等。

stc的51单片机对比stm32单片机的优势在于51的a/d转换精度更高

在使用单片机的过程中如果有问题可以打电话询问客服

在今后的项目开发中选择的单片机能够实现功能就行

1.一定要静得下心来学习,沉得住气

2.多跟着老师动手,千万别一看就会,一写就废

3.多举一反三,发散思维,时常思考为什么

4.多看官网,官网有单片机的更新记录,多看手册,有问题就得多交流

5.通过论坛,吸收一些别人的东西

6.尝试着自己多做一些项目,竞赛题




ershiji 发表于 2023-11-13 13:52:11

本帖最后由 ershiji 于 2023-11-13 14:00 编辑

第二集

了解了单片的一些基本模块


我此次学习的目的就是利用stc32单片机作为电磁寻迹小车的主控芯片,学习的重点就在于模数转换器ADC,串口通信,比较器,PWM波形输出。

第三集
此前学过单片机有过基础
在搭建keil c51的时候发现可以与mdk共存(事先已经安装并破解了mdk),c51也需要重新破解一遍
然后可以通过stcisp去下载一些官方的软件
添加了stc32G和头文件
没有搞懂usb驱动程序的安装(我的stcisp提示我不需要安装)主要就是不懂什么是软件模拟,初步的理解是通过软件解码然后编码输出



暂时还没有试验箱,无法进行程序的烧录
由于独特电路设计可以直接使用硬件USB进行程序下载(没有搞懂)




ershiji 发表于 2023-11-13 18:09:26

第四集
点亮led
我是有单片机基础的,所以感觉比较简单
新内容只有
sfr声明特殊寄存器和sbit声明sfr中的sfr位

stcisp设置不断电下载
软件方面需要添加:
USB(HID)模式
将stc_usb_hid_32g.LIB
#include “COMM/stc.h”//调用头文件
#include “COMM/usb。h”;

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";//设置自定义下载命令

aya_init();//这个函数的内容需要自己写一遍(复制)如果函数的定义写在这个函数的后面,则需要在这个函数前面声明这个函数
usb_init();//调用usb初始化代码
EA = 1;


USB-CDC/串口模式

今后的工程直接复制今天的工程然后进行修改



ershiji 发表于 2023-11-14 13:52:06

第五级




r

存数是以16位存的

练习printf


ershiji 发表于 2023-11-14 15:07:51

本帖最后由 ershiji 于 2023-11-14 15:11 编辑

第6级
while()和do while()的区别


使用上基本没有区别
--a与a--的区别在于前者自减1后输出后者先输出再进行自减1


2。3是自己写库函数时的步骤
课后祖业


#include "COMM/stc.h"
//#include "COMM/usb.h"

#define MAIN_Foce 24000000UL //定义一个IRC时钟

void delay_ms (int ms)
{
        while(--ms)
        {
        int i;
        i = MAIN_Foce/6000;       
        i--;
        }
}


void main()
{

       
        P4M0 = 0X00;
        P4M1 = 0X00;
        P6M0 = 0X00;
        P6M1 = 0X00;
        P40 = 0;
        while(1)
        {

                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
               
                P60 = 1;
                delay_ms(500);
                P60 = 0;
                delay_ms(500);
                P60 = 1;
                delay_ms(500);
                P60 = 0;
                delay_ms(500);
                P60 = 1;
                delay_ms(500);
                P60 = 0;
                delay_ms(500);
               
                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
                P60 = 0;
                delay_ms(100);
                P60 = 1;
                delay_ms(100);
        }
}       


ershiji 发表于 2023-11-14 16:46:14

本帖最后由 ershiji 于 2023-11-14 16:52 编辑

第七级


软件消抖
if(KEY == 0)
{
   Delay_ms();
   if(KEY == 0)
{
   执行功能
}
}
定义数组

课后作业

#include "COMM/stc.h"

#define MAIN_Foce 2400000UL

void KEY_S();
void MODE_S(void);
void MODE_0(void);
void MODE_1(void);
void delay_ms(u16 ms);


//假设按键是P32,按下变换模式,两种模式模式0流水灯,模式二逐次点亮,循环。由于没有使用中断所以按键无法迅速响应。
         u8 KEY;
      u8 i;      
      u8 o=0xfe;
      u8 wlt={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
      u8 MODE=0;

void main()
{      
      KEY=P32;
      P40 = 0;

      while(1)
      {
      KEY_S();
      MODE_S();      
      }
      
      
}
void MODE_S(void)
{
if(MODE==0)
{
MODE_0();
}
else
{
MODE_1();
}
}
      
void MODE_0(void)
{
      P6=wlt;
      i++;
      delay_ms(200);
      if(i==8)
      i=0;
}

void MODE_1(void)
{
      P6=o;
      if(o==0x00)
                o=0xff;
      delay_ms(200);
      o<<=1;
}

void KEY_S()
{
      if(KEY==0)
      {
                delay_ms(10);
                if(KEY==0)
                {
                MODE++;
                if(MODE==2)
                {
                MODE=0;
                }
                        o=0xfe;
                        i=0;
                while(KEY==0);
                }
      }      

}
void delay_ms(u16 ms)
{
      int ii;
      while(--ms)
      {
                ii=MAIN_Foce/6000;
                while(--ii);
      }

}
本人是有基础但是不是特别牢靠加上没有实验箱,所以不能保证代码的正确性。      



ershiji 发表于 2023-11-14 20:29:02

第八级无特别感悟,基本都会,思路就是有源蜂鸣器接电叫,也就是对应的引脚输出1,就叫,然后写程序的时候定义几个变亮来存储按键状态,最后来判断功能

ershiji 发表于 2023-11-14 21:26:58

第九集明白seg公共端,和顺序

ershiji 发表于 2023-11-15 18:41:07

第十集

通过三个数组
一个控制数码管的位数
一个控制数码管显示0-9的段码
一个控制相应位数的数码管要显示的数字
通人眼不能识别50khz以上的数据,控制数码管得刷新频率,来欺骗眼睛

ershiji 发表于 2023-11-20 18:17:44

第十一集,定时器的使用

定时器一定时间之后产生的中断,也就是定时器中断
设置为定时器的时候,可实现硬件计时,或者使程序每隔一固定时间完成一项操作
设置为计数器时候能够对脉冲进行计数
替代长时间的delay,提高CPU的运行效率和处理速度,能够及时响应某个事件






页: [1] 2
查看完整版本: stc32打卡和学习心得以及困惑