kaily 发表于 2025-9-30 10:10:54

3.8      I/O口实验 -- I/O口读取按键状态并点灯

3.8.1         实验要求                         可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态。

3.8.7         实验3:用USB-CDC读取按键状态在串口助手显示并点亮LED灯3.8.7.1         实验介绍                         Ü电脑AiCube-ISP软件中的,USB-CDC串口助手通知单片机读【P3.2/P3.3/P3.4/P3.5】的状态,                           送回USB-CDC串口助手显示,同时将相应的状态送到LED【P6.2/P6.3/P6.4/P6.5】显示(点亮/熄灭)                         Ü 通过USB-CDC接口在串口助手接收窗口能直观的查看到对应端口的状态,并且提示点亮/熄灭了对应的LED灯。

kaily 发表于 2025-9-30 10:28:10

3.8      I/O口实验 -- I/O口读取按键状态并点灯

3.8.1         实验要求                         可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态。

3.8.8         实验4:用USB-CDC读取按键状态,在ISP软件的 【开天斧/屠龙刀-LED-DIP64(6)】虚拟显示                         电脑AiCube-ISP软件中的,USB-CDC串口助手通知单片机读【P3.2/P3.3/P3.4/P3.5】的状态,                         送到AiCube-ISP 软件中的【调试仿真接口 | 开天斧/屠龙刀-LED-DIP64(6)】虚拟显示,                         同时将相应的状态送到LED【P6.2/P6.3/P6.4/P6.5】显示(点亮/熄灭)。
3.8.8.1      实验介绍                         通过USB-CDC接口在“开天斧/屠龙刀-LED-DIP64(6)”能直观的查看到对应端口的状态,并且点亮/熄灭了对应的LED灯。
3.8.8.2      通信协议                         AiCube-ISP软件界面的“调试仿真接口”à“接口协议及帮助”à“DIP64封装LED接口”                        

kaily 发表于 2025-9-30 10:52:05

3.8      I/O口实验 -- I/O口读取按键状态并点灯

3.8.1         实验要求                         可以通过正确设置I/O口模式来读取实验箱上按键的电平,然后根据对应按键的电平来设置LED灯的点亮/熄灭状态。

3.8.9         实验5:I/O口行列按键扫描,蜂鸣器发声实战3.8.9.1         实验介绍                         用行列扫描方法扫描2行4列8按键的矩阵式键盘,按键按下时驱动蜂鸣器发声,                         同时通过USB-CDC将按下按键的键码发到【CDC/HID-串口助手】显示。
                         Ü按键扫描说明:                           如1个按键要判断为正常按下,而不是抖动,                           假定需要该按键保持按下持续保持为低状态时间是50ms ~ 200ms;                           假定1个主循环的运行时间大概 10ms ~ 30ms                           则如发现某个按键按下,需要连续 6次主循环都能读到该按键按下                           ===如发现多个按键按下,则归0,重新开始                           调整按键的灵敏度只需要修改,                           ===【判断按键已按下的时间,即读到为低经历了多少次主循环的次数】
3.8.9.2          原理图
                        
                        



kaily 发表于 2025-9-30 11:31:21

3.9         传统外部中断实验 -- INT0,INT1,INT2,INT3

3.9.1             中断实验1(外部中断INT0/P3.2,INT1/P3.3控制点灯并USB仿真)                                 1、   了解传统的外部中断INT0/P3.2,INT1/P3.3的使用                                 2、   了解STC32G12K128对传统外部中断INT0/P3.2,INT1/P3.3功能的扩展                                 3、   学习使用USB进行仿真                                 4、   学习使用在中断中设置标志位,在主循环中查询并处理中断事件的处理方式
3.9.1.1            实验介绍                                 1,边缘触发中断,INT0/P3.2 外部中断实验演示程序:                                                P3.2设置为高阻输入                                        或   P3.2设置为准双向口                                                INT0/P3.2设置为边缘触发中断。                                 【实验步骤】:                                 Ø   先点击Run(运行)按钮,按下P3.2按键,保持不松开(为了验证下一步的实验),                                        进INT0中断后,读到INT0/P3.2口是 低,下降沿,点亮 LED6.7,退出中断服务程序。                                 Ø   点击Run(运行)按钮,松开P3.2按键                                        进INT0中断后,读到INT0/P3.2口是 高,上升沿,点亮 LED6.0,退出中断服务程序。                                 Ø   利用仿真,可以设置运行到断点处,捕捉当前程序运行到哪,是下降沿,还是上升沿
                                 2,下降沿触发中断,INT1/P3.3 外部中断实验演示程序:                                                P3.3设置为高阻输入                                        或   P3.3设置为准双向口                                                INT1/P3.3设置为下降沿触发中断。                                 【实验步骤】:                                 Ø   先点击Run(运行)按钮,按一下P3.3按键                                        进INT1中断后,点亮 LED6.4,退出中断服务程序。                                 Ø   利用仿真,可以设置运行到断点处,捕捉当前程序运行到哪。
3.9.1.2             原理图                                 Ø外部中断【INT0/P3.2,INT1/P3.3】输入原理图@STC32G12K128实验箱                                       将设置为:高阻输入                                                                                 或   准双向口                                                                                 或   开漏模式                                          设置为边缘触发中断。                                    
                                 Ø外部中断实验辅助显示LED灯原理图                                                                         I/O口P4.0控制PNP三极管的通断,控制这8个灯的整体供电。

kaily 发表于 2025-9-30 11:48:27

3.9         传统外部中断实验 -- INT0,INT1,INT2,INT3


3.9.2             中断实验2(单片机主动触发外部中断INT2/P3.6,INT3/P3.7控制点灯并USB仿真)                                    1、   了解STC32G12K128新增的外部中断INT2/P3.6,INT3/P3.7功能                                    2、   学习使用USB进行仿真                                    3、   学习使用在中断中设置标志位,在主循环中查询并处理中断事件的处理方式
3.9.2.1               实验介绍                                    1,下降沿触发中断,单片机内部主动触发INT2/P3.6口,产生中断实验演示程序:                                              P3.6设置为高阻输入,打开内部上拉电阻                                    或   P3.6设置为准双向口,打开内部上拉电阻                                              INT2/P3.6固定为下降沿触发中断                                    2,下降沿触发中断,单片机内部主动触发INT3/P3.7口,产生中断实验演示程序:                                              P3.7设置为高阻输入,打开内部上拉电阻                                    或   P3.7设置为准双向口,打开内部上拉电阻                                              INT3/P3.7固定为下降沿触发中断                                    【实验步骤】:                                       Ø 先点击Run(运行)按钮,运行到单片机内部主动触发INT2/P3.6时,会进入INT2中断,点亮 LED6.0灯,退出中断服务程序,继续运行。                                       Ø 运行到单片机内部主动触发INT3/P3.7口,会进入INT3中断,点亮LED6.7灯,退出中断服务程序。                                          利用仿真,可以设置运行到断点处,捕捉当前程序运行到哪。
3.9.2.2                  原理图                                    Ø外部中断实验辅助显示LED灯原理图:                                                                                                                     I/O口P4.0控制PNP三极管的通断,控制这8个灯的整体供电。
                                    Ø外部中断【INT2/P3.6,INT3/P3.7】实验原理图@STC32G12K128实验箱                                          在本实验中,【INT2/P3.6,INT3/P3.7】没有设计外部按键输入,                                          而采用内部将【INT2/P3.6,INT3/P3.7】拉低产生下降沿的方式产生中断的方法。                                       【INT2/P3.6,INT3/P3.7】工作在准双向口/开漏模式时,输出是独立的,输入也是独立的,                                       【INT2/P3.6,INT3/P3.7】对外输出低后,【INT2/P3.6,INT3/P3.7】读到的外部状态就是低;                                          输出高,在打开内部上拉电阻或有上拉电阻的状态下,读到的就是高,除非外界有强行拉低的电路。                                                                              

kaily 发表于 2025-9-30 12:04:15

3.10      定时器实验 -- 定时器0/1,16位定时器

3.10.1          定时器0/1,16位定时器实验(定时器中断点灯并通过USB-CDC端口输出信息)                                        1、   了解传统的定时器0,定时器1的工作原理及使用                                        2、   了解STC32G12K128对定时器0,定时器1功能的扩展(增加16位自动重载模式)                                        3、   学习使用USB-CDC和电脑进行数据传输                                        4、   学习使用在中断中设置标志位,在主循环中查询并处理中断事件的处理方式
3.10.1.1          实验介绍                                        定时器0(Timer0)定时2s产生中断,LED60灯闪烁,CDC窗口显示“Timer0!”                                        定时器1(Timer1)定时500ms产生中断,LED67灯闪烁,CDC窗口显示“Timer1!”                                        【实验现象】:                                        Ü   AiCube-ISP软件的CDC窗口每显示4次“Timer1”,显示1次“Timer0”                                        Ü   实验箱,LED67亮灭各2次,LED60亮1次

3.10.1.2         原理图                           Ü定时器0模式0结构图:此模式下定时器/计数器0作为可自动重装载的16位计数器。如下图所示:                                                        Ü定时器1模式0结构图:此模式下定时器/计数器1作为可自动重装载的16位计数器。如下图所示:                                                       ÜLED指示灯原理图                                 P6口都有单独的指示灯                                                            I/O口P4.0控制PNP三极管的通断,控制这8个灯的整体供电。

kaily 发表于 2025-9-30 14:10:00

3.10      定时器实验 -- 定时器0/1,16位定时器


3.10.2          定时器0/1,INT0/INT1,中断组合应用实验,演示程序

                           学习使用在多个不同的中断中设置标志位,在主循环中查询并处理中断事件的处理方式






kaily 发表于 2025-9-30 14:27:38

3.11         RTC实验(拓展学习之使用RTC功能设定闹钟)

3.11.1         实验介绍                              1、学习使用STC32G12K128的RTC实时时钟功能                              2、学习使用STC32G12K128的RTC的闹钟功能                              3、使用拓展中断号工具解除Keil中32个中断号的限制                              4、熟练使用USB-CDC功能                              5、熟练使用AiCube-ISP软件
                              程序运行约5s后,AiCube-ISP软件的CDC窗口显示“RTCStart”,RTC闹钟10s产生中断,打印数据在CDC窗口显示“Alarm!”                              CDC串口发送任意数据,读取RTC的秒值,并在CDC窗口显示                               观察到实验现象:                                       Ü程序运行5s后,AiCube-ISP软件CDC的接收缓冲区窗口显示“RTC Start”,再10s后,窗口显示“Alarm!”                                       Ü在USB-CDC串口发送任意数据,在CDC的接收缓冲区窗口显示当前的RTC秒值
3.11.2         原理图                              
3.11.3         准备工作--添加头文件、Keil中断拓展插件、库函数                              1、添加常用头文件ai_usb.h                                     #include "ai_usb.h"                     //使用usb所需要包含的头文件。                                     这个头文件在使用AiCube-ISP软件添加型号和头文件到Keil中时就已经一并被添加到Keil中了。
                              2、添加Keil中断拓展插件                                     Keil C51/C251编译器只支持31以内的中断号(0~31),超过31编译会报错。                                     RTC的中断向量RTC_VECTOR为36,这就需要Keil中断号拓展工具,可将中断号拓展到254。                                     这部分可以到STCAI的官网:https://www.stcai.com/gjrj的软件工具è工具软件中“Keil中断拓展插件”进行下载。                                    
                                     下载完成后,打开压缩包“拓展Keil的C代码中断号.zip”,找到“拓展Keil的C代码中断号.exe”,这是绿色免安装软件。                                    
                                     直接双击“拓展Keil的C代码中断号.exe”,出现如下界面,选择安装路径,按照默认直接安装到C:\Keil_V5目录下,点击“确定”                                    
                                     如下图,点击“确定”,Keil的C代码中断号到254                                    
                              3、添加usb_cdc库函数文件                                     Ü   因为要使用到USB功能,必须在项目中添加USB库函数。这部分可以到STCAI的官网:https://www.stcai.com/khs的USB库文件中进行下载                                                                                    下载完成后,打开压缩包“STC_USB_LIBRARY.zip”,                                       在’库文件\查询模式STC-CDC库文件’中,复制出来stc_usb_cdc_32g.LIB                                       
                                     Ü将库函数“stc_usb_cdc_32g.LIB”复制到创建项目所在的文件夹中                                          
                                     Ü将库函数stc_usb_cdc_32g.LIB添加进入此项目中                                       在Keil中,双击Source Group,在弹出的Add Files to Group 'SourceGroup 1窗口中,                                       将库函数stc_usb_cdc_32g.LIB添加进入此工程项目,就可以使用USB-CDC功能。                                       
                                       这样,Keil界面变化如下图:                                                                                      【注意】:USB-CDC串口则更类似传统串口的形式,使用COM口进行通讯,                                        但是只有Win10及其以上才默认携带USB-CDC的驱动,较低的系统版本可能要手动安装驱动才能使用。

kaily 发表于 2025-9-30 15:28:33

3.12         大型综合实战 -- 课程设计:时钟+数码管+矩阵按键+蜂鸣器发声

3.12.1            实验介绍
                                    1、熟悉矩阵式按键扫描方法                                    2、了解使用P6、P7口控制LED数码管                                    3、软件模拟RTC,实现RTC的时、分、秒控制和设置                                    4、I/O控制有源蜂鸣器发声                                    5、扩展部分:如何实现长按键                                    6、熟悉STC32G12K128实验箱布局及电路图                                    7、熟练使用AiCube-ISP系统软件                                    8、熟悉如何管理多文件项目
3.12.1.1         按键扫描说明
                                 如按键要判断为正常按下,而不是抖动,需要该按键保持按下持续保持为低状态时间是20ms ~ 50ms;                                 主循环中有个1ms的时间基准,将按键扫描程序作为1ms事件,按键状态维持20ms不变,即可对按键去抖动,得到稳定的键码。
3.12.1.2         实验现象和操作说明
                                 将本项目的HEX文件下载到STC32G12K128的实验箱后                                 1、在LED数码管上面高6位会动态显示当前的RTC时间
                                 2、按下两行4列的8个矩阵按键后:                                        Ø在LED数码管的最低位会显示当前的按键键码                                        Ø同时按键会发出按键音                                           (特别注意:STC32G12K128实验箱上的蜂鸣器是有源蜂鸣器)                                       
                                 3、矩阵按键中的按键0,是RTC模式设置键                                        Ø上电后RTC为正常工作模式,此时数码管动态显示RTC时间                                        Ø按一次按键0,RTC会切换为小时设置模式,此时RTC的小时值会0.5秒闪烁一次                                        Ø再按一次按键0,RTC会切换为分钟设置模式,此时RTC的分钟值会0.5秒闪烁一次                                        Ø再按一次按键0,RTC会切换为秒钟设置模式,此时RTC的秒钟值会0.5秒闪烁一次                                        Ø在按一次按键0,恢复为RTC正常工作模式
                                 4、矩阵按键中的按键4和5分别是上调键和下调键                                        Ø只有在RTC的时/分/秒设置模式时,上调键和下调键才有效
                                 5、时钟设置模式时,长按按键4和5,可实现快速设置功能
3.12.1.3         Keil环境下多文件项目管理说明
                                 当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性。                                        Ø比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。                                        Ø一般建议是一个模块对应一个.c程序文件和一个.h头文件                                        Ø模块的初始化函数以及相关的数据处理函数都在.c文件中实现                                        Ø与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量                                        Ø如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。                                        Ø特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误                                        Ø为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含:                                                #ifndef XXXX                                                #define XXXX                                                ...                                                #endif
3.12.2             原理图   
                                     https://www.stcaimcu.com/data/attachment/forum/202509/16/153135ijqr8jyyd5qrvdy6.jpg    https://www.stcaimcu.com/data/attachment/forum/202509/16/153147dh4sezf91p5mxawx.jpg                                     https://www.stcaimcu.com/data/attachment/forum/202509/16/153207srrzorbnr7hdh3rp.jpg    https://www.stcaimcu.com/data/attachment/forum/202509/16/153158oajmaqqlrmmm77mw.jpg

kaily 发表于 2025-9-30 15:48:53

3.13         串口实验 -- 串口通讯(硬件UART1与电脑收发通讯)

3.13.1            实验介绍
                                    1、了解串口1/UART1通讯原理                                    2、熟悉STC32G12K128实验箱及其原理图                                    3、熟练使用AiCube-ISP软件及其各种工具                                    4、了解USB Link1D工具的原理及使用                                    5、熟悉如何管理多文件项目
3.13.1.1         认识STC32G12K128实验箱
                                    STC32G12K128的实验箱正面图:                                                                                                      J6:   串口1接口。本实验需要用专门定制的USB转串口/TTL(连接USB Link1D工具) - TypeC(连接实验箱J6)接口线相连。(详见J6原理图)
3.13.1.2         专门定制的USB转串口/TTL - TypeC接口线
                                     https://www.stcaimcu.com/data/attachment/forum/202509/16/162557tafqy1vjmmgcdcjy.jpg

3.13.1.3         USB Link1D工具
                                     https://www.stcaimcu.com/data/attachment/forum/202509/16/162608cewjwjssb4sytbs9.jpg

3.13.1.4            STC32G12K128实验箱由TTL - TypeC接口线通过USB Link1D工具与电脑连接图
                                    

3.13.1.5         Keil环境下多文件项目管理说明
                                    当项目的功能比较复杂时,就需要在Keil中建立多文件项目,以方便分工合作、代码复用、模块化管理、增强可读性和可维护性‌。                                          Ø   比较好的建议是将项目功能模块化,不同模块的实现代码放在不同的.c文件中。                                          Ø   一般建议是一个模块对应一个.c程序文件和一个.h头文件                                          Ø   模块的初始化函数以及相关的数据处理函数都在.c文件中实现                                          Ø   与模块相关的全局变量也必须在.c文件中进行定义,一定不能在.h文件中定义变量                                          Ø   如果有其他模块需要使用本模块定义的变量或函数,则这些函数和变量都需要在.h文件中声明。                                          Ø   特别提醒:在.h文件中声明外部变量必须使用extern关键字,否则就变成变量定义了,这样会出现变量重复定义的错误                                          Ø   为防止头文件被多次包含而产生错误或者警告,在头文件中使用类似如下的条件编译组合语句,可避免在同一个.c文件中对同一个.h头文件进行多次包含:                                                #ifndef XXXX                                                #define XXXX                                                ...                                                #endif
3.13.2               原理图
                                     https://www.stcaimcu.com/data/attachment/forum/202509/16/162628h664m986f9w77p47.jpg



页: 1 [2] 3
查看完整版本: STC32G-实验指导书:实验内容与源代码