08第六集:LED闪烁第六集:LED闪烁和花式点灯上和花式点灯上.mp4
09第六集:LED闪烁和花式点灯下.mp4
【大文哥学习32位8051】20230704【冲哥视频】第六集的晶振时钟的学习困惑
2023/7/5 17:36
delay_ms(3000);
刷机的时候如果使用11.0592M的Fosc,3秒钟的延迟大概7秒钟。
刷机的时候如果使用24M的Fosc,3秒钟的延迟大概3.5秒钟。
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"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
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);
}
P40 = 0; //三极管引脚输出低电平
P60 = 0; //led0引脚输出低电平
delay_ms(500);
P60 = 1;
delay_ms(500);
//SOS_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;
}
晚上拍照效果图:
例程02:
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
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);
}
P40 = 0; //三极管引脚输出低电平
P67 = 0; //led7引脚输出低电平
P60 = 0; //led0引脚输出低电平
delay_ms(500);
P60 = 1;
delay_ms(500);
//SOS_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;
}
晚上拍照效果图:
例程03:
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
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);
}
P40 = 0; //三极管引脚输出低电平
P67 = 0; //led7引脚输出低电平
P60 = 0; //led0引脚输出低电平
delay_ms(500);
P67 = 1;
P60 = 1;
delay_ms(500);
//SOS_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;
}
晚上拍照效果图:
例程11:累加
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
void main() //程序开始运行的入口
{
int a = 0;
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);
do
{
printf("a的值为:%d\r\n", a);
a = a+1;
}while(a<20);
}
//P40 = 0; //三极管引脚输出低电平
//
//P67 = 0; //led7引脚输出低电平
//
//P60 = 0; //led0引脚输出低电平
//delay_ms(500);
//
//P67 = 1;
//P60 = 1;
//delay_ms(500);
//SOS_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;
}
串口打印:
[21:17:36.854]发送→1
[21:17:36.867]接收←a的值为:0
a的值为:1
a的值为:2
a的值为:3
a的值为:4
a的值为:5
a的值为:6
a的值为:7
a的值为:8
a的值为:9
a的值为:10
a的值为:11
a的值为:12
a的值为:13
a的值为:14
a的值为:15
a的值为:16
a的值为:17
a的值为:18
a的值为:19
[21:17:36.854]发送→31
[21:17:36.867]接收←61 B5 C4 D6 B5 CE AA A3 BA 30 0D 0A 61 B5 C4 D6
B5 CE AA A3 BA 31 0D 0A 61 B5 C4 D6 B5 CE AA A3
BA 32 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 33 0D 0A
61 B5 C4 D6 B5 CE AA A3 BA 34 0D 0A 61 B5 C4 D6
B5 CE AA A3 BA 35 0D 0A 61 B5 C4 D6 B5 CE AA A3
BA 36 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 37 0D 0A
61 B5 C4 D6 B5 CE AA A3 BA 38 0D 0A 61 B5 C4 D6
B5 CE AA A3 BA 39 0D 0A 61 B5 C4 D6 B5 CE AA A3
BA 31 30 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 31
0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 32 0D 0A 61
B5 C4 D6 B5 CE AA A3 BA 31 33 0D 0A 61 B5 C4 D6
B5 CE AA A3 BA 31 34 0D 0A 61 B5 C4 D6 B5 CE AA
A3 BA 31 35 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31
36 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 37 0D 0A
61 B5 C4 D6 B5 CE AA A3 BA 31 38 0D 0A 61 B5 C4
D6 B5 CE AA A3 BA 31 39 0D 0A
例程12:自加
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
void main() //程序开始运行的入口
{
//int a = 0;
int a = 10;
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);
do
{
printf("a的值为:%d\r\n", a);
//a = a+1;
a++;
}while(a<20);
}
//P40 = 0; //三极管引脚输出低电平
//
//P67 = 0; //led7引脚输出低电平
//
//P60 = 0; //led0引脚输出低电平
//delay_ms(500);
//
//P67 = 1;
//P60 = 1;
//delay_ms(500);
//SOS_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;
}
串口打印:
[21:19:57.629]发送→1
[21:19:57.635]接收←a的值为:10
a的值为:11
a的值为:12
a的值为:13
a的值为:14
a的值为:15
a的值为:16
a的值为:17
a的值为:18
a的值为:19
[21:19:57.629]发送→31
[21:19:57.635]接收←61 B5 C4 D6 B5 CE AA A3 BA 31 30 0D 0A 61 B5 C4
D6 B5 CE AA A3 BA 31 31 0D 0A 61 B5 C4 D6 B5 CE
AA A3 BA 31 32 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA
31 33 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 34 0D
0A 61 B5 C4 D6 B5 CE AA A3 BA 31 35 0D 0A 61 B5
C4 D6 B5 CE AA A3 BA 31 36 0D 0A 61 B5 C4 D6 B5
CE AA A3 BA 31 37 0D 0A 61 B5 C4 D6 B5 CE AA A3
BA 31 38 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 39
0D 0A
例程13:自加-自减
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
void main() //程序开始运行的入口
{
//int a = 0;
int a = 10;
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);
//do
//{
// printf("a的值为:%d\r\n", a);
// //a = a+1;
// a++;
//}while(a<20);
a = 10;
printf("a的值为:%d\r\n", a);
printf("a的值为:%d\r\n", --a);
printf("a的值为:%d\r\n", a);
printf("\r\n");
a = 10;
printf("a的值为:%d\r\n", a);
printf("a的值为:%d\r\n", a--);
printf("a的值为:%d\r\n", a);
printf("\r\n");
a = 20;
printf("a的值为:%d\r\n", a);
printf("a的值为:%d\r\n", ++a);
printf("a的值为:%d\r\n", a);
printf("\r\n");
a = 20;
printf("a的值为:%d\r\n", a);
printf("a的值为:%d\r\n", a++);
printf("a的值为:%d\r\n", a);
}
//P40 = 0; //三极管引脚输出低电平
//
//P67 = 0; //led7引脚输出低电平
//
//P60 = 0; //led0引脚输出低电平
//delay_ms(500);
//
//P67 = 1;
//P60 = 1;
//delay_ms(500);
//SOS_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;
}
串口打印:
[21:22:50.414]发送→1
[21:22:50.424]接收←a的值为:10
a的值为:9
a的值为:9
a的值为:10
a的值为:10
a的值为:9
a的值为:20
a的值为:21
a的值为:21
a的值为:20
a的值为:20
a的值为:21
[21:22:50.414]发送→31
[21:22:50.424]接收←61 B5 C4 D6 B5 CE AA A3 BA 31 30 0D 0A 61 B5 C4
D6 B5 CE AA A3 BA 39 0D 0A 61 B5 C4 D6 B5 CE AA
A3 BA 39 0D 0A 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA
31 30 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 31 30 0D
0A 61 B5 C4 D6 B5 CE AA A3 BA 39 0D 0A 0D 0A 61
B5 C4 D6 B5 CE AA A3 BA 32 30 0D 0A 61 B5 C4 D6
B5 CE AA A3 BA 32 31 0D 0A 61 B5 C4 D6 B5 CE AA
A3 BA 32 31 0D 0A 0D 0A 61 B5 C4 D6 B5 CE AA A3
BA 32 30 0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 32 30
0D 0A 61 B5 C4 D6 B5 CE AA A3 BA 32 31 0D 0A
例程21:【简单四则运算的】函数调用
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
int Add(int parm1, parm2)
{
return parm1 + parm2;
}
int Sub(int parm1, parm2)
{
return parm1 - parm2;
}
int Mul(int parm1, parm2)
{
return parm1 * parm2;
}
void main() //程序开始运行的入口
{
//int a = 0;
int a = 10;
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("计算Add(1, 2)结果为:%d\r\n", Add(1, 2));
printf("计算Sub(5, 2)结果为:%d\r\n", Sub(5, 2));
printf("计算Mul(5, 3)结果为:%d\r\n", Mul(5, 3));
}
//P40 = 0; //三极管引脚输出低电平
//
//P67 = 0; //led7引脚输出低电平
//
//P60 = 0; //led0引脚输出低电平
//delay_ms(500);
//
//P67 = 1;
//P60 = 1;
//delay_ms(500);
//SOS_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;
}
警告信息:
Rebuild target 'Target 1'
compiling Demo.c...
Demo.c(28): warning C35: 'Add': uses old-style declarator
Demo.c(33): warning C35: 'Sub': uses old-style declarator
Demo.c(38): warning C35: 'Mul': uses old-style declarator
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=122 code=7113
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 3 Warning(s).
Build Time Elapsed: 00:00:01
串口打印:
[19:59:34.243]发送→1
[19:59:34.256]接收←计算Add(1, 2)结果为:3
计算Sub(5, 2)结果为:3
计算Mul(5, 3)结果为:15
[19:59:34.243]发送→31
[19:59:34.256]接收←BC C6 CB E3 41 64 64 28 31 2C 20 32 29 BD E1 B9
FB CE AA A3 BA 33 0D 0A BC C6 CB E3 53 75 62 28
35 2C 20 32 29 BD E1 B9 FB CE AA A3 BA 33 0D 0A
BC C6 CB E3 4D 75 6C 28 35 2C 20 33 29 BD E1 B9
FB CE AA A3 BA 31 35 0D 0A
例程31:SOS信号的LED表达
【请注意,请配置开发板的晶振为24MHz。如果使用默认的11.0592MHz,间隔时间大概加倍!^_】
sos
国际摩尔斯电码救难信号
发信号的方法编辑 播报
有几种不同的发信号方法,不过采用何种方式取决于你的情形和你可用的材料。
通用远程表达方式:
求救方式一:发出声响,三短三长三短(. . . _ _ _ . . .)莫尔斯电码。
求救方式二:灯光,如手电,三短三长三短(开关灯)。
亮200、灭200、亮200、灭200、亮200、灭500、亮400、灭200、亮400、灭200、亮400、灭500、亮200、灭200、亮200、灭200、亮200、灭1300(MS)循环低电平LED亮。
#include "COMM/stc.h" //调用头文件
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L // 定义一个IRC系统时钟
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
{
u16 i;
do
{
i = MAIN_Fosc/6000;
while(--i);
}while(--ms);
}
void SOS_Led(void)
{
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
//delay_ms(200);
delay_ms(500);
P60 = 0; //点亮
delay_ms(400);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(400);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(400);
P60 = 1; //熄灭
delay_ms(500);
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
delay_ms(200);
P60 = 0; //点亮
delay_ms(200);
P60 = 1; //熄灭
delay_ms(1300);
//delay_ms(200);
//delay_ms(3000);
}
void main() //程序开始运行的入口
{
//int a = 0;
int a = 10;
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("计算Add(1, 2)结果为:%d\r\n", Add(1, 2));
//printf("计算Sub(5, 2)结果为:%d\r\n", Sub(5, 2));
//printf("计算Mul(5, 3)结果为:%d\r\n", Mul(5, 3));
}
P40 = 0; //三极管引脚输出低电平
SOS_Led();
//
//P67 = 0; //led7引脚输出低电平
//
//P60 = 0; //led0引脚输出低电平
//delay_ms(500);
//
//P67 = 1;
//P60 = 1;
//delay_ms(500);
}
}
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;
}
参考资料:
http://stcmcudata.com/
https://www.stcai.com/jxsp
演示视频
实验箱-STC32G12K128 教学视频
屠龙刀-STC32G12K128 教学视频