跟着冲哥学习STC32G单片机
学习第一集,了解单片机的相关知识,学习了什么是单片机,他能做什么?新手常见解答和学习建议.今天学习第二集 今天学习第二集,了解了实验箱的基本功能,基本模块,外围电路与AI8051U实验箱不一样,我学习了AI8051U,感觉基础要先跟着冲哥学习STC32单片机更能够容易入门,并且学习内容要全面一些 实验箱的模块如图 今天学习了第三集,开发环境的搭建,主要有以下几个方面的内容,由于前面已经学习了AI8051U单片机,对于KEILC251搭建已经比较熟悉了,很快就完成了任务 #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
完成了点灯实验 学习了第五集C语言基础,相当于再次温习了相关知识 今天学习了第六集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);
} 今天学习了第七集,按键点灯实验,#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