TA的每日心情 | 开心 2024-4-21 09:04 |
---|
签到天数: 2 天 [LV.1]初来乍到
新手上路
- 积分
- 26
|
发表于 2024-4-21 09:25:49
|
显示全部楼层
冲哥STC32G单片机视频教程_笔记
第一集到第三集跳过。
第四集上:建立工程点亮第一颗LED灯上
第四集下:建立工程点亮第一颗LED灯下
硬件电路(略)
软件:
在桌面上新建文件夹0.DEMO,打开keil251,新建工程Demo保存到0.DEMO中,选择芯片类型为STC MCU,芯片型号为STC32G12K128,新建.c文件,命名为Demo.c,将Demo.c保存到0.DEMO中,把Demo.c文件添加到Demo工程中。
编写Demo.c文件,
#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;
}
在冲哥_教学视频配套附件-20230731中的任意一个例程中找到COMM文件夹,复制到所建的工程文件夹中,把COMM文件夹中的文件添加到工程中。
第五集:C语言运算符和进制数入门上
1.C语言 printf函数的实现
首先实现函数printf的打印输出,要实现printf打印输出,要在程序主函数中添加
if( DeviceState != DEVSTATE_CONFIGURED ) //判断USB是否连接成功
continue;
if( bUsbOutReady ) //判断有没有接收到数据
{
usb_OUT_done();
}
语句,程序为:
#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);
}
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;
}
结束。
第五集:C语言运算符和进制数入门下
2、首先自学一下Excel的应用,然后跟着老师学习一下2进制、10进制、16进制之间的转换。
3、单片机C语言中常用的运算符:
一、算术运算符
加(+)减(—)乘(*)除(/)
模(余)运算符(%):不允许出现浮点型,余数正负取决于被除数正负
自增(++i,–i;i++,i–)
二、位运算符
右移(>>)左移(<<)
按位与(&)
按位或(|)
按位异或(^)
取反(~)
三、赋值运算符
+= 加赋值(a += 3等价于 a = a + 3)
-= 减赋值
*= 乘赋值
/= 除赋值
%= 求余赋值
&= 按位与赋值
|= 按位或赋值
^= 按位异或赋值
<<= 左移位赋值(>>= 右移位赋值)
4.数据的基本类型
Data Types Bits Bytes Value Range
bit 1 0 to 1
aigned char 8 1 -128 -- +127
unsigned char 8 1 0 -- 255
enum 8/16 1or2 -128 -- +127 or -32768-- +32767
sigend short int 16 2 -32768 -- +32767
unsigned short int 16 2 0 -- 65535
signed int 16 2 -32768 -- +32767
unsigned int 16 2 0 -- 65535
signed lont int 32 4 -2147483648 -- +2147483647
unsigned long int 32 4 0 -- 4294967295
float 32 4 +-1.175497E-38 -- +-3.402823E
double 32 4 +-1.175497E-38 -- +-3.402823E
sbit 1 0 or 1
sfr 8 1 0 -- 255
sfr16 16 2 0 -- 65535
五、课堂总结
1.学会printf的格式化输出(后面会反复用到)
2.了解进制数
3.学会加减乘除等运算符
4.了解数据类型和数值范围
课后练习:自己练习一下printf的用法
第六集:LED闪烁和花式点灯上。
1、 基于Delay实现的LED闪烁。
2、 函数的应用。
3、 新建文件夹,使用模块化编程。
1, 基于Delay实现的LED闪烁。
首先用宏定义主时钟
#define MAIN_Fosc 24000000UL //定义一个IRC系统时钟
语法分析:
延时函数如下:
void delsy_ms(u16 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 6000;
while(--i);
}while(--ms);
}
2.函数的使用
在模块化编程里,函数使用分为如下三步:
1.函数定义
返回值 函数名称( 入口参数 )
{
函数要执行的功能
}
@返回值:没有返回值就是void
@函数名称:避开关键词,不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数“,”分开,空就写void
2.函数声明
返回值 函数名称( 入口参数 );
3.函数调用
函数名称( 入口参数 );
主函数如下:
void main()
{
sys_init(); //USB功能+IO口初始化
usb_init(); //usb库初始化
EA = 1;
while(1)
{
if(DeviceState != DEVSTATE_CONFIGURED)
continue;
if(bUsboutReady)
{
usb_OUT_done();
}
P40 = 0; //三极管引脚输出低电平
P60 = 0; //led4引脚输出低电平
delay_ms(500);
P60 = 1;
delay_ms(500);
}
}
在Demo.c中加入头文件
#include "COMM/stc.h"
#include "COMM/usb.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
3.新建文件,使用模块化编程
新建xxx.c和xxx.h文件,代表一个功能块。
xxx.h格式:
#ifndef __XXX_H
#define __XXX_H
调用头文件
函数声明...
#endif
xxx.c格式
#include “xxx.h”
函数定义
添加文件一定要记得引用路径和添加到工程里。
|
|