wb4916 发表于 2023-7-4 19:47:49

【大文哥学习32位8051】20230704【冲哥视频】第五集的学习困惑(虚拟串口 & 测试版本)

20230704测试STC32G实验箱9.6(STC32G12K128)开发板的虚拟串口(C语言深入了解)
06第五集:C语言运算符和进制数入门上.mp4
07第五集:C语言运算符和进制数入门下.mp4


【大文哥学习32位8051】20230704【冲哥视频】第五集的学习困惑
2023/7/4 19:00


下次 在【冲哥】录视频的时候 。建议在 WIN10 WIN11正式版本下录制。老用 测试版本。比尔·盖茨 看见了会有意见的!





ASC码表:







0、
https://www.stcai.com/syx
实验箱

STC32G实验箱9.6
主控芯片使用STC32G12K128,可以做示波器、波形发生器、TFT彩屏显示、OLED 12864、LCD 12864

代码下载
使用说明 STC32G12K128实验箱-V9.6使用说明书.pdf
原理图


STC32G12K128实验箱-V9.6使用说明书.pdf





例程01:




#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)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        //printf("%03.3f\r\n",1.12);
                        //printf("%u \r\n",1<<3);
                       
                        printf("Hello World!");
                }
                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;
}


串口打印:
发送→1
接收←Hello World!

发送→31
接收←48 65 6C 6C 6F 20 57 6F 72 6C 64 21







例程02:





#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)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        //printf("%03.3f\r\n",1.12);
                        //printf("%u \r\n",1<<3);
                       
                        //printf("Hello World!");
                        printf("当前温度:%.2f\r\n", 11.2);
                }
                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;
}



串口打印:
发送→1
接收←当前温度:11.20

发送→31
接收←B5 B1 C7 B0 CE C2 B6 C8 A3 BA 31 31 2E 32 30 0D
                  0A







例程03:




#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)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        //printf("%03.3f\r\n",1.12);
                        //printf("%u \r\n",1<<3);
                       
                        //printf("Hello World!");
                        //printf("当前温度:%.2f\r\n", 11.2);
                        printf("当前温度:%.2f, 当前湿度:%.2f\r\n", 11.2, 55.2);
                }
                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;
}




串口打印:
发送→1
接收←当前温度:11.20, 当前湿度:55.20

发送→31
接收←B5 B1 C7 B0 CE C2 B6 C8 A3 BA 31 31 2E 32 30 2C
                  20 B5 B1 C7 B0 CA AA B6 C8 A3 BA 35 35 2E 32 30
                  0D 0A







例程04:




#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)                //死循环
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        //printf("%03.3f\r\n",1.12);
                        //printf("%u \r\n",1<<3);
                       
                        //printf("Hello World!");
                        //printf("当前温度:%.2f\r\n", 11.2);
                        //printf("当前温度:%.2f, 当前湿度:%.2f\r\n", 11.2, 55.2);
                       
                        printf("%u\r\n", 53);
                }
                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;
}




串口打印:
发送→1
接收←53


发送→31
接收←35 33 0D 0A









例程05:







例程06:







例程07:







例程08:








参考资料:
http://stcmcudata.com/
https://www.stcai.com/jxsp
演示视频
实验箱-STC32G12K128 教学视频
屠龙刀-STC32G12K128 教学视频





页: [1]
查看完整版本: 【大文哥学习32位8051】20230704【冲哥视频】第五集的学习困惑(虚拟串口 & 测试版本)