标题: 单片机红外遥控万年历,带上位机、视频演示,(全部源码+PCB+原理图)应该算本坛最强大 [打印本页]

作者: jiaren    时间: 2013-6-21 00:42
标题: 单片机红外遥控万年历,带上位机、视频演示,(全部源码+PCB+原理图)应该算本坛最强大
虽然在高手如云的51hei论坛,这种时钟制作很多,今天整了下硬盘,翻出了大一升大二后的一个小制作,也来凑凑热闹,那时刚进实验室不久,什么都还没做过,就一个劲地学,后来以网上看到这个比赛,就报了名,当时想着练练手,也顺便当是这四个多月来的学习总结,没想到最后竟意外地得了一等奖,虽然现在知道这个奖的含金量不高,呵呵,不过当时很高兴。

现把这个作品的全部资料上传,包括全部原理图、PCB,以及上位机和下位机的源程序,高手请不要拍砖,这个给新手练练手还是挺好的,毕竟做个电子时钟是新手学习路上的一个很好的练手题材。
=============================================================
本时钟配置清单如下:
-------------------------------------------------------------
主控:51单片机,可用AT89S52,也可用STC89C52
显示:12864(ST7920,带字库版本的)
时钟:DS1302,配有一电池,掉电时间不停
温度:DS18B20
红外接收:HS1838
闹铃:有源蜂鸣器
遥控器:32位编码类型的
通信接口:MAX232
客户端软件:VC6.0开发的
=============================================================

当时没有相机,是用问同学借的摄像头拍的,不过还算清楚。
先来两张工作界面图片:

上位机一工作界面


下位机一工作界面


主原理图


副原理图


主PCB图


副PCB图


做好的热转印板-主PCB


做好的热转印板-副PCB


做好的串口模块

[attach]1927[/attach]
做好的主模块1



当时用的遥控器


菜单:调整时间


调整时间界面


报警温度界面


菜单:设置闹铃


设置闹铃界面


串口接线引出口


上面发了这么多图片,占了51hei论坛不少硬盘
现在把原理图和PCB上传上来,有99SE的工程,也有我打印出来的PDF版的:
PDF格式原理图和PCB PDF格式.rar (176.04 KB, 下载次数: 1831)
protel99se格式原理图和PCB protel99se格式.rar (208.14 KB, 下载次数: 1681)


PCB上传完就该到工程源码上场了,有两个,一个是51的KEIL工程源码,一个是VC6.0的工程源码:
KEIL C51工程源码 12864(下位机).rar (104.76 KB, 下载次数: 2968)
VC6.0上位机工程源码 VC(上位机).rar (1.9 MB, 下载次数: 3561)


演示视频不懂怎么弄上来,就有网址而已:
下位机功能演示视频:
http://player.56.com/v_NDQ5MjI0Mjg.swf
http://www.56.com/u23/v_NDQ5MjI0Mjg.html
上位机与下位机通信、工作演示视频A:
http://player.56.com/v_NDQ5MjMzMTM.swf
http://www.56.com/u28/v_NDQ5MjMzMTM.html
上位机与下位机通信、工作演示视频B:
http://www.56.com/u89/v_NDQ5MjMzNzQ.html
上位机视频播放功能演示:
http://www.56.com/u79/v_NDQ5NDQ4MzY.html

终于发完了:),所有资料都有,在51hei论坛应该算功能最强大的电子时钟之一了吧,还有遥控和上位机,不知道可不可以得个cool。

最后秀一下本论坛的会员nojiya88依据本资料做出来的作品,他还加了外壳,看起来比较漂亮!!网址:http://www.51hei.com/bbs/dpj-28628-1.html

作者: happysunshine    时间: 2013-6-21 09:37
请问那个PCB板是你自己画的吗?   所有的过程包括成型都是自己做的么?    以前一直都是用焊锡焊的线路。
作者: 俯首观天    时间: 2013-6-21 13:06
真心厉害了这个,对我们初学者的帮助很大,51hei(51黑)论坛有你更精彩.
作者: T29    时间: 2013-6-28 16:13
谢谢楼主!!!此贴必火!!!!51黑有你更精彩!!
作者: xiao_liang2011`    时间: 2013-6-28 20:17
大二,太厉害了~~怎么我上学时,感觉这些东西都还没开始学呢,,,,

不过我想知道你的原理画的很漂亮呀,还是彩色的,什么画的
作者: 左左右右    时间: 2013-7-1 16:17
楼主很强大哦!!!我现在也大二。也学了点东东。。。但是我想往硬件发展,就不像楼主这样全面拉。神马上位机这些,都是我另外个同学搞搞,我还是搞我的硬件。。
确实很佩服楼主诶~~~
作者: 左左右右    时间: 2013-7-1 16:18
想制作一个送给女朋友
作者: 波少    时间: 2013-7-4 19:09
这是在诱惑我。。。
作者: chenlingshun    时间: 2013-7-5 14:10
谢谢楼主的作品,值得学习
作者: zhengguang    时间: 2013-7-5 23:07
查了几遍硬件,没错啊.就是不显示,没辙了.还是弄个不带遥控的好了.
作者: jiaren    时间: 2013-7-7 18:21
xiao_liang2011` 发表于 2013-6-28 20:17
大二,太厉害了~~怎么我上学时,感觉这些东西都还没开始学呢,,,,

不过我想知道你的原理画的很漂亮 ...

是用protel 99se画的,和平时画元件库差不多,只是要多花点心思和时间。如果想用的话,下载这个PCB,有protel 99se格式的,导出加到你的元件库中
作者: jiaren    时间: 2013-7-7 18:27
zhengguang 发表于 2013-7-5 23:07
查了几遍硬件,没错啊.就是不显示,没辙了.还是弄个不带遥控的好了.

不错,你做出来这个也很好,还带农历显示呢,真不错。
如果你再讲究一些检查方法的话,可能你会学到更多,因为排错也是以后工作的一种技能嘛,相信从中,你也会学到更多。
首先,你别就光查硬件,要由现象去分析,从你发的图可看到你11月30号做出过一个了,那说明你的屏是可以正常工作的,你应该有能力确定硬件没问题,在查了几遍硬件后,还是不行,我觉得你应该去查一下程序了;
然后,你把程序烧进去后,你的屏都没有显示,这应该很明显,屏初始化肯定没成功!!你看看屏的控制管脚对没,数据口对没,这些都对了之后,再看看12864屏的初始化函数。实在不行,你不想看我的那个12864的初始化函数对不对,你可以加入一个你的12864屏模块,然后,首先调用你的12864屏初始化函数,然后就用一个死循环停住,不执行后面的程序,只查12864屏初始化函数,这样就能看到是不是我的屏初始化函数有问题了,你说是吧;
最后还是不行的话,你加我QQ:1292136790,我帮你搞定。
作者: wangyin    时间: 2013-7-7 18:40
楼主我做出来了但是用的红外接收头是vs1838b一体化接收头,遥控器用的是电视机的万能遥控器以及家里所有的遥控器都不能操作。不知道是什么原因啊,字体改动了,可以显示。就是遥控功能不能使用,换了N个遥控器都没有反应。


作者: jiaren    时间: 2013-7-7 18:47
wangyin 发表于 2013-7-7 18:40
楼主我做出来了但是用的红外接收头是vs1838b一体化接收头,遥控器用的是电视机的万能遥控器以及家里所有的 ...


呵呵,恭喜wangyin坛友仿制成功,你换的字体比我原来的好看多了!!

我也是用了一个电视机的万能遥控器,至于你说的遥控器没反应,请问没反应到什么程序??请具体说说。你打开上位机连接上下位机,再按下遥控器看看,如果是能正常解码的遥控器的话,你按下的那个按键的红外编码值会发送到上位机上,并在上位机上显示出来的,这样,你就连编码值都知道了。
作者: wangyin    时间: 2013-7-7 23:59
打开上位机连接上下位机,按下遥控器,上位机没有显示,连续按遥控器后,上位机弹出报错信息,然后退出程序。
作者: jiaren    时间: 2013-7-8 00:03
本帖最后由 jiaren 于 2013-7-8 00:08 编辑

你这个有点奇怪,怎么你连上了上位机后,上位机上的时间日期温度都没有更新啊??
正常的现象应该是:
连上上位机后,后有时间温度的更新,而红外编码应该是还没有的,因为,还没有按下遥控器嘛,然后,按下遥控器上某个键,如果能正确解码的话,那么,相应的编码值会更新在右下角这个红外码值区。

为了测试,我也打开了上位机,下面是我连接通信后的显示图:


而接下来这一张则是我按下了遥控器上的一个按键后的更新图:


作者: wangyin    时间: 2013-7-8 00:10
刚打开的时候是没有显示的,时间那一栏显示的好象是电脑时间。
那些信息应该是之前操作过后,可能是存在电脑里的,重新打开上位机就出现这种情况。我也详细看过你的视频,但是我仿制以后,遥控功能就是不能使用,不知何故。
作者: jiaren    时间: 2013-7-8 00:12
wangyin 发表于 2013-7-8 00:10
刚打开的时候是没有显示的,时间那一栏显示的好象是电脑时间。
那些信息应该是之前操作过后,可能是存在电 ...

哦,你晶振用的是多少的??我看到你的图上收到的红外编码是不对的,竟然的汉字出来了!!!
千万别和我的原理图上那个一样,我原先是没打算做有上位机的,所以,一开始时我用的是12M的晶振,后来,做加上了上位机,然后晶振就换成了11.0592M的了,因为这样波特率才准,但是原理图上忘了改回来了。
你连接上后没有更新时间等一些常规信息,应该你的波特率不对,再加上你的红外编码收到的竟然是汉字,更加确定波特率不对了。
在这也给各位坛友说一声不好意思,因为太久了,晶振这个事我都忘了。
作者: wangyin    时间: 2013-7-8 00:16
换了晶振以后可以连接,但遥控还是不能用,按下遥控的电源键后时间显示会停止,按其他键后可恢复显示。
另外,原来按下遥控会出错的原因是将红外接收头输出接在P3^1口,现改为P3^2口就不会出错。
上图:
作者: jiaren    时间: 2013-7-8 00:18
你的遥控我想应该不适合我那个解码程序。你另找个试试看。
另,给你发一个我以前的遥控解码显示工程,如果你用这个工程能解码某个遥控器,那就说明,该遥控器可用了。

测试工程源码:HS0038B测试1602显示:http://www.51hei.com/mcu/1984.html 我之前发布在51hei的资料
作者: wangyin    时间: 2013-7-8 00:20
谢谢!我再测试下。
另外,我用的红外接收头是VS1838B一体化接收头,遥控器用的是电视机的万能遥控器以及家里所有的遥控器都不能操作。
作者: jiaren    时间: 2013-7-8 00:22
我也是用了一个电视机的万能遥控器,我的这个是可以换编码的,可以换很多种,以适应不同的电视机,不知你的是不是也是这种,如果是的话,你就换一下别的编码,直到可以解码为止,然后就保持该编码方式,不换了。
你只有找到可用编码的遥控器,后面我才能告诉你怎么与程序配合,实现功能调节。
==============================
不过还有一种办法,就是你可以自己解码你那个遥控器,然后把你的解码程序段拿来替换我那段程序,这样也可以。
作者: wangyin    时间: 2013-7-8 00:28
我用的电视机万能遥控器也是可以根据不同的电视机更换编码的,有可能是与程序里的编码不一样。
用你提供的测试工程软件进行遥控器的解码,可以顺利解码,0--8键分别为:00H--80H,+、-分别为02H和52H等,但有些键值似乎超出16进制的规则范围,如:9字键为I0H,还有K0H、L0H等等。
解出的码是否可以替代如下程序里的码值,如:
                  …………
                case 0x0E: result=11;  break;   //+
                case 0x13: result=12;  break;   //菜单
                case 0x48: result=13;  break;   //OK
                case 0x0A: result=15;  break;   //上
                case 0x0B: result=16;  break;   //下
                   …………
还有哪里需要修改。
另外,还有个奇怪的现象就是上位机和下位机的连接,当刷新固件时可以正常连接显示,当下位机断电后重新上电不能正常连接显示,需重新下载刷新固件才能连接,不知何故。
望楼主指点。
作者: jiaren    时间: 2013-7-8 00:45
可以解码就可以了,直接遥控时钟板子,然后,在上位机上可以看到它的编码,然后,就是和你提的一样,用那些键替换程序里的码值,这样就行了。至于你说的键值有些超出,我看了一下那个测试代码,的确会导致超出,那是第一次参加电子培训时写的测试程序,有一个超值的问题,你改一下,是在主函数里,当大于9的情况那里,原本是这样:wdat_1602(ldata+0x40);改成这样:wdat_1602(ldata-9+0x40);大于9时忘减去偏移量了,还有hdata也一样改,改好这两处就行了。
你说的上下位机连接的奇怪现象,我试了我的,可以的呀。你的时钟只要能跑,就正常的会发送到电脑上来,不应该会有这奇怪的现象,你自己查查。
作者: wangyin    时间: 2013-7-8 08:56
硬件测试在第一行可以读出编码,第二行没显示,请问第二行显示的是什么内容。
但直接遥控时钟板子没有反应,在上位机上看不到它的编码,待检查硬件连接情况看是否能够找出原因。
作者: jiaren    时间: 2013-7-8 09:02
wangyin 发表于 2013-7-8 08:56
硬件测试在第一行可以读出编码,第二行没显示,请问第二行显示的是什么内容。
但直接遥控时钟板子没有反应 ...

刚给你看了一下(程序是很久前写的了,我都不记得什么了),第二行是没显示的,就只是一个空的,是自己加上对应于自己的遥控的按键功能描述用的,我那里面没有加,只是单纯的解码而已,你想加就自己加上对应你的遥控器的。
时钟板子没有反应,看来你的时钟板子做的有问题,你别的像什么时间呀都可以传上来电脑,就遥控没反应,说明是你硬件有问题的可能性很大,你好好检查检查。
作者: heicad    时间: 2013-7-8 09:11

总算弄好了,原来是用杜帮线接的,没上18B20 又是用12M晶阵,
换回11.0592M 就可以了.
但是还有个问题,就是左右调时间或温度时,会显示乱码.看图,

什么原因呢?


作者: wangyin    时间: 2013-7-8 09:14
   你好!请教一个问题,你使用的遥控器是哪种遥控器,我用的是万能遥控器,时钟显示正常,就是遥控功能不能操作。楼主说我的时钟板子有问题,现按楼主提供的PCB图重新焊接了一块板子,故障依旧,现怀疑是否遥控器的问题,下载线应该不会有问题吧。
    另外,你的红外测试软件能否发一份给我。谢谢!
作者: heicad    时间: 2013-7-8 09:28
你的遥控器必须先解码.修改按键值后时钟程序才能被遥控.

如果你的上位机不显示解码,那么你要换11.0592M的晶震,
作者: wangyin    时间: 2013-7-8 09:32
    我的晶震用的是11.0592m,上下位机是可以连接的。你能不能将你的红外测试软件发一份给我呢,
如果没记错的话,好象上次你已经发过一份12864无字库日历牌显示的程序给过我的在此谢过啦。
作者: heicad    时间: 2013-7-8 09:35
上下位机是可以连接.
那么你换几个遥控器对着多按几次,解出的码填进程序中就可以了.
作者: wangyin    时间: 2013-7-8 09:40
    请问下楼主,完全按照你的原理图重新焊接了一块时钟板子和下载线,检查了各部位的连接都没有发现问题,
故障和原来的板子一样,即第一次下载软固件到单片机后,上下位机可以连接且上位机可以显示下位机的数据信息,
当单片机断电后重新加电上下位机不能连接,故障跟原来的板子一样,找不出什么原因。
作者: wangyin    时间: 2013-7-8 09:49
经过一番努力,终于调试成功。

出现的情况跟heicad 的一样,在调整时间、温度是会有乱码出现。
作者: heicad    时间: 2013-7-8 09:54
还发现个问题


........
case 0x94: result=18;  break;   //静音(关闹钟)
case 0x96: result=19;  break;   //声音(开闹钟)
default:  result=14;  break;   //别的键按下返回14

别的键按下不会返回.
作者: jiaren    时间: 2013-7-8 11:58
小哥,调试成功遥控了又进步了。
至于你现在遇到的问题b60885262 的一样,在调整时间、温度是会有乱码出现。这个问题我也很奇怪,看到你们的问题我也调了我的时钟,发现根本就没有看到乱码,不知你们俩的是怎么出现的,同样的程序,得到的结果有一点不一样,应该是硬件有点区别吧。这个问题我不是很清楚怎么回事了,你们俩找找答案。

作者: jiaren    时间: 2013-7-8 12:20
heicad 发表于 2013-7-8 09:54
还发现个问题

你好,你发现的这个问题我发现它不是问题,看下面这个源函数就知道了。
你可以用遥控进入调整时间等菜单了,那肯定菜单对应的按键结果result=12返回了
case 0x13: result=12;  break;   //菜单
别的按键我就不用说有没有返回了。

/*************************************************************
                红外编码数据处理函数函数      
**************************************************************/
uchar workIRcode(uchar *pp)      
{
        uchar  result;
        beep();
        switch(pp[2])
        {
                case 0x00: result=0;  break;   //0
                case 0x01: result=1;  break;   //1
                case 0x02: result=2;  break;   //2
                case 0x03: result=3;  break;   //3
                case 0x04: result=4;  break;   //4
                case 0x05: result=5;  break;   //5
                case 0x06: result=6;  break;   //6
                case 0x07: result=7;  break;   //7
                case 0x08: result=8;  break;   //8
                case 0x09: result=9;  break;   //9
                case 0x0F: result=10;  break;   //-
                case 0x0E: result=11;  break;   //+
                case 0x13: result=12;  break;   //菜单
                case 0x48: result=13;  break;   //OK
                case 0x0A: result=15;  break;   //上
                case 0x0B: result=16;  break;   //下
                case 0x1a: result=17;  break;   //丽音
                case 0x18: result=18;  break;   //静音(关闹钟)
                case 0x17: result=19;  break;   //声音(开闹钟)
                default:  result=14;  break;   //别的键按下返回14
        }
        return  result;
}
作者: wangyin    时间: 2013-7-8 15:23
又调试了整整4个小时仿制制作完成,谢谢51hei论坛的朋友们,但在调整时间、闹钟、温度报警时会产生乱码现象,在调整月份时不是由1--12变化,而是从0--19之间变化,日和小时会从0--39之间变化,分钟从0--79之间变化。

最后,对显示界面重新规划,增加了农历、生肖、节气,采取轮换显示。

上几张制作和显示效果图:

作者: chenxinzdz    时间: 2013-7-8 18:04
谢谢!下来试作一下看,看着太好看了
作者: chenxinzdz    时间: 2013-7-8 18:06
12864(ST7920,带字库版本的),这个屏不知多少钱一个?


作者: admin    时间: 2013-7-8 21:25
chenxinzdz 发表于 2013-7-8 18:06
12864(ST7920,带字库版本的),这个屏不知多少钱一个?

这个的却不错,此贴已经置顶了,带字库的12864屏 在51hei的淘宝店里有大约40元左右
作者: chenxinzdz    时间: 2013-7-9 04:03
谢谢!
作者: zainanchao    时间: 2013-7-10 15:56
很厉害呀 值得学习
作者: 新手不新    时间: 2013-7-10 16:42
还不错呀,跟我一个想法,可惜当年我没做出来。
作者: mhaohu    时间: 2013-7-10 18:49
好东西啊 我也要做一个
作者: huyan1230    时间: 2013-7-10 19:10
对初学者帮助很大,谢谢!
作者: huyan1230    时间: 2013-7-10 19:11
chenxinzdz 发表于 2013-7-8 18:06
12864(ST7920,带字库版本的),这个屏不知多少钱一个?

带字库的12864屏 在51hei的淘宝店里有大约40元左右
作者: 盟主最好    时间: 2013-7-12 22:02
我们的实训也是做的这个 只不过显示时用点阵显示的!
作者: 朗朗繁星    时间: 2013-7-16 21:53
好好学习学习
作者: 1156615097    时间: 2013-7-23 22:28
有套件卖吗?我要
作者: shgdd520com    时间: 2013-7-24 07:44
谢谢楼主的好资料,抽空给仿制一个,学习下。
作者: chq7387    时间: 2013-7-24 11:17
很不错哦!学习了!
作者: chq7387    时间: 2013-7-24 11:18
我最近也在学习单片机!有没有谁用51单片机做移动电源的?
作者: weiyy216    时间: 2013-7-26 13:51
心动了  也想做一个
作者: mazhe668    时间: 2013-7-27 14:52

作者: mazhe668    时间: 2013-7-27 14:53

作者: 黑暗星空...孤魂    时间: 2013-7-28 23:12
高手哦。好好学习
作者: fxping163    时间: 2013-8-3 11:56
这时钟不错,自己动手DIY一个。
作者: fxping163    时间: 2013-8-3 11:56
这时钟不错,自己动手DIY一个。
作者: fxping163    时间: 2013-8-3 14:13
不错,上位机与单片机互动。好好学。
作者: 扬帆远航    时间: 2013-8-3 15:41
这个资料太好了!
作者: tiger_sugar    时间: 2013-8-4 11:32
看完了深有感触!
作者: jingboxu    时间: 2013-8-10 13:37
非常感谢分享
作者: 道听途说    时间: 2013-8-12 20:17
谢谢楼主的作品,值得学习
作者: 道听途说    时间: 2013-8-12 20:19
楼主很强大哦
作者: 利园    时间: 2013-9-28 19:44
真好,我也想做一个,希望能通过这个学到东西,新手,什么都不懂


作者: CQM_2929    时间: 2013-9-29 10:27
谢谢分享。。。。{:soso_e113:}
作者: sspeast    时间: 2013-9-29 21:39
好强大啊
作者: sspeast    时间: 2013-9-29 22:01
我也正在学,看了你的感觉好厉害啊
作者: zzp1383    时间: 2013-9-30 15:49
好东西,需要顶一下,还可以赚取M币。
作者: andy12345    时间: 2013-10-2 18:03
学习中 , 不错,好东西
作者: jinchouxing    时间: 2013-10-3 14:43
hao hao
作者: ~荆棘鸟~    时间: 2013-10-7 22:54
好厉害啊
作者: ~荆棘鸟~    时间: 2013-10-7 22:54
这个要多久时间做出来啊

作者: ~荆棘鸟~    时间: 2013-10-7 23:06

作者: renzhi6    时间: 2013-10-10 15:41
很好很强大,顶
作者: renzhi6    时间: 2013-10-10 15:42
金币不足了啊,可以一起打包发附件啊
作者: asn60    时间: 2013-10-11 08:57
这个高级
作者: 13620819446    时间: 2013-10-13 23:01
不错过来看看
作者: 13620819446    时间: 2013-10-13 23:01
不错过来看看
作者: 515894016    时间: 2013-10-17 21:14
很好不错 ,拿来学习一下
作者: fanqingzhen    时间: 2013-10-22 09:05
好。。。。。。。
作者: fanqingzhen    时间: 2013-10-22 09:05
顶。。。。。。。。。。。。。。。。。。。
作者: fxping163    时间: 2013-10-25 09:13
怎么点yiyi
作者: 谁规定昵称不能    时间: 2013-11-5 13:01
很佩服。,,,,,
作者: abccb    时间: 2013-11-13 10:44
51hei(51黑)论坛有你更精彩.
作者: abccb    时间: 2013-11-13 10:44
东西很不错,拿去学习学习
作者: abccb    时间: 2013-11-13 10:47
楼主威武,感谢楼主
作者: 侠过留香    时间: 2013-11-15 22:40
好厉害

作者: sdmlxdli    时间: 2013-11-16 14:04
太强大了啊啊啊啊啊
作者: 向上青年    时间: 2013-11-19 18:20
zan yi  ge
作者: now_°    时间: 2013-11-25 17:11
给力啊
作者: now_°    时间: 2013-11-25 17:11
初学者,试着学哦
作者: epwdh    时间: 2013-12-5 14:01
好东西啊 我也要做一个
作者: 蜉蝣    时间: 2013-12-7 13:24
谢谢!下来试作一下看,看着太好看了
作者: lijieping    时间: 2013-12-8 19:39
这个贴非常 的强大,很值得参考学习
作者: July    时间: 2013-12-14 18:24
对新人学习来说非常不错
作者: 被看穿了么    时间: 2013-12-15 10:31
很有成就感吧
作者: xjlfh    时间: 2013-12-23 00:26
不错不错,学习学习,谢谢啦。
作者: xjlfh    时间: 2013-12-23 19:54
老大,我用的是伟纳的ME500B系统,用下下来的下位机程序修改后编译出来有23K之大,而且找不见有关按键设置方面的程序,不知是咋回事,有知道的给说说啊,给单片机里用的应该是那个程序啊?谢谢啦
作者: cyllife    时间: 2014-1-12 12:59
谢谢分享!{:soso_e178:}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1