单片机频率计程序设计(23页).doc

上传人:1595****071 文档编号:35935745 上传时间:2022-08-24 格式:DOC 页数:23 大小:235KB
返回 下载 相关 举报
单片机频率计程序设计(23页).doc_第1页
第1页 / 共23页
单片机频率计程序设计(23页).doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《单片机频率计程序设计(23页).doc》由会员分享,可在线阅读,更多相关《单片机频率计程序设计(23页).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-单片机频率计程序设计-第 19 页沈阳工程学院课程设计任务书课程设计题目: 频率计程序设计 系 别 自动控制工程系 班级 测控本091 学生姓名 喻志华 学号 2009308125 指导教师 吕勇军 职称 教授 课程设计进行地点: F422 任 务 下 达 时 间: 11年 12月31日起止日期: 11年12月31日起至12年1月13日止教研室主任 年 月 日批准1.设计主要内容及要求;编写频率计程序。要求:1)能够测量频率并显示。 2)能够进行闸门时间选择。2.对设计论文撰写内容、格式、字数的要求;(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。(2).学生应撰

2、写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。(3).论文要求打印,打印时按沈阳工程学院毕业设计(论文)撰写规范的要求进行打印。(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。3.时间进度安排;顺序阶段日期计 划 完 成 内 容备注112月31日教师讲解题目,学生查阅相关资料21月4日查阅相关资料、进行方案论证31月5日参数计算、确定闸门时间切换方法41月6-8日编写程序51月9-11日调试程序61月

3、12日撰写论文71月13日论文答辩沈 阳 工 程 学 院频率计程序设计课程设计成绩评定表系(部):自动控制工程系 班级:测控本091 学生姓名:喻志华 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。5432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作, 5432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。5432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。5432指导教师评审成绩(加权分合计乘

4、以12) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力5432工作量工作量饱满,难度适中。5432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。5432评阅教师评审成绩(加权分合计乘以8)分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩分目录中 文 摘 要21设计任务描述3闸门时间的确定31.2 信号的采集31.3 定时与计数31.4 数据处理31.5 液晶显示32 设计

5、思路42.1 程序流程图42.2 程序原理5时钟初始化。5闸门时间控制模块。5定时器计数器设置6数据转换模块8数据转换模块一8数据转换模块二8数据转换模块三8数据转换模块四8数据转换模块五92.4 LCD显示10液晶显示初始化模块。10液晶显示模块。113 参数计算143.1 闸门时间的计算143.2 频率的计算144 工作过程分析155小 结166致谢177参考文献18附录:源程序代码19中 文 摘 要频率测量仪器使用在生产和科研的各个部门,也是某些大型系统的重要组成部分。数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪

6、器。其基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。 本次设计的数字频率计将采用定时、计数的方法测量频率,采用一个 LCD显示器动态显示4位数。测量范围从100Hz-2MHz的方波。本频率计的基本设计原理是通过控制按钮来控制闸门时间,利用T1进行定时,所定时间即为闸门时间,在定时的同时利用T0进行计数,一旦时间到了,即开始对TH0和TL0中的数据进行数据转换,转换后的BCD码即可利用液晶显示器显示。虽然实现频率测量有专用的频率测量仪器,但不易用于特殊场合。而

7、本设计介绍的用单片机实现的频率测量仪,利用分频和单片机的计数功能来实现等精度的测量.该频率测量仪器可独立使用;也可方便的嵌入电路系统中,并且将降低产品的成本,有利于新产品的设计与研制。本次设计通过对一个基于单片机的功能实现频率计的设计学习,详细介绍了单片机应用中的数据转换显示、LCD显示原理和单片机的定时原理。从而达到学习、了解单片机相关指令在各方面的应用的目的,将理论与实践成功的结合起来。关键词 单片机 频率测量 分频器 硬件 软件1设计任务描述当测量频率一定时,闸门时间选得越长,测量精度越高。本次设计通过对按钮的控制来选择闸门时间,选择四个不同的闸门时间: 1ms、10ms、100ms、1

8、s。1.2 信号的采集 本次实验通过交叉开关XBR1,选择P0.0作为信号输入端口。1.3 定时与计数 设置定时器T0作为外部计数器,T1作为定时器,通过控制闸门时间控制T1的定时,通过控制T1的启停来控制T0的计数,在T1开启的阶段由T0对信号进行计数。在闸门时间范围内,查看计数器T0所计的数,并由此算出被测量信号的频率。1.4 数据处理 数据的处理对于c8051f020单片机的指令没有可以直接将计数/定时器中所存放的16位的数据转换为10 进制的数据用来显示输出。所以对于TH0里的数值通过*256进行转换,而对于TL0里的数值%100、%10来进行转换。 1.5 液晶显示 将转换的数据放入

9、地址中,然后通过查表的方式,利用液晶显示器将数据显示出来。2 设计思路 2.1 程序流程图时钟初始化定时器T0,T1初始化端口初始化开始 1ms 10ms1s定时到时间液晶显示数据转换继续定时1档是否4档3档2档外部信号改变2.2 程序原理时钟初始化。原理选择内部时钟2MHZ,设定为1ms的初值。MOV XBR2,#40HSETB EA;总使能中断SETB TR0 ;T0开始计时SETB TR1 ;T1开始计时SETB ET1 ;开启定时器1的中断MOV CKCON,#08H;t0不分频,t1分频MOV TMOD,#1DH;t0计数,t1定时MOV TH1,#0FFHMOV TL1,#59HM

10、OV TH0,#0MOV TL0,#0统时间 2.2.2闸门时间控制模块。原理:闸门时间的选择是通过读取P5口的状态来控制的,然后通过基准的定时时间1ms时间,通过计算使其相应的在定时器中断中循环次数来控制闸门时间。比如要设定1s的闸门时间,则应该在中断中循环1000次。循环的次数是存储在R1,R0中,其中R0为内循环,R1为为循环。MOV A,P5JB ACC.0,AAAJB ACC.1,BBBJB ACC.2,CCCAJMP KKKAAA:MOV 30H,#1 ;10ms的设置AJMP DDDBBB:MOV 30H,#2 ;100ms的设置AJMP DDDCCC:MOV 30H,#3 ;1

11、s的设置AJMP DDDKKK:MOV 30H,#0 ;1ms的设置,这是默认的状态DDD:MOV DPTR,#0F00HMOV R0,30HMOV A,R0MOVC A,A+DPTR ;查表操作MOV R1,AMOV A,30HCJNE A,#03H,LOP1MOV R2,#03HAJMP LOP2LOP1:MOV R2,#00HLOP2:MOV A,R1MOV 33H,A查表部分为:ORG 0F00HTAB:DB 00H,0AH,64H,0C8H下图为P5口的中的原理图,从图中可以看出P5口与按键K相对应的。 图1.P5口控制按钮图 TIMER:CJNE R1,#00,LOD1 ;判断R1

12、,R2寄存器的状态来控制循环 CJNE R2,#00,LOD2 CLR TR0 ;当达到设定时间的时间后关闭计时 CLR TR1 AJMP LODLOD1:DJNZ R1,LOD AJMP LODLOD2:MOV R1,33H DJNZ R2,LODLOD: ;定时器初始化,时间设定为1ms。MOV TH1,#0FFHMOV TL1,#59HRETI T0计数值=MT1定时图2.频率计波形图图3. T0/T1方式1的原理图 初始化数据时间存储模块。 MOV 20H,TH0;将十六进制数转换成十进制数,并将四位转换后的数值存放在22H25H中最大为4095MOV 21H,TL0MOV 22H,#

13、0MOV 23H,#0MOV 24H,#0MOV 25H,#0 功能为判断高四位是否为0,为零则直接计算第八位,不为零则须把高四位给区出来。;如果高四位大于零,则进行下面的运算LCALL INITMOV A,20HCJNE A,#00H,LOP;判断最高位是否为零,为零则只有三位数最大为255AJMP NEXT 高四位的转换;高四位相当于20H*256LOP:MOV A,20HMOV B,#2MUL ABADD A,23H;百位数加上高四位中的百位上的数MOV 23H,AMOV A,20HMOV B,#5MUL ABADD A,24H ;十位上的数加上十位数MOV 24H,AMOV A,20H

14、MOV B,#6MUL ABADD A,25H ;个位上的数加上高八位上个位上的数MOV 25H,ALCALL JINWEI ;调用函数处理高八位 低八位的数据转换子程序。;定义一个函数入口这是计算低八位的十进制数INIT:MOV A,21HLOPPP:CLR CYSUBB A,#64HJC LODDINC 23H;百位自加一AJMP LOPPPLODD:ADD A,#64HLOP3:CLR CYSUBB A,#0AHJC LOP4INC 24H;十位自加一MOV 21H,AAJMP LOP3LOP4:ADD A,#0AHMOV 25H,A;个位给25HRET 把低八位和高四位结合部分,注意这

15、个子函数只有在高四位有值时且高四位的值给取出来时才调用该模块。 JINWEI:MOV A,25H ;取出个位上的数JW:CLR CY ;处理个位上的数SUBB A,#0AHJC YYYINC 24HLJMP JWYYY:ADD A,#0AHMOV 25H,A ;存取个位上的十进制数MOV A,24H ;取出十位上的数JWW: ;处理十位上的数CLR CYSUBB A,#0AHJC NETINC 23H ;百位上加一AJMP JWWNET:ADD A,#0AHMOV 24H,A ;存取十位上的十进制数MOV A,23H ;取出百位上的数,进行转换JW3:CLR CYSUBB A,#0AHJC N

16、EXT3INC 22H ;把千位上的十进制数给存取了AJMP JW3NEXT3:ADD A,#0AHMOV 23H,A ;存取百位上的十进制数RET 2.3.1 实测结果与误差分析 量化误差为1误差,被测信号与门控信号之间没有同步锁定的关系,门控信号何时到来是随机的。在固定的闸门时间内可能多(或少)放过一个脉冲信号,在显示器的末位产生1的附加误差。2.4 LCD显示2.4.1液晶显示初始化模块。 这个子函数在用液晶显示之前都调用一次。PORTINIT: ANL A,#0 MOV XBR0, A;交叉开关寄存器0 MOV P74OUT, #0F0H;端口47输出方式寄存器推挽和漏极开路的选择 R

17、ETLCDINIT: LCALL DELAY MOV P7, #38H ;功能设置;两行显示,5*7矩阵 MOV P6, #01H ;写命令 MOV P6, #00H ;结束写命令 LCALL DELAY MOV P7, #0EH ;开显示,开光标,字符不闪烁 MOV P6, #01H ;写命令 MOV P6, #00H ;结束写命令 LCALL DELAY MOV P7, #06H ;I/D=1,AC自动增一;S=0,整体显示不移动 MOV P6, #01H ;写命令 MOV P6, #00H ;结束写命令 LCALL DELAY MOV P7, #01H ;清除DDRAM,置AC=0 MO

18、V P6, #01H ;写命令 MOV P6, #00H ;结束写命令 LCALL DELAY RET2.4.2液晶显示模块。LCALL LCDINIT ;调用显示的初始化子程序。 MOV DPTR, #1100H ; MOV R4, #0AHLINE1: ANL A,#0 ;第一行的显示的模块 MOVC A, A+DPTR INC DPTR MOV P7,A ;字符送数据口P7 MOV P6,#05H ;写 MOV P6,#04H ;结束写 LCALL DELAY DJNZ R4,LINE1 MOV P7,#0C0H MOV P6,#01H MOV P6,#00H LCALL DELAY M

19、OV DPTR, #1000H MOV R4, #04H;显示数据模块 MOV R0,#22H LINE2:MOV A,R0 ;第一行的显示的模块 MOVC A,A+DPTR INC R0 MOV P7,A MOV P6,#05H ;A10=1xuan选择数据寄存器a8=1,写状态 MOV P6, #04H ;a8=0,结束写状态 LCALL DELAY DJNZ R4, LINE2 LCALL DELAY;显示单位模块 MOV A,30H CJNE A,#0,FFFF MOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAY AJMP EEEEFFFF

20、:MOV A,30HCJNE A,#1,GGGGMOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#30H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#2DH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYLJMP EEEEGGGG:MOV A,30HCJNE A,#2,EEE

21、EMOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#30H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#2DH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#32H MOV P6,#05H MOV P6, #04H LCALL DELAYEEEE: MOV P7,#48H MOV P6,#05H MOV P6, #04H LCALL DELAY MOV

22、P7,#5AH MOV P6,#05H MOV P6, #04H LCALL DELAY LJMP over3 参数计算3.1 闸门时间的计算 设定闸门时间定时器的定时宽度分别为0.1ms1ms10ms,当计数器计下脉冲数,通过数据转换可将频率输出。根据所需要的时间来决定定时器的初始值。由定时器选择的基为系统时钟的12分频,因此定时器每加一个字就是加1us。对于1ms初值的计算为Ct=216-(fosc*t)/k=65536-(11.0592*106*1*10-3th=0D4h,Ctl=0CDh;对于10ms则采用两次定时,赋予初值Cth=28h,Ctlth=0FBh,Ctl=0Ach。3.2

23、 频率的计算 由于计数值n=闸门时间频率F0/被测信号频率FX,所以对于1ms的闸门时间,频率为n KHZ,对于10ms的闸门时间则为10n KHZ, 对于0.1ms的闸门时间则为0.1n KHZ。4 工作过程分析 该次课程设计的大体思路是使用C8051F020单片机的实验开发板,使用T0/T1分别进行计数、定时,被测信号从P0.0口输入单片机时,选择闸门时间,开启T0.T1,T1开始定时,T0开始计数,当定时完毕时,T0计数完毕,把所计的数送给数据处理模块,把十六进制数转换为十进制数,然后把数据送给LCD显示单元显示,最后返回主程序,等待下一次信号的输入。5小 结两周简短而忙碌的单片机设计结

24、束了,在整个设计的中遇到诸多问题,但收获远远超过付出。通过这次设计加强了我的思考、动手能力和解决问题的能力,同时也能更好的掌握单片机程序开发的整个过程,最重要的是学会了如何去与别人合作。随着社会的发展,这方面的知识也在广泛的应用,所以这次设计同样为今后的工作奠定了一定的基础。这次课程设计的课题是频率计程序设计,刚刚拿到题目时感到手足无措不知从哪里开始。虽然老师上课有讲过相关内容,但这对课程设计远远不够,脑中比较茫然。所以我去图书馆查询相关的资料,尽可能的了解有关于频率的测量方法以及单片机的硬件结构和所需要的软件模块的相关知识。而编写程序的过程,也并非一帆风顺。其中虽有曲折,但通过不断的摸索、尝

25、试、求证,使得整体程序大致确定,然后将其结构化、模块化的分解,一步一步进行分析调试。最终程序在反复的试验后得以实现,在老师的指导下不断改善方案最终完成任务。在本次设计的过程中,学校给我们提供了一个硬件与软件结合设计的良好机会,不仅要求我们在掌握单片机的内部的电路功能的同时,还要求我们熟练的编写单片机的汇编语言程序并且实现一些课题性的硬软件设计。这就要求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本中学到的知识和实际联系起来,这不论是对我们以后的就业还是学习,都会有很大的促进和帮助。通过这次的课程设计,将会激励我在下一阶段的学习中更加努力。同时,通过本次课程设计,巩固了我们学

26、习过的专业知识,也使我们把理论与实践从真正意义上相结合了起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。更重要的是树立了一种程序设计的思想,从中可以自我测验,认识到自己的不足之处,以便于在日后的学习中得以不断改进。两周的课程设计过去了,我对单片机设计程序有了更深刻的认识,这两周虽然辛苦,但留给我更多的是收获和美好的回忆。这个过程,不但加深了我对课上所学到的单片机理论知识的认识和理解,重新让自己认识到了这门学科的在应用方面的广阔前景,并且通过知识与应用于实践的结合更加丰富了自己的知识。扩展了知识面,不但掌握了本专业的相关知识,而且对其他专业的知识也有所了解,而且较系统的

27、掌握单片机应用系统的开发过程,因而自身的综合素质有了全面的提高。6致谢为期两周的单片机课程设计结束了,尽管辛苦忙碌,但重要的是巩固了已学的知识,与此同时也了解了许多课外的知识,更培养了自己的实践能力。在这里首先要感谢的是我们的指导教师吕老师,正是有吕老师在最初阶段对我们思路的指引,才使我满怀信心的投入到本次课程设计中。在设计过程中吕老师指导了我很多关于编写程序的要领和容易出错的地方,正是因为有吕老师在编程阶段的细心讲解,在调试阶段的问题指正,才使得我最终顺利完成了本次课程设计。其次要感谢的是班级的同学,在我遇到问题时,同学们总能耐心细致的给我讲解,为我解答,是问题得以顺利解决。正因为有他们的帮

28、助,我的频率计程序设计进展很快,为最终调试赢得了宝贵的时间。最后要感谢图书馆在此期间提供的辅助资料,对设计的圆满完成给予了大力帮助。在此对以上部门表示衷心的感谢。7参考文献实验测试.华中理工大学出版社,20022万光毅 .Soc单片机实验、实践应用设计. 北京:北京航空航天大学出版社,20063何立民 .单片机高级教程. 北京:北京航空航天大学出版社,20004张俊謨 . Soc单片机原理应与用基于C8051F系列. 北京:北京航空航天大学出版社,20075林占江 .电子测量技术.北京:电子工业出版社,20076李光飞 ,楼苗然主编.51系列单片机.北京:北京航空航天大学出版社,2003附录:

29、源程序代码$INCLUDE (C8051F020.INC)ORG 0000HLJMP MAINORG 001BHLJMP TIMERORG 3000HMAIN:MOV WDTCN,#0DEHMOV WDTCN,#0ADHMOV 30H,#00over:MOV XBR2,#40HSETB EA;总使能SETB TR0SETB TR1SETB ET1MOV CKCON,#08H;t0不分频,t1分频MOV TMOD,#1DH;t0计数,t1定时MOV TH1,#0FFHMOV TL1,#59HMOV TH0,#0MOV TL0,#0MOV A,P5JB ACC.0,AAAJB ACC.1,BBBJ

30、B ACC.2,CCCAJMP KKKAAA:MOV 30H,#1AJMP DDDBBB:MOV 30H,#2AJMP DDDCCC:MOV 30H,#3AJMP DDDKKK:MOV 30H,#0DDD:MOV DPTR,#0F00HMOV R0,30HMOV A,R0MOVC A,A+DPTRMOV R1,AMOV A,30HCJNE A,#03H,LOP1MOV R2,#05HAJMP LOP2LOP1:MOV R2,#00HLOP2:MOV A,R1MOV 33H,ASIXUHUAN:JB TR0,SIXUHUANMOV 20H,TH0;将十六进制数转换成十进制数,并将四位转换后的数值

31、存放在22H25H中最大为4095MOV 21H,TL0MOV 22H,#0MOV 23H,#0MOV 24H,#0MOV 25H,#0;如果高四位大于零,则进行下面的运算LCALL INITMOV A,20HCJNE A,#00H,LOP;判断最高位是否为零,为零则只有三位数最大为255AJMP NEXT;高四位相当于20H*256LOP:MOV A,20HMOV B,#2MUL ABADD A,23H;百位数加上高四位中的百位上的数MOV 23H,AMOV A,20HMOV B,#5MUL ABADD A,24H ;十位上的数加上十位数MOV 24H,AMOV A,20HMOV B,#6M

32、UL ABADD A,25H ;个位上的数加上高八位上个位上的数MOV 25H,ALCALL JINWEI ;调用函数处理高八位NEXT:LCALL PORTINIT ;REP: LCALL DELAY ; LCALL LCDINIT MOV DPTR, #1100H ; MOV R4, #0AHLINE1: ANL A,#0 MOVC A, A+DPTR INC DPTR MOV P7,A ;字符送数据口P7 MOV P6,#05H ;写 MOV P6,#04H ;结束写 LCALL DELAY DJNZ R4,LINE1 MOV P7,#0C0H MOV P6,#01H MOV P6,#0

33、0H LCALL DELAY MOV DPTR, #1000H MOV R4, #04H ;显示数据模块 MOV R0,#22H LINE2:MOV A,R0 MOVC A,A+DPTR INC R0 MOV P7,A MOV P6,#05H ;A10=1xuan选择数据寄存器a8=1,写状态 MOV P6, #04H ;a8=0,结束写状态 LCALL DELAY DJNZ R4, LINE2 LCALL DELAY;显示单位模块 MOV A,30H CJNE A,#0,FFFF MOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAY AJMP EE

34、EEFFFF:MOV A,30HCJNE A,#1,GGGGMOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#30H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#2DH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYLJMP EEEEGGGG:MOV A,30HCJNE A,#2,EEEEMOV P7,#4BH MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#31H MOV P6,#05H MOV P6, #04H LCALL DELAYMOV P7,#30H MOV P6,#05H MOV P6, #04H

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁