于基单片机的自行车里程计系统设计--毕业设计.doc

上传人:教**** 文档编号:88288168 上传时间:2023-04-24 格式:DOC 页数:28 大小:695.50KB
返回 下载 相关 举报
于基单片机的自行车里程计系统设计--毕业设计.doc_第1页
第1页 / 共28页
于基单片机的自行车里程计系统设计--毕业设计.doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《于基单片机的自行车里程计系统设计--毕业设计.doc》由会员分享,可在线阅读,更多相关《于基单片机的自行车里程计系统设计--毕业设计.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、华北科技学院课程设计题目:基于单片机的自行车里程计系统设计设计内容设计制作和调试一个由8052MCU组成的自行车里程计系统。通过这个过程学习熟悉单片机的外围扩展、键盘控制和七段数码管的使用,掌握51系列单片机控制和测试方法。设计以STC89C51单片机为核心,以霍尔传感器做为输入、使用独立键盘控制显示停止/开始、清零,以LED为显示方式的自行车里程计,完成基本要求。1)数码管显示:自行车里程;2)键盘控制里程计的开始、停止和清零; 设计步骤一、 总体方案设计其中,采用51系列MCU构成典型电路。选用适当的霍尔传感器器件。选择独立键盘和4位共阴极数码管。二、硬件选型工作三、硬件的设计和实现1.

2、选择计算机机型(采用51内核的单片机);2. 设计支持计算机工作的外围电路(EPROM、RAM、I/O端口、键盘、显示接口电路等);3. 接口电路;4. 其它相关电路的设计或方案(电源、通信等)四、软件设计1. 分配系统资源,编写系统初始化和主程序模块;2. 编写相关子程序;3. 其它程序模块(显示与键盘等处理程序)。五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)。课程设计说明书要求1. 课程设计说明书应采用学院统一印制的课程设计(论文)说明书封面,书写应认真,字迹工整,论文格式参考国家正式出版的书籍和论文编排。2. 论理正确、逻辑性强、文理通顾、层次分明、表达确切,并提出自己的见解

3、和观点。3. 课程设计说明书应有目录、摘要、序言、主干内容(按章节编写)、主要结论和参考书,附录应包括程序清单、系统方框图和电路原理图。4. 课程设计说明书应包括按上述设计步骤进行设计的分析和思考内容和引用的相关知识。5. 要求打印B5纸,排版要求请向指导教师索取。6. 每组单独一个题目,每组上限5人。时间安排课程设计计划时间4周。课程设计题目于15周下发。课程设计完成后于18周四下午下班前送交电子信息办公室(实验楼三楼),届时指导教师安排短暂答辩。辅导时间和地点答疑请直接与指导教师联系。目 录一、设计任务和要求 2二、设计目的 2三、设计的具体实现 3 1.系统概述 3 2.STC单片机的原

4、理及应用 4 3.霍尔传感器电路设计 7 4.USB供电电路设计 9 5.按键电路设计 10 6.显示电路设计 10 7.复位电路设计 11 8.晶振电路设计 12 9.总电路原理图 13 10.软件程序设计 14四、系统调试与仿真 23五、心得体会和建议24 六、附录26 七、参考文献27 基于单片机的自行车里程计系统设计报告一、设计要求1.设计背景我国是自行车大国,随着人们生活水平的逐渐提高,人们对于生活质量的要求也日益增加,尤其是对健身的要求。自行车在中国普遍作为代步工具。而在国外,自行车却是一项十分受欢迎的健身运动。因为它无污染,价位低廉,老少皆宜。而且在运动过程中可以充分享受到大自然

5、,对于忙碌的现代人来说,无疑是一种较好的放松方法。在中国这种情况也在慢慢发生变化。因此爱好自行车运动的人十分需要一款装置,以知道自己的运动情况。并根据外界条件,如温度等进行适当的调节,已达到最佳运动的效果。2.设计具体要求设计一个自行车车轮半径已知,用霍尔传感器测定出自行车的里程,并通过数码管显示出来的自行车里程表系统。二、设计目的1.通过单片机原理及接口技术专业课程设计,完成一个课题的理论设计和实验调试任务,既加深专业知识的理解,又能培养专业实践技能,提高分析解决问题和解决问题的能力。2.培养从文献和调查研究中获取知识的能力,提高学生从别人经验,从其他学科找到解决问题的新途径的悟性。3.培养

6、综合运用本专业基本理论、基本知识和基本技能的能力,使自己获得从事本专业工程技术工作的基本训练。4.培养勇于探索,严谨推理,实事求是,用实践来检验理论、全方位地考虑问题等科学技术人员应具有的素质。5.提高对工作认真负责、一丝不苟,对同学友爱团结、协作攻关,对新事物能潜心考察,勇于开拓,勇于实践的基本素质。6.进一步熟悉掌握计算机和EDA工具软件的能力。三、设计的具体实现1.系统概述自行车的速度里程表的硬件电路设计是基础部分,它包括信号的捕获、放大、整形,单片机的计算处理,数码管的实时显示和单片机外围基本电路的设计,两大主要器件就是传感器和单片机。传感器是获取自然或生产领域中信息的关键器件,是现代

7、信息系统和各种设备不可缺少的信息采集工具。磁传感器是一种将磁学量信号转变为电信号的器件或装置。随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处理等功能。本设计中,我们以STC公司STC89C52单片机为控制核心,采用霍尔传感器检测自行车轮胎的运转情况,通过一定

8、的抗干扰处理和计算后,由LED显示自行车的里程。本设计中,计数的正确性决定了本装置的精度,如何在复杂的环境中得到正确的计数脉冲,是本设计的难点,初步的解决办法是在硬件上进行合理的滤波,软件上进行一定的算法处理。其原理很简单,因为车轮的直径已知,车轮的圆周长便是恒定不变的。由此可以计算出霍尔传感器每发出一次计数脉冲自行车所走过的里程数。系统原理框图如图3.1。外部信号霍尔传感器里程显示STC89C52单片机图3.1 自行车里程计系统原理框图2.STC单片机的原理及应用单片机是指集成在一个芯片上的微型计算机,也就是把组成微型计算机的各种功能部件,包括CPU(Central Processing U

9、nit)、随机存储器RAM(Random Access Memory)、只读存储器ROM(Read-only Memory)、基本输入/输出(Input/Output)接口电路。定时器/计数器等部件都制作在一块集成芯片上,构成一个完整的微型计算机从而实现微型计算机的基本功能。STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看

10、门狗定时器,内置4KB EEPROM,MAX810复位电路,2个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。STC89C51管脚图如图3.2所示。图3.2 STC89C52引脚图STC89C52的主要管脚功能如下:P0.0P0.7:P0口是一组8位漏极开路型双向I/O口,也是地址/数据总线复用口。P1.0P1.7:P1是一

11、个带内部上拉电阻的8位双向I/O口。P2.0P2.7:P2是一个带内部上拉电阻的8位双向I/O口。 P3.0P3.7:P3是一个带内部上拉电阻的8位双向I/O口。ALE:地址锁存控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的分时传送。此外,由于ALE是以晶振16的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。:外部程序存储器读选通信号。在读外部ROM时,有效(低电平),以实现外部ROM单元的读操作。:访问程序存储控制信号。当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开

12、始,并可延至外部程序存储器。RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。XTALl和XTAL2:外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VSS:地线。 VCC:+5V电源。3.霍尔传感器电路设计本次设计信号的捕获采用的是霍尔传感器。霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。霍尔线性器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、

13、无抖动、无回跳、位置重复精度高。按照霍尔器件的功能可将它们分为:霍尔线性器件和霍尔开关器件,前者输出模拟量,后者输出数字量。 按被检测对象的性质可将它们的应用分为:直接应用和间接应用。A44E集成霍尔开关封装引脚图如图3.3所示。在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种

14、状态为开 。当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关 。这样两次电压变换,使霍尔开关完成了一次开关动作。工作点与释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。测量时,在1、2两端加5V直流电压,在输出端3与1之间接一个1kW的负载电阻,如图3.4所示。图3.3 A44E外形图3.4 集成霍尔开关接线图A44E输出端OUT连到单片机外部中断0上,当磁铁靠近A44E时输出端产生一个低电平信号,使CPU产生一次中断计一次数。假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测

15、得的里程值最大误差为L/m。本设计中取m=1。当轮子每转一圈,通过霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。 里程S=周长L*圈数n4.USB供电电路设计电源总是电路设计不可缺少的部分,本次设计采用了USB电源供电。USB接口可以向外提供电源,且是5V的电压,非常适合于TTL信号的系统,特别是单片机系统。可以使用这个电源为USB供电,这样便减少了电源设计,简化了USB系统结构。在USB总线系统中,USB主机和USB集线器可以通过VBUS和GND两根电源线向外提

16、供电源,电源一般4.755.25V。USB协议中规定,每个USB端口最大数据电流为500mA。USB端口具有高输出功率和低输出功率之分,同样,USB设备可以按照电流的消耗分为高功率消耗设备和低功率消耗设备。高功率消耗设备一般需要100500mA的电流,低功率消耗设备一般需0100mA的电流。电路图如图3.5所示。图3.5 USB供电电路5.按键电路设计键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可使仪器设备的操作变得更为简单、方便,很大程度上提高系统综合性能。本次设计中通过按

17、键S1来控制里程计的开始和停止,通过按键S2使里程计清零。电路图如图3.6所示图3.6 按键电路6.显示电路设计显示模块可以采用液晶显示器或者数码管显示器,但数码管具有低功耗,容易控制,占用CPU资源少这些优点,考虑到成本原因,选择了4位的七段共阴极数码管显示已经完全足够。本设计中使用4个单位数据管,数码管的阳极全部连接在一起,然后与U1原件74HC573锁存器的数据输出端相连,所存起的数据输入端连接单片机的P0口低四位,P0口同时加了上拉电阻,数码管中WE1,WE2,WE3,WE4是它们的位选端,每一个数码管对应一个位选端,与U2原件74HC573的数据输出端的低四位相连,U2的数据输入端也

18、连接到单片机的P0口。两个锁存器的锁存端分别与P2.6和P2.7相连。单片机控制锁存器的锁存端,进而控制锁存器的数据输出,这种时分控制的方法便可方便地控制任意数码管显示任意数字。电路图如图3.7所示。图3.7 显示电路7.复位电路设计复位是单片机的初始化操作,它是由外部的复位电路来实现,只需给单片机的复位引脚RST加上大于2个机器周期的高电平就可使其复位。电路图如图3.8所示。图3.8 复位电路8.晶振电路设计晶振电路用于产生单片机工作时所需的时钟控制信号。通过单片机的引脚XTAL1,XTAL2跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。时钟频率直接影响单片机的速度,晶振电路的质量

19、也直接影响单片机系统的稳定性。晶振电路电路图如图3.9所示。图3.9 晶振电路9.总电路原理图10.软件程序设计主程序流程图如图3.10所示NNYY改变计数器状态(停止/开启)开始初始化计数器开始计数LED显示里程按键S1是否按下?按键S1是否按下?结束计数器清零图3.10 主程序流程图显示子程序设计本设计中使用4个单位数据管,数码管的阳极全部连接在一起,然后与U1原件74HC573锁存器的数据输出端相连,所存起的数据输入端连接单片机的P0口低四位,P0口同时加了上拉电阻,数码管中WE1,WE2,WE3,WE4是它们的位选端,每一个数码管对应一个位选端,与U2原件74HC573的数据输出端的低

20、四位相连,U2的数据输入端也连接到单片机的P0口。两个锁存器的锁存端分别与P2.6和P2.7相连。先打开U1锁存器,控制段选端,输出需要显示的数字。然后关闭U1锁存器,打开U2锁存器,控制位选端,如此依次使四个数码管显示该位的数字。显示子程序如下:void display(uchar qian,uchar bai,uchar shi,uchar ge) dula=1;P0=tableqian; /送千位段选数据dula=0;P0=0xff;/送位选数据前关闭所有显示,防止打开位选锁存时wela=1;/原来段选数据通过位选锁存器造成混乱P0=0xfe;/送位选数据wela=0;delayms(5

21、);/延时dula=1;P0=tablebai; /送百位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);dula=1;P0=tableshi; /送十位段选数据dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delayms(5);dula=1;P0=tablege; /送个位段选数据dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delayms(5);里程计算子程序对单片机P3.2口输入的圈脉冲进行计数,计数器0打开但不打开中断,通过读取计数值进行控制。里程计算子程序流程图如图3.11

22、。NY开始计数器0对外部信号计数通过公式计算出里程里程是否大于10000计数器清0返回里程值图3.11 里程计算子程序流程图里程计算子程序如下:uint read()uchar tl,th1,th2;uint val,lc;while(1)th1=TH0;tl=TL0;th2=TH0;if(th1=th2)break;val=th1*256+tl; /读取计数器0所计数值lc=val*2;/计算自行车行驶的里程数return lc;总程序#include /52系列单片机头文件#define uchar unsigned char#define uint unsigned int sbit d

23、ula=P26;/申明U1锁存器的锁存端sbit wela=P27;/申明U2锁存器的锁存端sbit key1=P36;/申明独立键盘1sbit key2=P37;/申明独立键盘2uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void display(uchar qian,uchar bai,uchar shi,uchar ge) /显示子函数 dula=1;P0=tableqian; /送千位段选数据dula

24、=0;P0=0xff;/送位选数据前关闭所有显示,防止打开位选锁存时wela=1;/原来段选数据通过位选锁存器造成混乱P0=0xfe;/送位选数据wela=0;delayms(5);/延时dula=1;P0=tablebai; /送百位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);dula=1;P0=tableshi; /送十位段选数据dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delayms(5);dula=1;P0=tablege; /送个位段选数据dula=0;P0=0xff;wela=1;P0=0x

25、f7;wela=0;delayms(5);void delayms(uint xms)uint i,j;for(i=xms;i0;i-) /i=xms即延时约xms毫秒for(j=110;j0;j-);uint read()uchar tl,th1,th2;uint val,lc;while(1)th1=TH0;tl=TL0;th2=TH0;if(th1=th2)break;val=th1*256+tl; /读取计数器0所计数值lc=val*2;/计算自行车行驶的里程数return lc;void main()uchar a,b,c,d;uint num;TMOD=0x05; /设置计数器0为

26、工作方式1(0000 0101)TH0=0; /将计数器寄存器初值清零TL0=0;TR0=1;while(1) if(key1=0)delayms(10);if(key1=0)while(!key1);TR0=TR0;num=read();if(key2=0)delayms(10);if(key2=0)TH0=0;TL0=0;while(!key2);if(num=10000)num=0;TH0=0; /将计数器寄存器值清零TL0=0;a=num/1000;b=num%1000/100;c=num%1000%100/10;d=num%10;display(a,b,c,d);四、系统调试与仿真本

27、次实验采用的是uVision3软件进行调试。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程

28、序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil

29、软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。连机调试就是在样机中全速运行系统软件,观察系统运行情况,并根据运行结果修改控制参数,或对软件、硬件方案作必要的修改,重复调试过程,直到系统能满足各项性能性能指标要求。五、心

30、得体会和建议该设计通过对设计出来的板子进行调试,验证了理论分析结果的正确性。此次课程设计经过为小组同学的不懈努力,目前基本达到了预期的要求。通过对整个系统的调试,可得到如下结论:本系统是一个可测量自行车里程自行车里程表,能够通过数码管显示出自行车所行使的里程并能通过按键控制里程表清零,停止,启动。理解了自行车里程根据以下公式求得:里程=脉冲总数车轮周长通过实验证明本次设计符合设计的要求,能实现对里程的显示并能人工控制里程表,功能性较强,具有一定的实践意义,将会在许多场合应用。不过,这个设计还是有它的不足之处。首先就是没能实现对自行车速度的测定,在实际应用中不方便,这些还需要我们继续努力完善。在

31、设计之前,参考了一些相关的资料。在设计中又参考了所学单片机的知识及单片机应用设计举例,有了设计系统的基本框架。加之在网上找了一些相关资料最终设计出自行车里程表的电路原理图,有了基本的思路。但着手设计时,又出现了许多未预料到的问题,例如元件的选择:在选择单片机时,是采用MCS-51系列的哪种型号的单片机。在8031、8051、8751三种型号中我们选择了8051。8051是在8031的基础上发展的,又集成了4KB的ROM,而8751是在8031的基础上增加了4KB的EPROM。相对而言8051更适合我们所设计的系统,因而我们选择应用较为广泛的89C52单片机。在电源电路的设计中用了USB接口来实

32、现,使系统供电更加方便。这次实验过程中我受益匪浅,培养了我的设计思维,增加了动手操作的能力。更让我体会到实现温度控制功能后的喜悦。本次设计还是有许多的不足之处,比如说本次设计的自行车里程表的功能并不强大等问题。我们在以后可以设计功能更为强大的自行车里程表,比如说我们可以添加测量自行车的瞬时速度等功能,只是由于时间以及个人的能力问题我们暂时还难以设计出这样的电路,这就有待于今后我们在学习中认真领悟。六、附录表1 元器件清单序号名称编号型号数量1电阻R3,R7,R8,R9,R1710K52电阻R1,R2,R10,R191M43电阻R6,R11,R161K34电阻R4,R518 25排阻P110K*

33、816电容C4,C530pF27电容C2,C320pF28电容C110419电解电容CJ1,CJ310uF210发光二极管D9,D10LED211晶振Y111.0592MHZ112晶振Y26MHZ113数码管LED1LED4LG2821BH414独立按键S1,S2,S22SW-P315自锁式按键S3SW-P116锁存器U1,U274HC573217带并行总线的USB接口器件D12PDIUSBD12118单片机89C52STC89C521七、参考文献1.杨振江、冯军单片机原理与实践指导中国电力出版社20082.郭天祥51单片机C语言教程电子工业出版社20093.赵负图现代传感器集成电路人民邮电出版社20004.阎石数字电子技术基础高等教育出版社19985.童诗白、华成英模拟电子技术基础高等教育出版社20066.谭浩强C程序设计(第三版)清华大学出版社20057. STC89C51RC-RD单片机使用说明书27

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

当前位置:首页 > 教育专区 > 教案示例

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

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