jdgcxyprm 发表于 2025-5-27 06:05:13

跟着冲哥学习STC32G单片机

学习第一集,了解单片机的相关知识,学习了什么是单片机,他能做什么?新手常见解答和学习建议.


jdgcxyprm 发表于 2025-5-27 06:06:31

今天学习第二集

jdgcxyprm 发表于 2025-5-27 06:10:54

今天学习第二集,了解了实验箱的基本功能,基本模块,外围电路与AI8051U实验箱不一样,我学习了AI8051U,感觉基础要先跟着冲哥学习STC32单片机更能够容易入门,并且学习内容要全面一些

jdgcxyprm 发表于 2025-5-27 06:12:32

实验箱的模块如图

jdgcxyprm 发表于 2025-5-27 06:16:06

今天学习了第三集,开发环境的搭建,主要有以下几个方面的内容,由于前面已经学习了AI8051U单片机,对于KEILC251搭建已经比较熟悉了,很快就完成了任务

jdgcxyprm 发表于 2025-5-27 06:17:10

#include "COMM/stc.h"                //调用头文件
#include "COMM/usb.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
       
//sbit P40 = P4^0;        //三极管控制引脚
//sbit P60 = P6^0;        //LED控制引脚
//sbit P61 = P6^1;        //LED控制引脚

void sys_init();        //函数声明

void main()                                        //程序开始运行的入口
{
        sys_init();                                //USB功能+IO口初始化
        usb_init();                                //usb库初始化
        EA = 1;                                        //CPU开放中断,打开总中断。
       
        while(1)                //死循环
        {
                P40 = 0;        //三极管引脚输出低电平
                P60 = 0;        //led4引脚输出低电平
                P61 = 0;        //led5引脚输出低电平
        }
}


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

        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
       
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //设置USB使用的时钟源
    IRC48MCR = 0x80;    //使能内部48M高速IRC
    while (!(IRC48MCR & 0x01));//等待时钟稳定

    USBCLK = 0x00;        //使用CDC功能需要使用这两行,HID功能禁用这两行。
    USBCON = 0x90;
}

jdgcxyprm 发表于 2025-5-27 06:17:41

jdgcxyprm 发表于 2025-5-27 06:17


完成了点灯实验

jdgcxyprm 发表于 2025-5-27 06:21:41

学习了第五集C语言基础,相当于再次温习了相关知识

jdgcxyprm 发表于 2025-5-27 06:27:45

今天学习了第六集LED闪烁和花式点灯#include "../../comm/STC32G.h"

#include "stdio.h"
#include "intrins.h"

typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

#define MAIN_Fosc      24000000UL



u8 ledIndex;
u8 code ledNum[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


voiddelay_ms(u8 ms);




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

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
    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 = 0x00;   P6M0 = 0xff;   //设置为推挽输出
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    P40 = 0;                //LED Power On

    while(1)
    {
      P6 = ~ledNum;        //输出低驱动
      ledIndex++;
      if(ledIndex > 7)
      {
            ledIndex = 0;
      }
      delay_ms(250);
      delay_ms(250);
    }
}


voiddelay_ms(u8 ms)
{
   u16 i;
   do{
          i = MAIN_Fosc / 6000;
          while(--i);
   }while(--ms);
}

jdgcxyprm 发表于 2025-5-27 06:34:03

今天学习了第七集,按键点灯实验,#include "COMM/stc.h"                //调用头文件
#include "COMM/usb.h"

#define KEY1 P32                //定义一个按键 引脚选择P32
#define KEY2 P33                //定义一个按键 引脚选择P33
#define MAIN_Fosc 24000000UL        //定义主时钟

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
       
sbit P40 = P4^0;        //三极管控制引脚
sbit P60 = P6^0;        //LED控制引脚
sbit P61 = P6^1;        //LED控制引脚

void sys_init();        //函数声明
void delay_ms(u16 ms);        //unsigned int

void main()                                        //程序开始运行的入口
{
        u8 LED_Data = 0XFE;
       
        u8 num=0;
        u8 LED_DataTab = { 0XFE,0XFD, 0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};
       
        sys_init();                                //USB功能+IO口初始化
        usb_init();                                //usb库初始化
        EA = 1;                                        //CPU开放中断,打开总中断。
       
        P6 = LED_Data;
        while(1)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();

                }
                P40 = 0;        //三极管引脚输出低电平


------------------------------------------------按下点亮,松开熄灭        ------------------------------------------------       
                if( KEY1 == 0)        //判断按键有没有按下
                {
                        delay_ms(10);
                        if( KEY1 == 0 )
                        {
                                printf("按键P32已经按下\r\n");
                                P60 = 0;        //LED0点亮
                        }
                }
                else                //如果没有按下
                {
                        P60 = 1;        //LED0点亮
                }
               
------------------------------------------------按下熄灭,松开点亮        ------------------------------------------------               
                if( KEY2 == 0)        //判断按键有没有按下
                {
                        delay_ms(10);
                        if( KEY2 == 0 )
                        {
                                printf("按键P33已经按下\r\n");
                                P67 = 1;        //LED熄灭
                        }
                }
                else
                {
                        P67 = 0;        //LED熄灭
                }               


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

        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
       
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //设置USB使用的时钟源
    IRC48MCR = 0x80;    //使能内部48M高速IRC
    while (!(IRC48MCR & 0x01));//等待时钟稳定

    USBCLK = 0x00;        //使用CDC功能需要使用这两行,HID功能禁用这两行。
    USBCON = 0x90;
}


void delay_ms(u16 ms)        //unsigned int
{
        u16 i;
        do
        {
                i = MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}
页: [1] 2
查看完整版本: 跟着冲哥学习STC32G单片机