四极管:IIC驱动之 AVR ZLG7290

来源:互联网 发布:易格家具淘宝代购假货 编辑:程序博客网 时间:2024/05/22 10:34
 

后面的已经上传的显示和位定义就不再上传了··

 

ZLG7290驱动。。

四极管:ZLG7290驱动(IIC_ZLG_7290.c)

#ifndef   ZLG7290_C#define   ZLG7290_C/*********************************** 函数功能:ZLG7290驱动 函数说明:模拟i2c写法         使用环境:    硬件: MCU: ATmega32L                       F_CPU = 16000000                      外部:16000000  接线方法:见定义   编译环境:WinAVR-20080610  日期:2009年8月4日 修改者:    (日期:  ) ***************************************/#define   SDA_1 {DDRB&=~(1<<0);PORTB|=(1<<0);} #define   SDA_0 {DDRB|=(1<<0);PORTB&=~(1<<0);}#define   SCL_1 {DDRB&=~(1<<1);PORTB|=(1<<1);}#define   SCL_0 {DDRB|=(1<<1);PORTB&=~(1<<1);}#define   DA_IN PINB&(1<<0)  #define   ucharunsigned char#define   uintunsigned int#define   Write_Addr  0x70   #define   Read_Addr   0x71   uchar data[]="0123456789";volatile uchar Key_Value = 0 ;/*********************************************************函数名称:delay_I2c输入参数:n输出参数:NULL函数功能:短延时  ************************************************************/void delay_I2c(uint n){    uint i;    for(i=0;i<n;i++){    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");}  }/**********************************************************函数名称:Start_I2c输入参数:NULL输出参数:NULL函数功能:启动I2C总线************************************************************/void Start_I2c(void){ SDA_1;     SCL_1;          delay_I2c(10);         SDA_0;              delay_I2c(10);         SCL_0; delay_I2c(10);}/************************************************************函数名称:Stop_I2c输入参数:NULL输出参数:NULL函数功能:结束I2C总线**************************************************************/void Stop_I2c(void){          SCL_1;     SDA_0;       delay_I2c(10);           SDA_1;              delay_I2c(10); SCL_0; delay_I2c(10);}/****************************************************************函数名称:SendByte输入参数:Dat输出参数:NULL函数功能:8bit数据传送******************************************************************/void  SendByte(uchar Dat ){      uchar i;  SCL_0;      for(i=0;i<8;i++)                 {         if(Dat&0x80){SDA_1;}            else        {SDA_0;}                        delay_I2c(5);         SCL_1;                               delay_I2c(10);                 SCL_0;  Dat<<=1;     delay_I2c(5);      }       SDA_1;                       delay_I2c(10);         SCL_1;      delay_I2c(5);   while(DA_IN);     //等待应答  SCL_0;   delay_I2c(10);}/***************************************************************函数名称:ReciveByte输入参数:NULL输出参数:Dat函数功能:接受8bit数据****************************************************************/uchar  ReciveByte(void){      uchar Dat;      uchar i;       Dat = 0;   SDA_1;                      //置数据线为输入方式  delay_I2c(5);      for(i=0;i<8;i++)      {           Dat<<=1;       SCL_1;  delay_I2c(20);          if(DA_IN) Dat|= 0X01;     SCL_0;            delay_I2c(30);       }      SCL_0;  delay_I2c(10);      return(Dat);}/*****************************************************************函数名称:Ack_I2c输入参数:NULL输出参数:NULL函数功能:主控器进行应答信号,(可以是应答或非应答信号)          a = 1,非应答;a = 0,应答*******************************************************************/void Ack_I2c(unsigned char a)         //a = 1为非应答{        if(a==0){SDA_0; }    //在此发出应答或非应答信号         else    {SDA_1; }        delay_I2c(10);              SCL_1;                    delay_I2c(10);     //时钟低电平周期大于4μs        SCL_0;            //清时钟线,钳住I2C总线以便继续接收        delay_I2c(5);      }/******************************************************************函数名称: ReadZLG7920输入参数: NULL输出参数: NULL函数功能: 读取子地址的数据读取方法: 启动总线->写从器件地址->写单元地址->启动总线->读从器件地址           ->读命令(ReciveByte())->发非应答信号->结束总线*********************************************************************/uchar ReadZLG7920(void){      uchar Key ;  Start_I2c();  SendByte(Write_Addr);      //写从器件地址   SendByte(0x01); //写从器件寄存器     Start_I2c();   SendByte(Read_Addr);     //读从器件地址  Key = ReciveByte();    Ack_I2c(1) ;         //发非应答信号      Stop_I2c();  return Key;          }/******************************************************************函数名称: Key_Treat输入参数: NULL输出参数: NULL函数功能: 按键值处理 ,把读出来的按键值转换成成 1--16 十进制*********************************************************************/void  Key_change(void){ uchar Key_V; Key_V = ReadZLG7920(); switch(Key_V) { case 1 :  Key_Value = 1;break;case 2 :  Key_Value = 2;break;case 3 :  Key_Value = 3;break;case 4 :  Key_Value = 4;break;case 9 :  Key_Value = 5;break;case 10:  Key_Value = 6;break;case 11:  Key_Value = 7;break;case 12:  Key_Value = 8;break;case 17:  Key_Value = 9;break;case 18:  Key_Value = 10;break;case 19:  Key_Value = 11;break;case 20:  Key_Value = 12;break;case 25:  Key_Value = 13;break;case 26:  Key_Value = 14;break;case 27:  Key_Value = 15;break;case 28:  Key_Value = 16;break;   default :break; }}/***************************************************************函数名称:Dispaly_Key输入参数:NULL输出参数:NULL函数功能:用1602显示按键值****************************************************************/void Display_Key(void){      Key_change() ;  //Displaypstr(0,1,"Key = ");  distwochar_12864(7,1,data[Key_Value/10],data[Key_Value%10]);}  #endif

中断

四极管 :中断配置及实现(int0.c)

#ifndef  INT0_C#define  INT0_C/*********************************** 函数功能:外中断0驱动 函数说明:低电平触发中断           使用环境:    硬件: MCU: ATmega32L                       F_CPU = 16000000                      外部:16000000 hucdishcushucus 接线方法:3跟数据线:外部中断源接PD2   编译环境:WinAVR-20080610    日期:2009年8月4日 作者:杨琦 修改者:    (日期:  )   ***********************************/volatile uint8_t flag_1 = 0;   //定义中断标志位/****************************************** 函数名:int_init(void)** 功能  :外中断初始化** 变量  :无** 返回值:无****************************************/void int_init(void){    // MCUCR |= 0X00;//控制寄存器低两位(00):INT0的低电平产生一个中断请求   MCUCR |= 0X02;//控制寄存器低两位(00):INT0的下降沿产生一个中断请求//MCUCSR|= 0x00;//控制和状态寄存器第六位(ISC2)控制INT2~~~~~~~~~??GICR  |= 0X40;//通用中断控制寄存器的高三位为INT0、INT1和INT2的中断允许控制位}/****************************************** 函数名:SIGNAL(SIG_INTERRUPT0)** 功能  :外中断0服务程序** 变量  :SIG_INTERRUPT0 ** 返回值:无****************************************/SIGNAL(SIG_INTERRUPT0){        flag_1 = 1;             //外中断0}/****************************************** 函数名:init_devices(void)** 功能  :中断驱动** 变量  :无** 返回值:无****************************************/void init_devices(void){   DDRD=0x00;  //设置为输出   int_init();   sei();  //开全局中断}#endif

主函数

四极管:主函数(Main.c)

#ifndef  MAIN_C#define  MAIN_C#include <avr/io.h>#include <avr/interrupt.h>#include <int0.c>#include <RT12864M.c>#include <IIC_ZLG_7290.c>int main(void){    init_devices();Init_12864();while(1){  if(flag_1 == 1)    ////flag = 1表明已进入中断  {                  Dispaly_Key();  //中断后显示按键值      flag_1 = 0;     }}}#endif

显示函数

四极管:显示液晶(RT12864M.c)

/*********************************** 函数功能:RT12864_LCD 液晶汉字和字符 函数说明:四线方式,数据输出线:RS_12864  RW_12864  E_12864    PSB_12864            使用环境:    硬件: MCU: ATmega32L                       F_CPU = 16000000                      外部:16000000  接线方法:4跟功能线(数据线公用):RS-OA7  RW-OA6  E-OA5 PSB-OA4           编译环境:WinAVR-20080610 显示说明:  显示两个字符即一个汉字 :                      distwochar_12864(uchar x,uchar y,uchar char1,uchar char2)   (x为横坐标   y为坐标  char1 char2为所要显示的东西)                        坐标定位说明:X:0-15                                     Y:0-3     显示汉字字组:          dispstr_12864(uchar x,uchar  y,uchar *pstr)   (x为横坐标   y为坐标  *pstr为所要显示的东西)    坐标定位说明:X:0-7                                      Y:0-3 画图形: drawpic_12864(uchar *pdraw)               ( *pdraw为所要显示的图形码)                     所用取模软件:  字模精灵(Version1.0)                     源图形宽度 * 高度:128 * 64                     调整后宽度 * 高度:128 * 64                     字模格式:横向取模,冗余模式,字节正序,正色取模,   包含文件 :MyBit.h             BIN.h   日期:2009年7月13日 修改:杨琦 修改者:    (日期:  )*******头文件部分********/#include <avr/io.h>#include <util/delay.h>   #include<MyBit.h>#include <BIN.h>#define uchar  unsigned char #define uint   unsigned int #define RS_12864   OA7//RS#define RW_12864   OA6//RW #define E_12864    OA5//E#define PSB_12864  OA4#define RS_12864_io   RA7#define RW_12864_io   RA6#define E_12864_io    RA5#define PSB_12864_io  RA4#define RW_12864_r    IA6#define RS_12864_1()   {RS_12864_io=1;_delay_us(1);RS_12864=1;}#define RS_12864_0()   {RS_12864_io=1;_delay_us(1);RS_12864=0;}#define RW_12864_1()   {RW_12864_io=1;_delay_us(1);RW_12864=1;}#define RW_12864_0()   {RW_12864_io=1;_delay_us(1);RW_12864=0;}#define E_12864_1()    {E_12864_io=1;_delay_us(1);E_12864=1;}#define E_12864_0()    {E_12864_io=1;_delay_us(1);E_12864=0;}#define PSB_12864_1()  {PSB_12864_io=1;_delay_us(1);PSB_12864=1;}#define PSB_12864_0()  {PSB_12864_io=1;_delay_us(1);PSB_12864=0;}//串行写法第一字节#define CM_rdata0xfe    //11111110#define CM_rcomm0xfc    //11111100#define CM_wdata0xfa    //11111010#define CM_wcomm0xf8    //11111000uint CGRAM[64][8];//*************函数部分***************//* 名字:sentbyte_12864()            */         /* 功能:把一字节送到RT12864M        *//* 局部变量:sentbyte                *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void sentbyte_12864(uchar sentbyte){    uint i;    E_12864_0();     for(i=0;i<8;i++)        {  if(sentbyte&0x80){RW_12864_1();}  else {RW_12864_0();}  _delay_us(1);  E_12864_1();  sentbyte<<=1;  E_12864_0();  _delay_us(1);        }}//*************函数部分***************//* 名字:readbyte_12864()            *//* 功能:读RT12864M                  *//* 局部变量:readtype                *//* 全局变量:无                      *//* 返回值:  temp                    *///************************************/uchar readbyte_12864(uchar readtype){    uchar tmp1=0,tmp2=0,temp=0;uint i;sentbyte_12864(readtype);E_12864_0();for(i=0;i<8;i++)   {     _delay_us(1); E_12864_1(); if(RW_12864_r)tmp1|=0x01; tmp1<<=1; E_12864_0();   }for(i=0;i<8;i++)   {     _delay_us(1); E_12864_1(); if(RW_12864_r)tmp2|=0x01; tmp2<<=1; E_12864_0();   }temp=(tmp1&0xf0)|((tmp2&0xf0)>>4);return (temp);}//*************函数部分***************//* 名字:busywait_12864()            *//* 功能:检测RT12864M是否忙          *//* 局部变量:无                      *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void busywait_12864(void){    uchar bf;loop:    bf=readbyte_12864(CM_rcomm);    if(bf&0x80)goto loop;}//*************函数部分***************//* 名字:writecomm_12864()           *//* 功能:写命令进RT12864M            *//* 局部变量:command                 *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/ void writecomm_12864(uchar command){    busywait_12864();    RS_12864_1();    sentbyte_12864(CM_wcomm);      sentbyte_12864(command&0xf0);     sentbyte_12864((command<<4)&0xf0); }//*************函数部分***************//* 名字:writedata_12864()           *//* 功能:写数据写进RT12864M          *//* 局部变量:wrdata                  *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/ void writedata_12864(uchar wrdata){    busywait_12864();    RS_12864_1();    sentbyte_12864(CM_wdata);      sentbyte_12864(wrdata&0xf0);     sentbyte_12864((wrdata<<4)&0xf0); }//*************函数部分***************//* 名字:Init_12864()                *//* 功能:初始化RT12864M              *//* 局部变量:无                      *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void Init_12864(void){    PSB_12864_0();  //选择串口通信E_12864_0();     writecomm_12864(0x30);//功能设置 8位数据,基本指令    _delay_ms(10);writecomm_12864(0x0c);//显示状态 ON,游标OFF,反白OFF    _delay_ms(10);    writecomm_12864(0x01);//清除显示    _delay_ms(10);    writecomm_12864(0x02);//地址归位}//*************函数部分***************//* 名字:locatexy_12864()            *//* 功能:定位显示地址                *//* 局部变量:x,y                     *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void locatexy_12864(uchar x,uchar y){    uchar addr=0;    switch(y)        {       case 0:addr=0x80+x;break;   case 1:addr=0x90+x;break;   case 2:addr=0x88+x;break;   case 3:addr=0x98+x;break;   default:break;    }writecomm_12864(addr);}//*************函数部分***************//* 名字:distwochar_12864()          *//* 功能:显示两个字符即一个汉字      *//* 局部变量:x,y,char1,char2        *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void distwochar_12864(uchar x,uchar y,uchar char1,uchar char2){    locatexy_12864(x,y);     writedata_12864(char1);writedata_12864(char2);}//*************函数部分***************//* 名字:dispstr_12864()             *//* 功能:显示汉字字组                *//* 局部变量:x,y,*pstr              *//* 全局变量:无                      *//* 返回值:  无                      *///************************************/void dispstr_12864(uchar x,uchar  y,uchar *pstr){    uint i,t=0;    while(pstr[t]!='\0')t++;    for(i=0;i<t;i++)        {  distwochar_12864(x,y,pstr[i],pstr[i+1]);  i+=1;  x+=1;  if(x==8)    {  x=0;  y++;  if(y==4)y=0;}  } }/*=========================================*//* 函数:drawpic(uchar *pdraw);            *//* 功能描述:画图形                        *//* 参数接口:pdraw,是存放图形数据的表     *//*=========================================*/void drawpic_12864(uchar *pdraw){       uint x,y;long uint k=0;    uchar yaddr=0x80;    writecomm_12864(0x30);//功能设置---8BIT控制界面,绘图显示OFF    writecomm_12864(0x34);//功能设置---8BIT控制界面,扩充指令集    for(y=0;y<32;y++)    {        writecomm_12864(yaddr++);//设置绘图区的Y地址坐标        writecomm_12864(0x80);  //设置绘图区的X地址坐标        for(x=0;x<8;x++)        {          writedata_12864(pdraw[k++]);          writedata_12864(pdraw[k++]);        }    }    yaddr=0x80;    for(y=0;y<32;y++)    {        writecomm_12864(yaddr++);//设置绘图区的Y地址坐标        writecomm_12864(0x88);   //设置绘图区的X地址坐标        for(x=0;x<8;x++)        {            writedata_12864(pdraw[k++]);            writedata_12864(pdraw[k++]);        }    }    writecomm_12864(0x32);//功能设置---8BIT控制界面,绘图显示ON    writecomm_12864(0x36);//功能设置---8BIT控制界面,绘图显示OFF//返回基本设置_delay_ms(10);writecomm_12864(0x30);//功能设置 8位数据,基本指令    _delay_ms(10);writecomm_12864(0x0c);//显示状态 ON,游标OFF,反白OFFwritecomm_12864(0x02);//地址归位}


位定义·

四极管:位定义文件(Bin.h)

#define B0000_0000 0x00#define B0000_0001 0x01#define B0000_0010 0x02#define B0000_0011 0x03#define B0000_0100 0x04#define B0000_0101 0x05#define B0000_0110 0x06#define B0000_0111 0x07#define B0000_1000 0x08#define B0000_1001 0x09#define B0000_1010 0x0A#define B0000_1011 0x0B#define B0000_1100 0x0C#define B0000_1101 0x0D#define B0000_1110 0x0E#define B0000_1111 0x0F#define B0001_0000 0x10#define B0001_0001 0x11#define B0001_0010 0x12#define B0001_0011 0x13#define B0001_0100 0x14#define B0001_0101 0x15#define B0001_0110 0x16#define B0001_0111 0x17#define B0001_1000 0x18#define B0001_1001 0x19#define B0001_1010 0x1A#define B0001_1011 0x1B#define B0001_1100 0x1C#define B0001_1101 0x1D#define B0001_1110 0x1E#define B0001_1111 0x1F#define B0010_0000 0x20#define B0010_0001 0x21#define B0010_0010 0x22#define B0010_0011 0x23#define B0010_0100 0x24#define B0010_0101 0x25#define B0010_0110 0x26#define B0010_0111 0x27#define B0010_1000 0x28#define B0010_1001 0x29#define B0010_1010 0x2A#define B0010_1011 0x2B#define B0010_1100 0x2C#define B0010_1101 0x2D#define B0010_1110 0x2E#define B0010_1111 0x2F#define B0011_0000 0x30#define B0011_0001 0x31#define B0011_0010 0x32#define B0011_0011 0x33#define B0011_0100 0x34#define B0011_0101 0x35#define B0011_0110 0x36#define B0011_0111 0x37#define B0011_1000 0x38#define B0011_1001 0x39#define B0011_1010 0x3A#define B0011_1011 0x3B#define B0011_1100 0x3C#define B0011_1101 0x3D#define B0011_1110 0x3E#define B0011_1111 0x3F#define B0100_0000 0x40#define B0100_0001 0x41#define B0100_0010 0x42#define B0100_0011 0x43#define B0100_0100 0x44#define B0100_0101 0x45#define B0100_0110 0x46#define B0100_0111 0x47#define B0100_1000 0x48#define B0100_1001 0x49#define B0100_1010 0x4A#define B0100_1011 0x4B#define B0100_1100 0x4C#define B0100_1101 0x4D#define B0100_1110 0x4E#define B0100_1111 0x4F#define B0101_0000 0x50#define B0101_0001 0x51#define B0101_0010 0x52#define B0101_0011 0x53#define B0101_0100 0x54#define B0101_0101 0x55#define B0101_0110 0x56#define B0101_0111 0x57#define B0101_1000 0x58#define B0101_1001 0x59#define B0101_1010 0x5A#define B0101_1011 0x5B#define B0101_1100 0x5C#define B0101_1101 0x5D#define B0101_1110 0x5E#define B0101_1111 0x5F#define B0110_0000 0x60#define B0110_0001 0x61#define B0110_0010 0x62#define B0110_0011 0x63#define B0110_0100 0x64#define B0110_0101 0x65#define B0110_0110 0x66#define B0110_0111 0x67#define B0110_1000 0x68#define B0110_1001 0x69#define B0110_1010 0x6A#define B0110_1011 0x6B#define B0110_1100 0x6C#define B0110_1101 0x6D#define B0110_1110 0x6E#define B0110_1111 0x6F#define B0111_0000 0x70#define B0111_0001 0x71#define B0111_0010 0x72#define B0111_0011 0x73#define B0111_0100 0x74#define B0111_0101 0x75#define B0111_0110 0x76#define B0111_0111 0x77#define B0111_1000 0x78#define B0111_1001 0x79#define B0111_1010 0x7A#define B0111_1011 0x7B#define B0111_1100 0x7C#define B0111_1101 0x7D#define B0111_1110 0x7E#define B0111_1111 0x7F#define B1000_0000 0x80#define B1000_0001 0x81#define B1000_0010 0x82#define B1000_0011 0x83#define B1000_0100 0x84#define B1000_0101 0x85#define B1000_0110 0x86#define B1000_0111 0x87#define B1000_1000 0x88#define B1000_1001 0x89#define B1000_1010 0x8A#define B1000_1011 0x8B#define B1000_1100 0x8C#define B1000_1101 0x8D#define B1000_1110 0x8E#define B1000_1111 0x8F#define B1001_0000 0x90#define B1001_0001 0x91#define B1001_0010 0x92#define B1001_0011 0x93#define B1001_0100 0x94#define B1001_0101 0x95#define B1001_0110 0x96#define B1001_0111 0x97#define B1001_1000 0x98#define B1001_1001 0x99#define B1001_1010 0x9A#define B1001_1011 0x9B#define B1001_1100 0x9C#define B1001_1101 0x9D#define B1001_1110 0x9E#define B1001_1111 0x9F#define B1010_0000 0xA0#define B1010_0001 0xA1#define B1010_0010 0xA2#define B1010_0011 0xA3#define B1010_0100 0xA4#define B1010_0101 0xA5#define B1010_0110 0xA6#define B1010_0111 0xA7#define B1010_1000 0xA8#define B1010_1001 0xA9#define B1010_1010 0xAA#define B1010_1011 0xAB#define B1010_1100 0xAC#define B1010_1101 0xAD#define B1010_1110 0xAE#define B1010_1111 0xAF#define B1011_0000 0xB0#define B1011_0001 0xB1#define B1011_0010 0xB2#define B1011_0011 0xB3#define B1011_0100 0xB4#define B1011_0101 0xB5#define B1011_0110 0xB6#define B1011_0111 0xB7#define B1011_1000 0xB8#define B1011_1001 0xB9#define B1011_1010 0xBA#define B1011_1011 0xBB#define B1011_1100 0xBC#define B1011_1101 0xBD#define B1011_1110 0xBE#define B1011_1111 0xBF#define B1100_0000 0xC0#define B1100_0001 0xC1#define B1100_0010 0xC2#define B1100_0011 0xC3#define B1100_0100 0xC4#define B1100_0101 0xC5#define B1100_0110 0xC6#define B1100_0111 0xC7#define B1100_1000 0xC8#define B1100_1001 0xC9#define B1100_1010 0xCA#define B1100_1011 0xCB#define B1100_1100 0xCC#define B1100_1101 0xCD#define B1100_1110 0xCE#define B1100_1111 0xCF#define B1101_0000 0xD0#define B1101_0001 0xD1#define B1101_0010 0xD2#define B1101_0011 0xD3#define B1101_0100 0xD4#define B1101_0101 0xD5#define B1101_0110 0xD6#define B1101_0111 0xD7#define B1101_1000 0xD8#define B1101_1001 0xD9#define B1101_1010 0xDA#define B1101_1011 0xDB#define B1101_1100 0xDC#define B1101_1101 0xDD#define B1101_1110 0xDE#define B1101_1111 0xDF#define B1110_0000 0xE0#define B1110_0001 0xE1#define B1110_0010 0xE2#define B1110_0011 0xE3#define B1110_0100 0xE4#define B1110_0101 0xE5#define B1110_0110 0xE6#define B1110_0111 0xE7#define B1110_1000 0xE8#define B1110_1001 0xE9#define B1110_1010 0xEA#define B1110_1011 0xEB#define B1110_1100 0xEC#define B1110_1101 0xED#define B1110_1110 0xEE#define B1110_1111 0xEF#define B1111_0000 0xF0#define B1111_0001 0xF1#define B1111_0010 0xF2#define B1111_0011 0xF3#define B1111_0100 0xF4#define B1111_0101 0xF5#define B1111_0110 0xF6#define B1111_0111 0xF7#define B1111_1000 0xF8#define B1111_1001 0xF9#define B1111_1010 0xFA#define B1111_1011 0xFB#define B1111_1100 0xFC#define B1111_1101 0xFD#define B1111_1110 0xFE#define B1111_1111 0xFF


 

转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: yangxingbo-0311@163.com。

原创粉丝点击