找回密码
 立即注册
查看: 1470|回复: 6

学习打卡早日申请上实验箱

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-9-28 23:34:26 | 显示全部楼层 |阅读模式
DAY1
第一讲:


本次使用的是STC的32位8051单片机(STC32G12K128),介绍单片机的应用如医疗,工业控制,汽车电子等,51单片机相比于STM32来的易上手,行业应用广,没有出现淘汰的情况,性能稳定。

边看视频边做项目提升能力。小学生也可以学,说明单片机入门不会难。
做项目开发汇编不是必要的,用C就可以实现。最好能掌握寄存器开发,方便后期的移植,调试等。STC资料全,案例多,技术支持到位。
1、静下心沉住气
2、多动手
3、举一反三,多思考
4、多看官网,多看手册,有问题多交流
5、逛论坛,吸收别人的东西
6、尝试做项目,竞赛题
第二讲:
实验箱硬件介绍
红外发射,红外接收,电位器(电压比较用),数码管,8个LED灯(流水灯),万能板(自己实现外设),NTC测温,18B20,ADC按键(0-4095,基准电压用来校准),PWM模拟DAC,
24C02存储单元,矩阵键盘,独立按键,LCD接口(12864),LED(电源指示灯),RS232接口,FLASH扩展(内存更大),测试接口(调试用),蜂鸣电路
STC32G12K128基本性能:工作电压19.-5.5V,FLASH为128K

想用实验箱实现环境温度采集,报警,并能使用红外进行电器开关(如空调,风扇等带红外功能的电器),实现温度调节的功能。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-9-29 00:17:25 | 显示全部楼层
第三讲:
开发环境搭建
STC-ISP,STC手册,PDF阅读器,C251开发环境搭建,程序包下载,编译
1、STC-ISP
不仅能下载 STC全系程序,还集成虚拟显示功能,范例,在线生成工具,驱动等。软件很小,但功能很全,就是界面有点乱,需要一点时间适应一下布局。
下载地址:https://stcai.com/gjrj
stc-isp-15xx-v6.92D.zip (5.83 MB, 下载次数: 68)

截图202309282339315174.jpg

2、STC手册
STC-ISP内就可以下载,方便
截图202309282342113197.jpg

3、PDF用WPS查看(WPS已有,福昕要另外下载)
PDF目录可跳转,书签使用,ctrl+f搜索
4、C251开发环境搭建
手册上有下载地址:https://www.keil.com/download/product/
截图202309282347247002.jpg

5、程序包下载
主要问题在添加头文件和型号,可以用STC-ISP导入。
截图202309290005417343.jpg

编译成功
截图202309290006341528.jpg

WIN10驱动可以不安装,没有真板,下载只能等有工具箱再进行,不过进入下载模式的方式要先知道在哪里找,方法如下:
进入 USB 下载模式需要先按住实验箱上的 P3.2/INT0 按键/接地, 然后按一下 ON/OFF 电源按键/断电, 接着松开 ON/OFF 电源按键/上电, 最后可松开
P3.2/INT0 按键。 正常情况下就能识别出“STC USB Writer (HID1)” 设备

USB下载功能电路
截图202309290017199287.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-9-30 23:57:48 | 显示全部楼层
本帖最后由 lospring 于 2023-10-1 00:21 编辑

第四讲

P4.0(控制二极管基极)和P6.0(LED形成对地通路)都要低电平才能点亮对应的LED灯
1、IO模式设置及IO对应的寄存器查找
2、sbit操作
3、注释格式
截图202309302309041009.jpg

4、自动下载工程:警告很多,没有HEX文件生成。头文件也和视频不同,需要改成#include "COMM/STC32G.H"
#include "COMM/stc32_stc8_usb.h"

截图202309302353445242.jpg

看提示大概是MODEL类型不对,修改成XSMALL后编译成功
截图202309302357418711.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-10-1 00:40:13 | 显示全部楼层
第五讲
记录


截图202310010031243859.jpg

截图202310010032369694.jpg

截图202310010040112426.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-10-2 22:12:35 | 显示全部楼层
第六讲

延时函数

void delay_ms(u16 ms)
{
        u16 i;
        do{
                i=MAIN_Fosc/6000;
                while(--i);
          }while(--ms);
}

灯闪烁

                P40=0;
                P60=0;
                delay_ms(500);
                P60=1;
                delay_ms(500);

#ifndef __XX_H
#define __XX_H

#endif
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-10-3 16:25:32 | 显示全部楼层
本帖最后由 lospring 于 2023-10-3 16:33 编辑

第七讲
按键点灯



#include "COMM/STC32G.H"
#include "COMM/stc32_stc8_usb.h"

#define MAIN_Fosc 24000000UL //定义主时钟
#define key P32
#define key1 P33

char *USER_STCISPCMD="@STCISP#";
char *USER_DEVICEDESC=NULL;
char *USER_PRODUCTDESC=NULL;

void sys_init()
{
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x32;   P1M0 = 0x32;   //设置P1.1、P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V), P1.1在PWM当DAC电路通过电阻串联到P2.3
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V),设置开漏模式需要断开PWM当DAC电路中的R2电阻
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
}
void delay_ms(u16 ms)
{
        u16 i;
        do{
                i=MAIN_Fosc/6000;
                while(--i);
          }while(--ms);
}
void main()
{
        
        
        P0M0=0X00;//设置IO模式,P0M0与P0M1一起控制。
        P0M1=0X00;
        
        P4M0=0X00;
        P4M1=0X00;
        P6M0=0X00;
        P6M1=0X00;
        sys_init();
        usb_init();
        EA=1;
        P6=0XFE;
        while(1)
        {
                if(DeviceState != DEVSTATE_CONFIGURED)
                        continue;
                if(bUsbOutReady)
                {
                        usb_OUT_done();
                        printf("Hello World");
                }
                P40=0;
                if(key==0)
                {
                        delay_ms(10);
                        if(key==0)
                        {
                                printf("按键P32已按下\r\n");
                                P60=0;
                        }
                }
                else
                {
                        P60=1;
                }
//-------------------按下按键状态翻转-----------------
//                if(key1==0)
//                {
//                        delay_ms(10);
//                        if(key1==0)
//                        {
//                                printf("按键P33已按下,led状态翻转\r\n");
//                                P67=!P67;
//                                while(key1==0)
//                                {
//                                       
//                                }
//                        }
//                }
//                }
//-------------------按下按键,led左移一个单位点亮-----------------
                if(key1==0)
                {
                        delay_ms(10);
                        if(key1==0)
                        {
                                printf("按键P33已按下,led左移一位\r\n");
                                P6=((P6<<1)+1);
                                if(P6==0XFF)
                                {
                                        P6=0xFE;
                                }
                                while(key1==0)
                                {
                                       
                                }
                        }
                }
        
        }
}        



#快捷键,alt+shift可以选择一列数据如
0XFE
0XFD
0XFB
0XF7
0XEF
0XDF
0XBF
0X7F
通过上面方式可以快速选择FE,FD,FB。。。。
#数组操作
u8 LED_TAB[8]={

FE,
FD,
FB,
F7,
EF,
DF,
BF,
7F

};




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-05-03 21:43:16

1

主题

6

回帖

1295

积分

金牌会员

积分
1295
发表于 2023-10-6 23:43:51 | 显示全部楼层
第八讲

蜂鸣器驱动

#include "COMM/STC32G.H"
#include "COMM/stc32_stc8_usb.h"

#define MAIN_Fosc 24000000UL //定义主时钟
#define key P32
#define key1 P33
#define BEEP P54

char *USER_STCISPCMD="@STCISP#";
char *USER_DEVICEDESC=NULL;
char *USER_PRODUCTDESC=NULL;

void sys_init()
{
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x32;   P1M0 = 0x32;   //设置P1.1、P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V), P1.1在PWM当DAC电路通过电阻串联到P2.3
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V),设置开漏模式需要断开PWM当DAC电路中的R2电阻
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
}
void delay_ms(u16 ms)
{
        u16 i;
        do{
                i=MAIN_Fosc/6000;
                while(--i);
          }while(--ms);
}
void main()
{
       
       
        P0M0=0X00;//设置IO模式,P0M0与P0M1一起控制。
        P0M1=0X00;
       
        P4M0=0X00;
        P4M1=0X00;
        P6M0=0X00;
        P6M1=0X00;
        sys_init();
        usb_init();
        EA=1;
        P6=0XFE;
        while(1)
        {
                if(DeviceState != DEVSTATE_CONFIGURED)
                        continue;
                if(bUsbOutReady)
                {
                        usb_OUT_done();
                }
                if(key==0)
                {
                        delay_ms(10);
                        if(key==0)
                        {
                                while(key==0);
                                BEEP=!BEEP;
                        }
                }
       
        }
}       



小项目核心代码

void Test(void)
{
        if(key==0)     //开关机键
                {
                        delay_ms(10);
                        if(key==0)
                        {
                                while(key==0);  //按键按下,等待松开
//---------------还没开机状态下,执行开机功能--------------
                                if(Run_Flag==0)  // 没有开机
                                {
                                        Run_Flag=1;  //开机变量改为1,表示已开机
                                        BEEP=0;      //打开蜂鸣器
                                        delay_ms(10);  //延时10ms
                                        BEEP=1;      //关闭蜂鸣器
                                        P40=0;       //打开LED总电源(对应三极管)
                                        P6=0X00;     //点亮全部LED
                                        delay_ms(200);  //延时200ms
                                        P6=0XFF;      //熄灭全部LED
                                }
//---------------已开机状态下,执行关机功能--------------                               
                                else
                                {
                                        Run_Flag==0;  //开机变量改为0,表示已关机
                                        BEEP=0;      //打开蜂鸣器
                                        delay_ms(10);  //延时10ms
                                        BEEP=1;      //关闭蜂鸣器
                                        P6=0XFF;      //熄灭全部LED
                                        Run_MODE=0;   //模式清0
                                }
                        }
                }
               
                if(key1==0)
                {
                        delay_ms(10);
                        if(key1==0)
                        {
                                while(key1==0);  //按键按下,等待松开
                                BEEP=0;      //打开蜂鸣器
                                delay_ms(10);  //延时10ms
                                BEEP=1;      //关闭蜂鸣器
                                Run_MODE++;
                                if(Run_MODE>8)
                                {
                                        Run_MODE=1;
                                }
                                P6=~(1<<(Run_MODE-1));
                        }
                               
                }
                       
}

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 00:34 , Processed in 0.128147 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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