ImageVerifierCode 换一换
格式:DOC , 页数:31 ,大小:7.46MB ,
资源ID:950531      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-950531.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的简易计算器设计报告.doc)为本站会员(风****)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的简易计算器设计报告.doc

1、 基于51单片机的简易计算器设计【摘 要】单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除八位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89S51单片机为主要控制电路,利用4*4矩阵键盘作为计算器的数字以及运算符的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用开发板制作并演示。【关键词】计算器,单片机,LCD,矩阵键盘 AbstractThe emergence

2、 of computer chip manufacturing technology, rapid development of the product, which is the core of embedded control systems, and now, it has been widely applied to all areas of our lives, electronics, technology, communications, automotive, industrial and so on.The design is based on the 51 computer

3、s for digital system design calculator, you can complete the calculator keyboard, to add, subtract, multiply, and divide within the scope of the basic six-digit arithmetic, and the corresponding results on the LCD display.AT89C51 microcontroller circuit design as the main control circuit, use MM74C9

4、22 4 * 4 keypad as a calculator scan IC to read keyboard input.Character LCD display with a static display.Software using the C programming language, and use PROTUES simulation.Keywords: calculator,MCU,LCD, Matrix keyboard目录摘 要1一、系统总体设计11.1设计概述11.2设计思路11.3系统总体模块图:21.4系统方案2二、硬件系统设计22.1主控芯片AT89S52单片机2

5、2.2 LCD1602液晶显示屏32.3键盘接口电路42.4 清零、音乐开关、开方和多次方运算功能模块52.5电源模块设计6三、软件系统设计63.1总体设计63.2子程序设计83.2.1液晶显示程序设计83.2.2 矩阵键盘扫描程序设计83.2.3 AC清零程序设计93.2.4 声音开关子程序设计10四、系统功能测试104.1总体实物测试104.2 各项功能测试114.3 多次测试11五、总结12六、结束语12参考文献13附录14附1:计算器原理图14附2:主程序清单14附3:键盘扫描子程序21附4:LCD1602显示程序24附5:LCD1602显示字符表28附6: LCD接口信号说明29附7

6、: LCD写操作时序图29一、系统总体设计1.1设计概述本设计使用AT89S52单片机作为主控芯片,通过计算机键盘进行数据输入,进行相应的加、减、乘、除的运算,并在LCD上显示相应的结果,主要功能特点如下:(1)LCD的第一行显示运算式子,第二行显示运算结果,在任何时候按下AC清零按键时候,都必须退出当前计算,返回初始状态,等下新的一次运算。(2)当运算完第一次完整的计算以后,可以在不按任何按键的情况下,进行新的一轮运算,若运算完一次运算后继续按运算符按键,则利用之前一次的结果作为第一个算数,直接等待第二运算数的输入并完成计算,即可进行连续运算。(3)可根据用户需要开启或关闭按键声音提示,即通

7、过重复按声音开关按钮可关声音或开声音。(4)可进行开方运算、可进行任意次方的运算,即能进行x的y次方的运算。1.2设计思路根据课程要求和设计指标,本系统采用MCS-51系列单片机作为主控机,通过拓展必要的外围电路,实现对计算器的设计,具体设计思路如下:(1) 由于要显示运算式和结果,为了达到良好的显示效果,本系统采用LCD1602液晶显示屏作为显示模块。(2) 计算器一般包含数字键(09),符号键(、)、小数点按键,等号按键,故采用4*4矩阵键盘结合键盘扫描技术容易达到要求,并且电路和程序也比较简单。(3) 执行过程:开机显示0,等待按键输入,当键入数字,在LCD上显示出来,计算器内部吧数据储

8、存起来,并等待下一按键输入,当键入、运算符,计算器在内部进行转换,得到第一运算数,然后等待再次输入数值,按等于号就在LCD上显示结果,如果继续按下、运算符,则直接利用第一次运算的结果进行下一次运算。(4) AC清零功能:在运算的任何时候键入AC键,则把数据清零,等待下一次运算。为了实现此功能,本系统采用AC按键外部中断输入,运用中断技术,随时对计算器进行清零。(5) 音乐开关功能:由于在输入的任何时候都有可能需要开启或关闭声音提示,所以声音开关按键也采用外部中断输入单片机,运用中断技术,随时开或关声音提示。(6) 开方和多次方运算功能的实现:采用独立按键,再检测运算符的时候也检测这两个按键,一

9、旦符合按下则进行开方或者多次方运算,程序可通过条用“math.h”头文件中的sqrt和pow函数实现。(7) 错误提示:当输入超过范围时,则停止输入,等待输入运算符;当除数为0时,计算器会在LCD上提示错误;当被开方数小于0时,提示错误。鉴于本设计的计算器的难度以及功能的要求,在本设计中决定使用语言功能丰富、表达能力强、使用方便灵活、可移植性好的C语言编写软件,这样有利于减轻工作量和代码量,提高设计效率。若使用汇编语言编写程序,会出现汇编语言无法表达、移植困难等问题,而且对于开方和多次方的运算,汇编语言难以表达和设计,这是设计是很不利。1.3系统总体模块图:图1.1 系统总体框图1.4系统方案

10、经过反复推敲最终确定系统采用以下方案:(1)采用AT89S52作为主控芯片;(2)显示模块使用LCD1602液晶显示屏;(3)输入模块使用4*4矩阵键盘;(4)AC清零按键使用独立按键并接入单片机外部中断引脚;(5)声音提示开关按键使用独立按键并接入单片机外部中断引脚;(6)平方和开方按键由开发板上的独立按键实现;(7)电源采用LM7805稳压电路。二、硬件系统设计2.1主控芯片AT89S52单片机AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 DIP封装Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完

11、全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM

12、内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52的最大优点是可以在线编程,在调试程序的时候,可直接带电烧录程序,烧录完成即可自动复位运行,非常适合调试程序。而且AT89S52可编程一千多次以上,的确是一种价格低廉的开发芯片。单片机的最小系统设计:图2.1 单片机最小系统2.2 LCD1602液晶显示屏LCD1602,工业字符型液晶,能够同时显示16x02即32个字符(16列2行),故简称1602。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完

13、全一样。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A。1602LCD 液晶具有功耗低、显示内容丰富、清晰,显示信息量大,显示速度较快,界面友好等而得到广泛应用,因此使用1602液晶显示屏,可以方便的显示多种字符

14、,特别适用于单片机计算器的双行显示。液晶显示模块的设计:图2.2 液晶显示模块2.3键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,

15、这种形式在单片机系统中也最常用。矩阵键盘的设计:图2.3 矩阵键盘2.4 清零、音乐开关、开方和多次方运算功能模块本设计要求在任何时候按下AC清零键,都必须退出当前操作,数据清零,准备下一次的运算,故应采用独立键盘产生下降沿输入给单片机外部中断处理。对于声音开关按键,由于要求随时关闭或打开声音提示,本设计也采用独立按键产生下降沿输入给单片机的外部中断处理。而开方或多次方运算,则可与矩阵键盘一起检测,也当做一个运算符处理。具体功能按键设计如下图图2.4 AC清零模块图中,AC为清零按键、KeyBeep为声音开关按键、KeySqrt为开方按键、KeyPow为多次方按键。2.5电源模块设计由于AT8

16、9S52和LCD1602都是采用5V供电,而且其他模块功能也采用5V电平,本系统采用LM7805作为稳压芯片,经过初级和次级的电容滤波,最终得到稳定的5V电压供给系统使用,其电路如下:图2.5 5V稳压电路三、软件系统设计3.1总体设计本系统采用大小循环嵌套方式的软件设计思想,大循环则一直在运行,使计算器一直处于工作状态,并不断扫描按键,小循环用于识别数字是否输入完,一旦检测到输入的是运算符,则转换输入数值并储存起来,最后按下等于号以后则根据运算符计算两个数值的大小,并通过LCD显示。软件系统总框图如下:图3.1 总程序框图3.2子程序设计3.2.1液晶显示程序设计LCD1602在上电以后,应

17、该先等待50毫秒左右,让其内部芯片初始化后再对其进行操作。在对其操作时,应参考其时序图,先把命令写入其内部寄存器设置它的工作方式和状态。要显示数据的时候,先设置好显示坐标,再往里面写入要显示的ASCII码,LCD则通过刷新和替换来显示新的数据。其程序流程图如下图所示:3.2.2 矩阵键盘扫描程序设计由于矩阵键盘采用4行4列的结构,每一行每一列各对应一个I/O口,故程序应该逐行查询,一旦查询到有某一行的按键被按下了,则根据读取到的I/O总线口的数据即可查询到是哪一列的按键被按下了,最后对应行列返回一个按键值回主函数。其程序流程图如下:图3.3 矩阵键盘程序流程图3.2.3 AC清零程序设计根据系

18、统要求以及硬件结构,AC按键直接接入单片机外部中段0,则程序应使用中断来清除各数据存储变量达到清零的目的,并把清零标志位至1,在主程序中不断查询标志位,若为1,则清零后。其程序框图如右图:3.2.4 声音开关子程序设计根据要求,声音开关使用外部中断1来处理,当按下声音开关时,触发单片机进入外部中断1,在中断程序里,通过对声音开关标志位取反,在按键扫描过程中,加入对声音标志位的判断,若为1,则发出声音,即可实现声音提示功能。其程序框图如右图:四、系统功能测试4.1总体实物测试制作出来的系统实物图如下:4.2 各项功能测试表4-2 各项功能测试加法测试:减法测试:乘法测试:除法测试:开方测试:多次

19、方运算测试:错误提示测试1:错误提示测试2:由以上测试结果可知,计算器的各项功能正常,基本能达到设计要求。下面将进行多次测试,以检验计算器的性能指标。294.3 多次测试本测试由加、减、乘、除、开方、多次方运算以及连续运算、自动开始新一轮运算、错误提示测试等组成,其测试结果如下表:表4-3多次测试数据测试次数第一运算数运算符号第二运算数运算结果实际结果1244+3.625247.625002247.62524557.554-5445745-5441187.44602-5441187.4463102.5*2424602460467/7.58.9333348.93333333358(无输入)2.8

20、284272.2842712566236367(无输入)+1349498(无输入)(无输入)77969/0math error错误10-16(无输入)math error错误结果分析:对比运算结果和实际结果可知,进行一般的整形运算计算器能准确无误计算出来,但是当进行浮点运算时候,会产生精度丢失或者是有尾数产生,这是因为8051单片机对的浮点运算功能差,而且在keil开发环境中,float型和double型浮点数的精度都是一样的,其小数点的有效数字位数都是67位,这就决定了本设计的计算器的浮点数精度有限,只能通过小数点补偿来减少浮点数运算误差。另外,由连续运算、新一轮运算测试、错误提示测试的结果

21、以及运算过程中的AC清零、声音开关设置可见,本设计的计算器的功能基本能实现。但是,由实际操作可发现本设计存在以下不足:(1)某些按键不够灵敏,导致需要按很多次才能输入;(2)当运算式子超过屏幕范围时,不能通过移动屏幕来完全显示式子;(3)当连续出现错误操作时,如连续输入减号,程序不能自动复位,会产生连续错误;(4)没有删除输入功能,当输入出错时,只能通过清零后重新输入;(5)没有数据溢出提示功能。五、总结经过多次测量与调试,本计算器基本能实现设计要求中的功能。在设计的过程中,也遇到了不少的困难,例如在LCD上显示任意位整数,显示任意位小数,在输入小数的时候小数点的处理问题,连续运算的结果保存与

22、清空问题等等。最后通过不断的查阅资料,请教别人,修改程序,下载调试等过程,终于把遇到的问题逐一解决了。虽然某些问题解决得不够完美,但是都是经过自己的思考和努力解决的,在此过程自己也学到了很多东西,例如学会了矩阵键盘的扫描技术、LCD接口技术、LCD的显示技术、中断技术等等,这些技术对熟练单片机的使用以及单片机项目开发是非常有帮助的。在设计的过程中的思考解决问题的思路和方法对以后的工作和生活都是非常有帮助的。六、结束语首先,感谢学校和老师安排这一次的单片机课程设计,在大学期间,做这类的课程设计是非常有必要的,特别是对我们大三的学生,有利于我们将理论与实践联系起来。在两周的课程设计时间里,经过努力

23、拼搏,查阅了很多资料和文献,终于完成了基于单片机的计算器的设计。在设计的过程中,不仅巩固了以前学过的理论知识,而且还学会了很多书本上没有的知识,最重要的是把理论和实际结合起来,提高了自己的动手和独立思考的能力。在本设计中,由于时间和能力有限,难免会有不足的地方还望老师批评指正,以便在以后的设计中改正。这次课程设计得以顺利完成,少不了老师的指导和周围同学的指教,在此表示深切的感谢!参考文献1 吴宁. 80X86/Pentium 微型计算机原理及应用M. 北京:电子工业出版社,2004:1-249.2 蔡美琴. MCS-51系列单片机系统及其应用M.北京:高等教育出版社,2003:1-169.3

24、肖金球. 单片机原理与接口技术M. 北京: 清华大学出版社, 2004:1-3234 郭天祥. 新概念51单片机C语言教程:入门、提高、开发、拓展全攻略.北京:电子工业出版社,2009 P225 谭浩强. 从语言程序设计(第三版). 北京:清华大学出版社,2005:1-378.附录附1:计算器原理图附2:主程序清单#include#include#include lcd1602_8.huint temp,num;/键盘扫描数值uchar keynum1=0,keynum2=0,sign=0,i=0,j=0; /按键计数,符号标示uchar num18=0,num28=0; /按键存储数组flo

25、at ans1=0,ans2=0,ans=0,point=0; /运算数据bit conflag=0; /继续运算标志位bit newcalc=0;/新运算标志bit ac=0;/清零标志,1为清零bit beepflag=0; /蜂鸣器标志位bit sqrtflag1=0;/开方1标志位bit sqrtflag2=0;/开方2标志位sbit keybeep=P33;/蜂鸣器开关按键sbit beep=P27; /蜂鸣器控制口sbit keysqrt=P34;/开方按键sbit keypow=P35;/任意次方按键uchar keyscan();void maininit(void);/*主程

26、序*/void main(void)maininit();/初始化while(1)/整个系统大循环,让计算器一直处于工作状态while(1)/第一运算数扫描if(ac=1)break; /若清零,则退出输入if(keyscan()!=N)&(num=0&num=9)|num=.) /记录按下的数字if(newcalc=1) /新一次运算开始lcdwrite_com(0x01);/清屏newcalc=0;lcd_setxy(0,0);if(keynum10;i+) /计算按下的数字的大小if(num1i!=.)ans1=ans1*10+num1i;else if(num1i=.)break;ke

27、ynum1-;for(keynum1-,i+,j=0;keynum10;j+,i+,keynum1-)point=point*10+num1i;for(;j0;j-)point*=0.1;ans1=ans1+point;sqrtflag1=0; /清除开方标志sqrtflag2=0;/清除开方标志if(keysqrt=0) /计算开方delayms(5);if(keysqrt=0)if(beepflag=1) /若开声音则每一次按键均鸣叫beep=0;delayms(100);beep=1;ans=sqrt(ans1);sqrtflag1=1;lcdwrite_data(0xe8);while

28、(keysqrt=0);delayms(10);while(keysqrt=0);break;sign=num; /记住运算符号lcdwrite_data(num);break; /输入运算符号则退出第一运算数的输入while(1)if(ac=1)break; /若清零,则退出输入if(sqrtflag1=1) /若第一次按键为开方,则直接显示结果break;if(keyscan()!=N)&(num=0&num=9)|num=.) /记录按下的数字if(keynum20;i+) /计算按下的数字的大小if(num2i!=.)ans2=ans2*10+num2i;else if(num2i=.

29、)break;keynum2-;for(keynum2-,i+,j=0;keynum20;j+,i+,keynum2-)point=point*10+num2i;for(;j0;j-)point*=0.1;if(sqrtflag2!=1)lcdwrite_data(num);ans2=ans2+point;break;/输入等于号则退出第二运算数的输入else if(num=+|num=-|num=*|num=/|num=)point=0;for(i=0;keynum20;i+) /计算按下的数字的大小if(num2i!=.)ans2=ans2*10+num2i;else if(num2i=.

30、)break;keynum2-;for(keynum2-,i+,j=0;keynum20;j+,i+,keynum2-)point=point*10+num2i;for(;j0;j-)point*=0.1;lcdwrite_data(num);ans2=ans2+point;conflag=1;break; /进行连续计算if(ac=1)ac=0;continue; /清零后进行下一次运算if(sign=+) /计算结果ans=ans1+ans2;if(sign=-)ans=ans1-ans2;if(sign=*)ans=ans1*ans2;if(sign=/)ans=ans1/ans2;if

31、(sign=) /计算多次方ans=pow(ans1,ans2); if(sqrtflag2=1)/计算开方ans=sqrt(ans);lcd_setxy(1,0);if(ans2=0&sign=/)|(ans0&(sqrtflag1=1|sqrtflag2=1)lcdwrite_string(math error);/ans2=0或被开方数小于0时提示错误 else lcdwrite_float(ans);/显示结果sqrtflag1=0,newcalc=1; /为新的一次运算准备ans1=0;ans2=0;for(i=0;i8;i+)/清除按键缓存num1i=0;for(i=0;i8;i+

32、)num2i=0;if(conflag=1)conflag=0;goto here; /跳转到连续运算/*初始化程序*/void maininit(void)delayms(100); /等待液晶初始化lcd_init();lcd_setxy(0,0);lcdwrite_data(0);lcd_setxy(0,0);IT0=1;/下降沿触发EX0=1;/开外部中断0IT1=1;/下降沿触发EX1=1;/开外部中断1EA=1; /开中断/*清零中断程序*/void EX0_int() interrupt 0if(beepflag=1)/若开声音则每一次按键均鸣叫beep=0;delayms(10

33、0);beep=1;lcdwrite_com(0x01); /显示清屏lcd_setxy(0,0);lcdwrite_data(0);lcd_setxy(0,0);num=N; /数字初始化keynum1=0,keynum2=0,sign=0; ans1=0,ans2=0,ans=0,point=0;conflag=0,newcalc=0;ac=1;/*声音中断程序*/void EX1_int() interrupt 2beepflag=beepflag;if(beepflag=1) /若开声音则每一次按键均鸣叫beep=0;delayms(100);beep=1;附3:键盘扫描子程序/*键盘

34、扫描程序*/uchar keyscan()num=N;/若没有按下任何按键,则返回N P1=0xfe;/扫描第一行temp=P1;temp=temp&0xf0;while(temp!=0xf0) /扫描列delayms(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0) temp=P1;switch(temp)case 0xee:num=+;break;case 0xde:num=;break;case 0xbe:num=.;break;case 0x7e:num=0;break; while(temp!=0xf0) /等待松手temp=P1;temp=t

35、emp&0xf0; P1=0xfd;/扫描第二行 temp=P1;temp=temp&0xf0;while(temp!=0xf0) /扫描列delayms(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0) temp=P1;switch(temp)case 0xed:num=-;break;case 0xdd:num=3;break;case 0xbd:num=2;break;case 0x7d:num=1;break; while(temp!=0xf0)temp=P1;temp=temp&0xf0; /等待松手 P1=0xfb; /扫描第三行temp=P

36、1;temp=temp&0xf0;while(temp!=0xf0) /扫描列delayms(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xeb:num=*;break;case 0xdb:num=6;break;case 0xbb:num=5;break;case 0x7b:num=4;break; while(temp!=0xf0)/等待松手temp=P1;temp=temp&0xf0; P1=0xf7; /扫描第四行temp=P1;temp=temp&0xf0;while(temp!=0xf0) /扫描列delayms(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xe7:num=/;break;case 0xd7:num=9;break;case 0xb7:num=8;break;

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922