PIC单片机-Mplab的使用与PIC单片机介绍

内容包括Mplab IDE与Mplab X IDE的使用,触摸功能实践,PIC单片机C与汇编混合编程,PIC单片机介绍等。紫色文字是超链接,点击自动跳转至相关博文。持续更新,原创不易!

目录:

一、Mplab IDE的使用

1、Mplab IDE建立工程

1)简述

2)建立工程

3)调试

(1)源程序编译   (2)模拟仿真设置   (3)端口设置   (4)添加变量到Watch

(5)查看ROM、RAM使用情况   (6)查看软仿真时间

2、Mplab IDE硬件仿真

1)简述   2)接入PICkit3出现Target Device ID (00000000) does not match expected Device ID (00002460)

3)首次使用PICkit3出现PK3Err0040   4)接入PICkit3烧录时要设置电源   5)Maplab的输出窗口看不见

二、Mplab X IDE的使用

1、简述

2、PICkit3驱动安装

3、XC8编译器

1)microchip官网下载编译器   2)编译器的修改

4、项目的建立

5、代码配置MCC

三、实践(PIC单片机-PICC介绍)

1、端口控制

2、实现触摸功能

3、使用PIC公司的触摸库

4、触摸IC芯片

四、C与汇编混合编程

五、PIC单片机介绍

1、电源管脚分布

2、中文资料

----------------------------------------------------------------------------------------------------------------

一、Mplab IDE的使用

1、Mplab IDE建立工程

1)简述

当前Maplab IDE与Hi-Tech均安装在D盘,软件搜索我的百度网盘

------------------------------

2)建立工程

通过工程向导是最为简洁的方法,如下图所示。

下面按提示做就行了。

------------------------------

3)调试

(1)源程序编译

----------------

(2)模拟仿真设置

注:软仿真前可设置断点

Debuggen/Setting…下面

接上图4处单步执行程序,状态如下。

----------------

(3)端口设置

Debugger-Stimulus,选择Asynch,增加PIN。比如PB0、PB1,在Action选择Hign或Low,务必点3处Fire才能生效。

----------------

(4)添加变量到Watch

通过端口的变化查看相关变量,变量必须要在程序中使用,才能添加到Watch。

查看位变量的状态:

Watch中的内容不能实时更新:

----------------

(5)查看ROM、RAM使用情况

View/Memory Usage Gauge

PIC单片机RAM的位定义:

通过其头文件,仿写。

u8   x  @  0x1C;

bit  JieJinFlag    @ ((unsigned)&x*8)+0;

bit  UnProFlag  @ ((unsigned)&x*8)+1;

bit  current       @ ((unsigned)&x*8)+2;

//bit JieJinFlag=0;

//bit UnProFlag;

----------------

(6)查看软仿真时间

Debuggen/Stopwatch

-----------------------------------------------------------

2、Mplab IDE硬件仿真

1)简述

看到PIC单片机就感到亲切,今天开始对PIC16F1936编程仿真,仿真器PICkit3。

PIC18FXXXX:

 ------------------------------

2)接入PICkit3出现Target Device ID (00000000) does not match expected Device ID (00002460)

这是仿真头与线路板连接不正确。

------------------------------

3)首次使用PICkit3出现PK3Err0040

PK3Err0040: The target device is not ready for debugging.Please check your configuration bit settings and program the device before proceeding.
解决办法:在这里勾 选:Debugger>Settings>Program Memory>Automatically 的 “Program after successful build”项即可在每次成功后自动下载代码到Flash并进入调试就绪模式。

------------------------------

4)接入PICkit3烧录时要设置电源

PK3Err0045: You must connect to a target device to use PICkit3.

Programmer>Settings>Power中设置

------------------------------

5)Maplab的输出窗口看不见

(1)在设置这个功能的时候,准备把output窗口移到下边缘,没想到移动过头,移动到电脑桌面的最下方(移到下方看不到的位置去了),然后output窗口就不见了,调不出来,在view里面勾选了output或者取消,编译文件,甚至重新启动电脑,output窗口都不出现了!

右击任务栏->解除锁定任务栏->拖动任务栏到右边就可以看到被隐藏的窗口了。

----------------

(2)隐藏在整个窗口的下方

右侧是有进度条的。

将output移上去,右侧就没有进度条了。

----------------------------------------------------------------------------------------------------------------

二、Mplab X IDE的使用

1、简述

英文官网:www.microchip.com,找到“Tools and SoftWare”,如下图所示。

Microchihp工程师社区:http://microchip.com.cn/newcommunity/可下载中文资料,论坛提问。

-----------------------------------------------------------

2、PICkit3驱动安装

接入PICkit3提示找不到工具,为驱动没有安装。打开如图1 MPLAB drive,如下图设置,点"Apply Changes"即可。

-----------------------------------------------------------

3、XC8编译器

1)microchip官网下载编译器

XC8支持所有8位单片机,XC16支持所有16位单片机。

-------------------------------

2)编译器的修改

-----------------------------------------------------------

4、项目的建立

-----------------------------------------------------------

​​​​​​​5、代码配置MCC

开发环境:MPLAB X: v6.05,MCC: 5.2.2

1)加载MCC

​​​​​​​

-------------------------------

2)载入MCC

出现上图红色警告,不用管它,继续等待,一两分钟后出现下图的界面。

如上图,PIC18F4431不支持MCC。

----------------------------------------------------------------------------------------------------------------

三、实践(PIC单片机-PICC介绍)

1、端口控制

完成三件事:1、仿真部分全部正常;2、配置字设置无误;3、内部晶振正常,端口操作正常

#include "pic.h"

void delay_long(unsigned int uiDelayLong);

void main()

{

    OSCCON = 0xeb;   //禁止4X PLL,内部4MHz时钟源

    TRISBbits.TRISB3 = 0;  //设置RB5端口为输出

    TRISCbits.TRISC4 = 0;

    ANSELBbits.ANSB3 = 0;  //RB5设置为数字端口

    LATBbits.LATB3 = 0;    //RB3输出低电平

    LATCbits.LATC4 = 0; 

    WPUBbits.WPUB5 = 1;

    while (1)

    {

        LATBbits.LATB3 = 1;

        LATCbits.LATC4 = 0;

        delay_long(100);

        LATBbits.LATB3 = 0;

        LATCbits.LATC4 = 1;

        delay_long(100);

    } 

}


void delay_long(unsigned int uiDelayLong)
{
   unsigned int i;
   unsigned int j;


   for(i=0;i<</font>uiDelayLong;i++)  //
   {
      for(j=0;j<500;j++)  //内嵌循环的空指令数量
      {
          ;
      }
   }
}

/

-----------------------------------------------------------

2、实现触摸功能

#include "pic.h"

__CONFIG(0x09E4);
__CONFIG(0x0033);

#define BackLight LATCbits.LATC4
#define Light1 LATAbits.LATA7
#define Light2 LATBbits.LATB3
#define Light3 LATAbits.LATA4
#define Light4 LATBbits.LATB4
#define L2_C   LATCbits.LATC0
#define L1_C   LATCbits.LATC1
#define C_R    LATCbits.LATC2
#define C_L    LATCbits.LATC3
#define Cap_H_L LATAbits.LATA6
#define const_key_time2 8

#define const_timr0_value 100
#define trip_value 150   //(未触摸值-触摸值)*80%
#define Cap_Avg_value 1500

void key_service(void);
void delay_long(unsigned int uiDelayLong);
static void interrupt SystemISR(void);
void System_Init(void);
void Cap_Init(void);
void SetNextSensor(void);
void RestartTimers(void);
void Cap_ISR(void);

unsigned char Index = 1;  // 触摸键通道计数
unsigned char AvgIndex = 0;  //更新频率计数
unsigned int Cap_Value = 0;  //当前按键频率值
const unsigned int trip[4]={trip_value,trip_value,trip_value,trip_value}; //频率差值
unsigned int Cap_Avg[4]={Cap_Avg_value,Cap_Avg_value,Cap_Avg_value,Cap_Avg_value}; //频率平均值

unsigned int uiKeyTimeCnt1=0;
unsigned int uiKeyTimeCnt2=0;
unsigned int uiKeyTimeCnt3=0;
unsigned int uiKeyTimeCnt4=0;

unsigned char ucKeyLock1=0;
unsigned char ucKeyLock2=0;
unsigned char ucKeyLock3=0;
unsigned char ucKeyLock4=0;

unsigned char ucKey1TouchCnt=0;
unsigned char ucKey2TouchCnt=0;
unsigned char ucKey3TouchCnt=0;
unsigned char ucKey4TouchCnt=0;

unsigned char ucKeySec=0;


void main()
{
 System_Init();
 delay_long(10);
 Cap_Init();
 GIE = 1;
 while (1)
    {
  key_service();
    }
}


void key_service(void)
{
 switch(ucKeySec)
 {
  case 1:
  {

  }
  break;
  case 2:
  {
   if(ucKey2TouchCnt == 1)
   {
    Light2 = 0;
    C_L = 1;
   }else
    {
     Light2 = 1;
     C_L = 0;
     ucKey2TouchCnt = 0;
    }
  }
  break;
  case 3:
  {

  }
  break;
  case 4:
  {

  }
  break;
  default:
  break;
 }
}

void delay_long(unsigned int uiDelayLong)
{
   unsigned int i,j;
   for(i=0;i<</font>uiDelayLong;i++)  //
   {
      for(j=0;j<500;j++)
      {
     asm("nop");
      }
   }
}


void System_Init(void)
{
 OSCCON = 0b01101000;            //内部4M晶振
 OSCTUNE= 0b00000000;            //晶振校准

 TRISCbits.TRISC0 = 0;
 TRISCbits.TRISC1 = 0;
 TRISCbits.TRISC2 = 0;
 TRISCbits.TRISC3 = 0;
 L2_C = 0;
 L1_C = 0;
 C_R = 0;
 C_L = 0;

 TRISAbits.TRISA6 = 0;
 LATAbits.LATA6 = 0;

 TRISCbits.TRISC4 = 0;  //BackLight输出
 TRISAbits.TRISA7 = 0;  //Light1输出
 TRISBbits.TRISB3 = 0;  //Light2输出
 TRISAbits.TRISA4 = 0;  //Light3输出
 TRISBbits.TRISB4 = 0;  //Light4输出

 TRISBbits.TRISB1 = 1;  //RB1触摸按键输入
 ANSELBbits.ANSB1 = 1;  //RB1设置为模拟端口

 WPUB = 0x00; //PORTB口无上拉
 IOCBP = 0x00; //关PORTB口电平变化中断
 IOCBN = 0x00;

 BackLight = 0; //背景灯打开
 Light1 = 1;  //其它灯关闭
 Light2 = 1;
 Light3 = 1;
 Light4 = 1;
}


void Cap_Init(void)
{
 CPSCON0 = 0b10001100; //打开电容模块,高频率振荡
 CPSCON1 = 0b00000001; //设置扫描通道0-3

 OPTION_REG = 0b11010011; //TMR0 分频器1:16
 TMR0IF = 0;
 TMR0IE = 1;
 
 T1CON = 0b11000101; //计数,时钟来源电容模块1:1分频
 T1GCON = 0b00000000; //与门控位无关
 TMR1GIF = 0;
 TMR1GIE = 0;
 TMR1H = 0;
 TMR1L = 0;
 TMR0 = const_timr0_value;
}


void SetNextSensor(void)
{
 if(Index == 3)
 {
  Index = 0; //Key1-Key4
 }
 else
 {
  Index++;
 }
 CPSCON1 = Index;
}


void RestartTimers(void)
{
 TMR1ON = 0;
 TMR1H = 0;
 TMR1L = 0;
 TMR1ON = 1;
}


void Cap_ISR(void)   //触摸按键扫描
{
 if (Cap_Value < (Cap_Avg[Index] - trip[Index])) //有键按下,不更新频率平均值
 {
  
  switch(Index)
  {
   case 0: //KEY1 ON
   {
    
   }
   break;
   
   case 1: //KEY2 ON
   {
    if(ucKeyLock2==0)
    {
     uiKeyTimeCnt2++; //累加定时中断次数
        if(uiKeyTimeCnt2>const_key_time2)
        {
            uiKeyTimeCnt2 = 0;
            ucKeyLock2 = 1;  //自锁按键置位,避免一直触发
            ucKeySec = 2;    //触发2号键
      ucKey2TouchCnt++;
        }
    }
   }
   break;

   case 2: //KEY3 ON
   {
    
   }
   break;

   case 3: //KEY4 ON
   {
    
   }
   break;

   default:
   break;
  }
 }
 else if (Cap_Value > (Cap_Avg[Index] - trip[Index] +64)) //无键按下,慢更新频率平均值64
 {
  switch(Index)
  {
   case 0: //KEY1 OFF
   {

   }
   break;
   
   case 1: //KEY2 OFF
   {
    ucKeyLock2=0; //按键自锁标志清零
    uiKeyTimeCnt2=0;//按键去抖动延时计数器清零
   }
   break;

   case 2: //KEY3 OFF
   {

   }
   break;

   case 3: //KEY4 OFF
   {

   }
   break;

   default:
   break;
  }
 
  if (AvgIndex < 4)
  {
   AvgIndex ++;   //更新频率
  }
  else
  {
   AvgIndex = 0;
  }

  if (AvgIndex == 4)
  {
   if(Cap_Value >= Cap_Avg[Index])
   {
    Cap_Avg[Index] = Cap_Avg[Index]+(Cap_Value - Cap_Avg[Index])/16;
   }
   else
   {
    Cap_Avg[Index] = Cap_Avg[Index]-(Cap_Avg[Index] - Cap_Value)/16;
   }
  }
 }
}


static void interrupt SystemISR(void)      //Timer0中断2.5ms
{
 if(TMR0IE && TMR0IF)
 {
  TMR0IF = 0;
  TMR0 = const_timr0_value;
  TMR1ON = 0;  //停止触摸按键振荡频率计数
  
  Cap_Value = (unsigned int)(TMR1H <<8) + TMR1L; //读取振荡频率
  Cap_ISR();
  //SetNextSensor();  //设置通道
  RestartTimers();  //重启TMR1
 }

 if (TMR0IE && TMR0IF)
 {
  TMR0IF = 0;
  RestartTimers();
 }
}

-----------------------------------------------------------

3、 使用PIC公司触摸库

采用PIC公司提供的库,到Microchip Libraries for Applications (MLA) | Microchip Technology下载,另外要注意MPLAB_IDE_8_76版本IDE,C编译器用picc-9_81-win.exe。

这就是PIC公司的触摸库,装好后得到的是一系列触摸MCU的demo,找到我们要的库(含有PIC16F1827),然后把它拷贝出来,进行配置和改造。Configure-->Select Device选择PIC16F1827,整个程序默认的速度是片内晶振16M,可搜索我的百度云盘“PIC16F1937_8 button”。

配置generic_processorConfigBits.h,实现对用内部晶振等等。

 还需要修改的地方:mTouch_config.h中修改两个地方:

这个是修改通道。 

修改触摸灵敏度,值越小灵敏度越大。

 在主函数main.c中读出触摸值,这里的CAP_DATA值大概是1或2。 使用PIC公司的触摸库做触摸处理,得到的效果非常好。

---------------------------------------------------

4、触摸IC芯片

----------------------------------------------------------------------------------------------------------------

四、C与汇编混合编程

#include "pic.h"
unsigned char add_function(unsigned char augend,unsigned char addend);
volatile unsigned char tmp; //定义位于bank0 的字符型全局变量

void main(void)
{
    unsigned char temp1,temp2,temp3;
    temp3=add_function(2,3);
    asm("clrwdt"); //清看门狗

    OSCCON = 0xEB; //禁止4X PLL,内部4MHz时钟源
    TRISBbits.TRISB3 = 0; //设置RB5端口为输出
    TRISCbits.TRISC4 = 0;
    ANSELBbits.ANSB3 = 0; //RB5设置为数字端口
    LATBbits.LATB3 = 0; //RB3输出低电平
    LATCbits.LATC4 = 0;
    WPUBbits.WPUB5 = 1;

 _asm
    CLRF _STATUS //选择bank0
    MOVLW 0x10   //设定初值
    MOVWF _tmp   //tmp=0x10
 _endasm
 

 if (tmp==0x10)
 {
    _nop();
 }
}

unsigned char add_function(unsigned char augend,unsigned char addend)
{
  return(augend+addend);
}

----------------------------------------------------------------------------------------------------------------

五、PIC单片机介绍

1、电源管脚分布

电源管脚分布规律:VDD PIN1,其对面的脚位GND。擦除丝印的单片机可根据此规律判断是否为PIC单片机。

---------------------------------------------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/250848.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

单片机之汇编语言和C语言(以PIC单片机为例)

目录 计算机语言计算机语言类别中断定时/计数器 C语言数据类型C语言动态数组C语言中void什么意思C语言宏定义单片机C语言的扩充数据类型单片机C语言的运算符单片机C语言的基本语句单片机汇编语言基本语句&#xff08;PIC&#xff09;PIC单片机基础概念PIC16F887&#xff08;40引…

【转】PIC单片机C语言简记

1.PICC安装&#xff1a; PICC编译器可以直接挂接在MPLAB-IDE集成开发平台下&#xff0c;实现一体化的编译连接和原代码调试。使用MPLAB-IDE内的调试工具ICE2000 、ICD2 和软件模拟器都可以实现原代码级的程序调试&#xff0c;非常方便。 首先必须在你的计算机中安装 PICC 编…

PIC单片机入门_C语言编程技术

1.为什么也是C语言&#xff1f; 用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等&#xff0c;因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机的软件开发&#xff0c;同样可以用C 语言实现。 Micro…

PIC单片机与PIC单片机C语言编程简介

对于计算机学院与电子学院相关的同学来说&#xff0c;单片机一定不是一个陌生的概念。在大学的学习生涯中&#xff0c;经常用于教学的是MCS-51系列单片机。其实&#xff0c;除了MCS-51单片机外&#xff0c;还有一类单片机——PIC单片机。 PIC单片机&#xff0c;英文名为Periphe…

Python知识回顾(10)

Day 10 本节主要讲解的是Python中文件操作(IO 技术)方面的知识。 文章目录 1.文件的处理1.1.1 文本文件和二进制文件1.1.2 文件操作相关模块概述1.3 创建文件对象 open()1.4 文本文件的写入1.5 常用编码介绍1.5.1 中文乱码问题1.5.2 write()/writelines()写入数据1.5.3 close(…

安卓手机阅读器_得到电纸书阅读器到底如何,值不值得买?使用一个月后,我告诉你答案!...

1 电纸书墨水屏的发展 一直以来,这世界上只有两种电纸书阅读器(电子书阅读器),一种是Kindle,另一种是其他。当然索尼的电子纸也不错,不过它的定位和价格已经不是普通的看电子书了。 自2007年第一代Kindle问世,如今已经将近13年过去了。Kindle有了更高的知名度,也有了更…

HNU-电子测试平台与工具2-串口实验5次

计算机串口使用与测量 【实验属于电子测试平台与工具】 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 0.环境搭建 在实验开始之前,安装好Ubuntu 20.04操作系统。(这个没有难度) 但要提醒的是,这个ubuntu是xubuntu,而且虚拟硬盘只有10GB的大小…

Java开发 - 让你少走弯路的Redis的主从复制

前言 大家举举手&#xff0c;让我看看还有多少人不会配置Redis的主从&#xff0c;主主这些的。故事发生在前段时间&#xff0c;小伙伴看到了博主的MySQL主从&#xff0c;就问博主有没有Redis的主从配置教程&#xff0c;本以为网上到处都是教程的博主打开网页一搜&#xff0c;好…

程序员の诗 - 启蒙

启蒙 一入挨踢&#xff08;IT&#xff09;门&#xff0c;从此断红尘。 网络席卷人生路&#xff0c;代码看似少年梦。 面朝电脑黑眼圈&#xff0c;一坐又是一整天。 错把代码当成梦&#xff0c;写尽半生皆是空。 然&#xff0c; 机器识 0 1&#xff0c;吾辈创世界&#xf…

linux恶搞指令

alias 指令 linux命令提供了一个有用的工具alias,让我们将需要频繁使用但又过于冗长的命令设置一个别名&#xff0c;以后只需要输入一个简单的别名就可以达到同样的作用 alias 查看当前设置的所有别名 alias cdtest‘cd /src/www/app/account’ 等号两边不能有空格 unalias c…

我爱优雅的代码,我爱搞笑的诗词

天王盖地府&#xff0c;小鸡炖蘑菇&#xff0c;拿了此大奖&#xff0c;才是最幸福。 也不知道什么原因&#xff0c;平时总爱写写各种好玩的东西&#xff0c;作为程序员&#xff0c;也许是一个放松的方式吧&#xff0c;我不喜欢做一个只会写代码的码农&#xff0c;我喜欢能在各个…

用计算机术语写诗,网上盛行写诗软件 电脑作诗毫无逻辑令人喷饭

自从“诗坛芙蓉”赵丽华(BLOG)红遍网络之后&#xff0c;诗歌——一个几乎被忽略的文学体裁又重新引起了大家的关注。 昨日(27日)&#xff0c;记者在浏览网站时发现&#xff0c;目前网络上一款写诗软件十分盛行&#xff0c; 只要输入几个关键字&#xff0c;电脑就自动写出一首诗…

机器学习知识经验分享之五:R语言安装

python语言用于深度学习较为广泛&#xff0c;R语言用于机器学习领域中的数据预测和数据处理算法较多&#xff0c;后续将更多分享机器学习数据预测相关知识的分享&#xff0c;有需要的朋友可持续关注&#xff0c;有疑问可以关注后私信留言。 目录 一、R语言介绍 二、R语言安装…

上海斯歌K2 x 赛博威 | 战略合作深度交流暨签约仪式

2月16日&#xff0c;上海斯歌K2与赛博威进行了战略合作深度交流&#xff0c;并在赛博威广州科学城办公室举办战略合作签约仪式。 为满足客户在数智化建设过程中的多元化需求&#xff0c;上海斯歌K2与赛博威曾多次产生交集。凭借双方多年合作的良好基础&#xff0c;自2022年始&a…

Eclipse教程 Ⅸ

今天继续来学习Eclipse 快速修复、Eclipse 浏览菜单、Eclipse 查找以及Eclipse 悬浮提示的内容&#xff01;老规矩&#xff0c;废话不多说&#xff0c;开始吧。 Eclipse 快速修复 使用快速修复 在 Eclipse 编辑器中当你输入字母时&#xff0c;编辑器会对你输入的内容进行错误…

matplotlib常用功能汇总

文章目录 1.IDE里的1.1 显示模式&#xff08;plt.ion()和plt.ioff()&#xff09;1.2 backend说明 2 jupyter里的3 通用的3.1 cmap3.2 subplot()相关3.3 绘制动态图&#xff08;Animation类&#xff09;3.4 matplotlib利用rcParams配置样式参数 4. 与opencv连用可能遭遇的问题1.…

再谈Linux epoll惊群问题的原因和解决方案

差别是什么&#xff1f;差别只是西装&#xff01; 缘起 近期排查了一个问题&#xff0c;epoll惊群的问题&#xff0c;起初我并不认为这是惊群导致&#xff0c;因为从现象上看&#xff0c;只是体现了CPU不均衡。一共fork了20个Server进程&#xff0c;在请求负载中等的时候&…

自适应网格搜索的多目标粒子群优化(MOPSO)

此博客中对文档的翻译为博主自己学习时意译的&#xff0c;仅用于学习用途&#xff0c;如有侵权请联系博主删除。如果有不足的地方&#xff0c;欢迎大家评论指出&#xff0c;与博主共同学习。 MOPSO对多目标粒子群优化的一个小建议 这篇文章提出了一个建议是扩展粒子群优化的启…

Python 极简socket多人聊天群

前言 别看目录又臭又长&#xff0c;其实可以直接从 第二章 开始看&#xff0c;因为 第一章 主要讲述socket的基础概念。但如果你只是想参考一下&#xff0c;可以直接跳到最后一章。 整个项目只使用了python的标准库&#xff0c;并建议初学者看完第一章 注&#xff1a;写这篇教程…

微信群机器人微云助手微小云如何设置群内积分兑换

经常有用户咨询我们询问积分有什么用,小编沉思之后只能说,没什么卵用…… 不过现在不一样了,微小云在新版本中推出了积分商城,积分商城可以让群友使用群内产生的积分兑换礼品了 具体怎么使用呢 首先点击登录的机器人,然后就可以看到积分商城的设置部分了 积分商城一共有4个功…