怎么用51单片机做液晶显示屏计算器,进行两位简单的计算

作者&投稿:孟司 (若有异议请与网页底部的电邮联系)
请问如何利用51单片机在LCD1602液晶屏上实现一个简单的计算器功能?~

#include
#include
#include "lcd_drive.h"
#defineucharunsigned char
#define uintunsigned int


void main()
{
uint key();
void deplay(uchar j_p);
void deplay_s(long a);

uchar i=1;
uchar jp=-1;
uchar flat;
uint a,b;


delay_ms(10);
lcd_init();
lcd_clr();

lcd_wcmd(0x80);





while(1)
{
while(jp==-1)
jp=key();

deplay(jp);

switch (jp)
{
case '=':switch(flat)
{
case '+': a+=b; deplay_s(a); break;
case '-': a=b-a; deplay_s(a); break;
case '*': a*=b; deplay_s(a); break;
case '/': a=b/a; deplay_s(a); break;
default:break;
}

break;
case '+':flat='+';b=a;i=0;break;
case '-':flat='-';b=a;i=0;break;
case '*':flat='*';b=a;i=0;break;
case '/':flat='/';b=a;i=0;break;
case 'c':a=0;b=0;lcd_clr();break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:a=a*10*i+jp;i=1;break;
}

jp=-1;
}

}



//-------矩阵键盘扫描-------
uint key()
{
uchar h = 0,l = 0;//矩阵行h,列l
uchar j_p;

P3 = 0x0f;
if(P3 != 0x0f)
{
delay_ms( 2 );
if(P3!=0x0f)
{
l = P3 & 0x0f;
P3 = 0xf0;
h = P3 & 0xf0;
}
}

switch(l | h)
{
case 0x7e:j_p=0;break;//按键0
case 0x7d:j_p=1;break;//按键1
case 0x7b:j_p=2;break;//按键2
case 0x77:j_p=3;break;//按键3
case 0xbe:j_p=4;break;//按键4
case 0xbd:j_p=5;break;//按键5
case 0xbb:j_p=6;break;//按键6
case 0xb7:j_p=7;break;//按键7
case 0xde:j_p=8;break;//按键8
case 0xdd:j_p=9;break;//按键9
case 0xdb:j_p='+';break;//按键a
case 0xd7:j_p='-';break;//按键b
case 0xee:j_p='=';break;//按键Enter
case 0xed:j_p='*';break;//按键c
case 0xeb:j_p='/';break;//按键e
case 0xe7:j_p='c';break;//按键取消
default:return -1;break;
}

P3=0x0f;
while(P3!=0x0f);

return j_p;
}

void deplay(uchar j_p)
{
if(j_p != -1)
{
if(j_p >= 0 && j_p <= 9)
j_p+=48;


lcd_wdat(j_p);
}
}

void deplay_s(long a)
{
int n[10];
uint i=0;
while(a)
{
n[i]=a%10;
a/=10;
i++;
}

while(i)
deplay(n[--i]);
}

1、硬件仿真图

硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。
2、主程序流程图

程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图。
3、Altium Designer画的PCB图

4、程序源代码
#include #include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar operand1[9], operand2[9];
uchar operator;
void delay(uint);
uchar keyscan();
void disp(void);
void buf(uint value);
uint compute(uint va1,uint va2,uchar optor);
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dbuf[8] = {10,10,10,10,10,10,10,10};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan()
{
uchar skey;
P1 = 0xfe;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xee: skey = '7'; break;
case 0xde: skey = '8'; break;
case 0xbe: skey = '9'; break;
case 0x7e: skey = '/'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfd;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xed: skey = '4'; break;
case 0xdd: skey = '5'; break;
case 0xbd: skey = '6'; break;
case 0x7d: skey = '*'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfb;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xeb: skey = '1'; break;
case 0xdb: skey = '2'; break;
case 0xbb: skey = '3'; break;
case 0x7b: skey = '-'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xf7;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xe7: skey = '$'; break;
case 0xd7: skey = '0'; break;
case 0xb7: skey = '='; break;
case 0x77: skey = '+'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
return skey;
}
void main()
{
uint value1, value2, value;
uchar ckey, cut1 = 0, cut2 = 0;
uchar operator;
uchar i, bool = 0;
init:
buf(0);
disp();
value = 0;
cut1 = cut2 = 0;
bool = 0;
for(i = 0;i < 9;i++)
{
operand1[i] = '\0';
operand2[i] = '\0';
}
while(1)
{
ckey = keyscan();
if(ckey != '#')
{
if(isdigit(ckey))
{
switch(bool)
{
case 0:
operand1[cut1] = ckey;
operand1[cut1+1] = '\0';
value1 = atoi(operand1);
cut1++;
buf(value1);
disp();
break;
case 1:
operand2[cut2] = ckey;
operand2[cut2+1] = '\0';
value2 = atoi(operand2);
cut2++;
buf(value2);
disp();
break;
default: break;
}
}
else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')
{
bool = 1;
operator = ckey;
buf(0);
dbuf[7] = 10;
disp();
}
else if(ckey == '=')
{
value = compute(value1,value2,operator);
buf(value);
disp();
while(1)
{
ckey = keyscan();
if(ckey == '$')
goto init;
else
{
buf(value);
disp();
}
}
}
else if(ckey == '$')
{ goto init;}
}
disp();
}
}
uint compute(uint va1,uint va2,uchar optor)
{
uint value;
switch(optor)
{
case '+' : value = va1+va2; break;
case '-' : value = va1-va2; break;
case '*' : value = va1*va2; break;
case '/' : value = va1/va2; break;
default : break;
}
return value;
}
void buf(uint val)
{
uchar i;
if(val == 0)
{
dbuf[7] = 0;
i = 6;
}
else
for(i = 7; val > 0; i--)
{
dbuf[i] = val % 10;
val /= 10;
}
for( ; i > 0; i--)
dbuf[i] = 10;
}
void disp(void)
{
uchar bsel, n;
bsel=0x01;
for(n=0;n<8;n++)
{
P2=bsel;
P0=table[dbuf[n]];
bsel=_crol_(bsel,1);
delay(3);
P0=0xff;
}
}
扩展资料:
PROTEUS 是单片机课堂教学的先进助手
PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台
随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。
使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;
在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。
实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。
参考资料来源:百度百科-protues

#define LCD1602_FLAG
#define LCD1602_PORT P0
#include<reg51.h>
#include<stddef.h>
#define uchar unsigned char

sbit lcd1602_rs=P2^0;
sbit lcd1602_e=P2^2;
sbit lcd1602_rw=P2^1;
sbit lcd1602_busy=P0^7;

uchar str[]="SimpleCalculator";
uchar keyval,keystr[16];

void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}

/*
************************************
 * 函数名称:lcd1602_CheckBusy()
 * 函数功能:状态查询
************************************
*/

void lcd1602_CheckBusy()
{
    do
    {
    lcd1602_busy=1;
    lcd1602_rs=0;
    lcd1602_rw=1;
    lcd1602_e=0;
    lcd1602_e=1;
    }
while(lcd1602_busy);
}

/*
***************************************
 * 函数名称: lcd1602_WriteCmd()
 * 函数功能:写命令
 * 入口参数:命令字
 * 出口参数:无
***************************************
*/

void lcd1602_WriteCmd(const uchar cmd)
{
    lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
 * 函数名称:lcd1602_WriteData()
 * 函数功能:写数据
 * 入口参数:c--待写数据
 * 出口参数:无
*********************************************
*/

void lcd1602_WriteData(const uchar c)
{
    lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
 * 函数名称:lcd1602_Init()
 * 函数功能:初始化LCD
 * 入口参数:无
 * 出口参数:无
***********************************************
*/

void lcd1602_Init()
{
    lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵
    lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,
    lcd1602_WriteCmd(0x06); //flag move to right,screen don't move
    lcd1602_WriteCmd(0x01); //clear screen
}

/*
************************************************
 * 函数名称:lcd1602_Display()
 * 函数功能: 字符显示
 * 入口参数:ptr--字符或字符串指针
 * 出口参数:无
 * 说    明:用户可通过以下方式来调用:
 *           1)lcd1602_Display("Hello,world!");
 *           2) INT8U 存储类型 txt[]="要显示的字符串";
 *              或者 INT8U 存储类型 txt[]={'t','x','t',..,'\0'};
 *              INT8U *ptr;
 *              ptr=&txt;
 *              lcd1602_Display(ptr);
 *              或 lcd1602_Display(txt);
 *              或 lcd1602_Display(&txt);
************************************************
*/

void lcd1602_Display(const uchar *ptr,uchar line)
{
    uchar data i=0;
uchar *data q;

q=ptr;
switch(line)
{
case 0:
lcd1602_WriteCmd(0x80);
while(q!=NULL && (*q!='\0') && i<16)
     {
lcd1602_WriteData(*q);
q++;
i++;
     }
break;
case 1:
lcd1602_WriteCmd(0xc0);
while(q!=NULL && (*q!='\0') && i<16)
     {
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}

uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f;  //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f)  //有键按下
{
delay(20);   //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef;    //逐行扫描初值
while((sccode&0x01)!=0)
{
    P3=sccode;
if((P3&0x0f)!=0x0f)
{
    recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
 }
        else
sccode=(sccode<<1)|0x01;
}
}
}
return 0;  //无键按下,返回0
}
uchar getkey(void)
{
uchar key;
key=kbscan();
if(key==0){keyval=0xff;return(0);}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
if(keyval!=0xff)return(1);
else return(0);
}

void cleardis(void)
{
uchar i;
for(i=0;i<16;i++)keystr[i]=' ';
lcd1602_Display(keystr,1);
}
uchar quzhix(uchar a)
{
if(a==1)return(keystr[0]-0x30);
if(a==2)return((keystr[0]-0x30)*10+keystr[1]-0x30);
else return(0);
}
uchar quzhiy(uchar a,b)
{
if(a==1)return(keystr[b]-0x30);
if(a==2)return((keystr[b]-0x30)*10+keystr[b+1]-0x30);
else return(0);
}
main()
{
uchar num=0,fu;
uchar x,y;
int result;
lcd1602_Init();
lcd1602_Display(str,0);
while(1)
{
if(getkey())
{
if(keyval<10)keystr[num]=keyval+0x30;
else 
{
 if(keyval==10){num=255;fu=0;cleardis();}
 if(keyval==11){
  y=quzhiy(num-fu-1,fu+1);
keystr[num]='=';
num++;
switch(keystr[fu])
{
case '/':result=x/y;break;
case 'x':result=x*y;break;
case '-':result=x-y;break;
case '+':result=x+y;break;
default:break;
}
if(result<0)keystr[num]='-';
else keystr[num]=' ';
num++;
keystr[num]=result/1000+0x30;
num++;
keystr[num]=(result%1000)/100+0x30;
num++;
keystr[num]=(result%100)/10+0x30;
num++;
keystr[num]=result%10+0x30;
}
 if(keyval==12){keystr[num]='/';fu=num;x=quzhix(fu);}
 if(keyval==13){keystr[num]='x';fu=num;x=quzhix(fu);}
 if(keyval==14){keystr[num]='-';fu=num;x=quzhix(fu);}
 if(keyval==15){keystr[num]='+';fu=num;x=quzhix(fu);}
}
lcd1602_Display(keystr,1);
num++;
num%=16;
}

}
}




用51单片机制作学习型红外遥控器的原理
假如我要的遥控器是自己做的而且是用51单片机根据按键的不同发射... 主要是C程序方面很难写出来??发射模块的程序思路怎么写???最好有C程序addby2004 的是一个接受时的解码的过程吧??假如我要的遥控器是自己做的而且是用51单片机根据按键的不同发射出不同的码值??怎么实现?? 展开  我来答 3个回答...

大神,求51单片机做简易计算器的那个c语言程序
以下是我编的简易计算器程序,基本成功 \/\/4*4键盘检测程序,按下键后相应的代码显示在液晶屏上 \/\/显示5位后,第6次显示操作符号 \/\/再显示下一个数 \/\/ 键值与功能对应表 \/\/键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ ...

学哥学姐会用51单片机编写输出自己姓名的程序吗?我做实验用哦,着急...
任何一个程序都需要有一个硬件平台支持。如果你想利用51单片机来实现,那你需要有显示部分硬件平台,常用的有液晶屏\/点阵等等。然后你用51单片机将编写好的字库代码发送给显示部分显示就好了。

如何用51单片机定时器产生一个PWM,频率20kHz,占空比可调的PWM
include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit KEY1 = P3^1; \/\/定义调速按键 sbit PWM = P1^5; \/\/定义调速端口 unsigned char CYCLE; \/\/定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;\/\/定义...

求51单片机同时控制流水灯和蜂鸣器七段数码管,分别用3个开关控制,流水...
我这有两个以前写好的数码管显示程序及左右流水灯程序,但是是分开的,你自己再修改下吧,把两个合到一起,再加入按键就可。include<reg52.h> define uchar unsigned char define uint unsigned int uchar num;uchar code table[]={ 0xC0,0XF9,0X24,0X30,0X19,\/\/0,1,2,3,4 0X12,0X02,...

msc51单片机控制器:背后的魔法
指令寄存器和指令译码器是msc51单片机控制器的核心部件。指令寄存器存储指令代码,指令译码器将指令代码翻译成可执行的操作码。️时钟发生器时钟发生器是msc51单片机控制器的重要组成部分。它有两种模式:内部方式和外部方式。内部方式利用内部的振荡电路和石英晶振,而外部方式则直接接收0.5~16mhz的外部振荡信号。...

求文章 51单片机
这里我提点我自已的想法,个人认为,初学单片机最好从8051开始,因为51单片机是一种通用型的单片机,性价比较高,虽然是8位的单片机,但现在应用的量及范围还很大。同时,因51单片机发展的历史长,学习的资料相对较多而且较完善。致于用哪个具体型号的单片机?你可以用89C51来做实验,也可以用89S51或者2051...

有没有51单片机大神 我要做一个计算机液晶显示但是我不会计算 能显示...
通过串口送电脑里行了 在你单片机程序计算出结果后增加一条写sbuf指令即可。上位机这边你得有个接收软件来把数据收下并放到表格里,你现在最主要是要把这个上位机搞定

用C语言编写,使用51单片机生成0--9不重复数字。请问用什么做随机种子...
\/\/正好我在做一个抽奖程序,有一段随机数去重代码,你可以借鉴一下。\/\/这种算法比较节省空间(至少我是这么觉得)\/\/用一个unsigned int型变量,记录已生成的随机数,代码如下#include <reg51.h>#include<stdlib.h>unsigned int random = 0x00;unsigned char nums[10] = {0};void myrand(){ ...

51单片机128*64液晶C程序
2009-08-10 给个51单片机128*64液晶的C程序 2017-09-26 求一个51单片机32*64点阵单元板静态文字显示的程序(c语... 2012-03-29 如何进行单片机与128X64LCD连接 2 2013-07-04 求一个51单片机的汇编语言代码,用以在128*64点阵的液晶... 1 2012-08-03 我要一个51单片机的控制12862液晶的C语音程序 ...

海西蒙古族藏族自治州18728913691: 本人想通过51单片机和佩带的液晶屏幕制作一款计算器,但不清楚首先先要学好哪几个模块,请求大家指教. -
时涛海地: 1.矩阵键盘扫描检测2.1602或者12864液晶的驱动3.浮点运算,输入数值等算法 4 画PCB和做板(不知道要不要自己做)3难度最大,编程思想不是一时半会能练出来的

海西蒙古族藏族自治州18728913691: 51单片机以矩形键盘为数字按键,以LCD为显示器,怎么写计算器代码?求大概思路 -
时涛海地: 12864大液晶吗还是字符型的液晶!不难!就是4*4矩键 输入数据,还有几个运算符的键,怎么运算,写在程序里! 矩键就想当于得到数字和运算符! 然后再加个清屏或着重新开始运算的!定义几个变量,弄个循环,可以死循环,设个定义(从按键里输入),结束输入,矩键的+,-,*,/,可以用switch(key)开关例: switch(key) {case 0xee: a*b;break; case 0xed: a/b; break;}

海西蒙古族藏族自治州18728913691: 用51单片机仿真计数器,用c语言写程序,LCD1602显示,具体要求:按键按下开始计时,按键再次按 -
时涛海地: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ...

海西蒙古族藏族自治州18728913691: 51单片机 89c51 独立按键 lcd1602 做计算器 -
时涛海地: 首先,显示数组定为:uchar code table[]="number is "; 然后定义:uchar code number[]="0123456789"; 显示的时候,将两个数组结合起来,就可以实现输出:number is 1、2、 3、4、5、6......例如:write_data(table[i])循环完之后紧跟weite_date(number[j]),j是多少,就有程序定了!

海西蒙古族藏族自治州18728913691: 怎么利用51单片机做一个简单计算器? -
时涛海地: 你是要程序?自己写吧,又不难,用C语言写+、-、*、%不就可以,用lcd1602显示就行

海西蒙古族藏族自治州18728913691: 单片机制作简易计算器需要哪些器件 -
时涛海地: 电路不难,主要是程序比较难. 一个矩阵键盘,LCD1602液晶比较好点(用数据管比较麻烦,特别是动态扫描),其它没有什么,主要是运算,可以加个蜂鸣器 我有一个STM32开发板上用的2.4寸触摸液晶一个例程就是计算器,看了下程序比较难.

海西蒙古族藏族自治州18728913691: 51单片机1602显示屏简易计算器c语言代码 -
时涛海地: 1,首先得有个矩阵键盘 2,然后焊好线写好驱动 3,实现内部算法,顶多加减乘除4种了 4,1602显示响应 一步一步做吧,说起来不难,做起来是很烦的哦

海西蒙古族藏族自治州18728913691: 用单片机怎么做计算器 -
时涛海地: 1. 4X4键盘输入,点阵字符型液晶显示. 2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位.对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数...

海西蒙古族藏族自治州18728913691: 我想用51单片机,矩阵键盘,lcd1602写个简易计算器程序
时涛海地: C语言的语句可以这样写 #include&lt;stdio.h&gt; void main() { float fxx; unsigned char str[10]; fxx = 12.5; sprintf(str,"%8.2f\n",fxx); //将12.5转换成8.2(2位小数)格式以ASCII方式存储到str字符串中 .......... } 由于1620液晶模块支持ASCII码,所以只要将str中的内容送到1602就行了.至于1602的操作我就不写了(其实我也没用过,但知道怎么用,应该不难)

海西蒙古族藏族自治州18728913691: 用51单片机制作简易计算器要那些器材? -
时涛海地: LED或LCD屏,按键,外观看你,一片51芯片,晶振,电路板,导线若干,焊接用的东西,编程器,电脑,够全得了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网