简易电子书(24C64+Atmega16+128*64+红外接收+串口下载)

来源:互联网 发布:网络标志图标 编辑:程序博客网 时间:2024/05/20 21:59

  简易电子书(24C64+Atmega16+128*64+红外接收+串口下载)        

                小店地址:http://shop62796340.taobao.com

目前市场上各式各样的电子书琳琅满目,可自己总有一种自己DIY一个电子书的冲动。材料基本是拆机的,前后停停续续花了一个多星期,基本算是完成。可以通过串口下载TXT格式的文本文件,由于只挂了一个24C64的存储器,显示器是IC电话机上拆下来的无字库因此一个24C64只能存储2048个汉字,不过可以通过增加24C64个数来加大存储容量。新发几张图上来瞧瞧:

 

显示器效果图

控制电路及遥控器

串口接口

洞洞板反面

上位机

 

以下来分解下:

 

 显示器:

  显示器为IC电话机上折下来的,128*64可显示4行汉字。前后花了两天的时间来研究接口和写驱动程序,本程序目前只适用于AVR单片机,不过可方便的移植到51、430等单片机上。上前手头上还有十几块该液晶显示器。有需要的朋欢迎拍砖。 

 按键控制:

   本来想焊接开关来控制显示,后来正好朋友那么有个红外接收头,决定用红外摇器来控制,感觉更酷。红外解码采用的是中断的方式,这里和串口接收有冲突。由于串口也是采用中断的方式,因些会导致串口无法完整正确的接收上位机发来的数据。这里笔者通过采用通信协议来控制数据的发送,即当下载的时候关闭红外中断来保证串完整的接收数据。当数据接收完后再重先找开红外中断。本交采用的协议也比较简单如下所示:

      struct uarData{

                                char cmd;

                                char sum;

                                char *pData;

                             };

 存储器:

   本次采用的是常用的24C64存储器可存储2048个汉字。然而一条总线上可挂接8个,因些可能过挂接个数来扩展存储的容量或是更换更大容量的存储器,该存器采用的是I2C总线,驱动程序比较简单,网上很多这里不做介绍。

 上位机软件:

   上位机软件采用QT编写,不知道QT是什么的朋友可以百度一下。这里说两句题外话,之前学过VC++,学了一个月下来基本是一头的雾水只能死搬硬套的写几个很SB的程序。个人感觉MFC的结构组织的比较的乱,有种让人摸不着头脑的感觉,整个MSDN下下来有好几个G,文档的组织也比较差而且用中国人的话就是很绕,让人看的很纠结。最让人恶心的是整个程序写下来,不知道程序是从那开始的,好多语句是固定死的,没有为什么只用死记着,也让人看不太懂。最终还是放弃了VC++;直到后来学校组织电子设计大赛培训,第一次接触到了QT,可谓一见钟情。当时老师给我们分配了任务,我当时是学QT然后写个示波器的界面程序。QT是面向多平台的,一次编写代码只要简单的修改下就能到处编译,可移植性非常的OK。相比MFC于QT组织的非常的好,每个部件和类都非常的清晰明了,最让人不可思议的是QT全部的帮助文档下下来才十几个M,比起MSDN的好几个G确实有点让人难以致信,没错QT确实做到了,而且做的非常的好。当初学习QT不到两个星期基本就把示波器界面给写出来了。另外一组用的是VB,得运行在WINCE上。想比我的他那个效果有点,而且得运行于WINCE上。开机得先启动好WINCE后才能运行界面程序。而我用QT写得直接运行于LINUX上,开机可直接运行。这让我更加的喜爱QT了,QT确实好东西,要是还在MFC上挣扎的朋友不烦了解下QT,希望你也能爱上她。

 

跑远了,速速返回。

 

其实对于学习QT的朋友来说,有好多不知道如何向下位机发送16进制数据。对于用QT写串口通信程序好多朋友作用的是第三方串口类qextserialport,之前我也上网大四搜过,基本没什么收获。后来自己研究了下,感觉效果还不错。这里简单介绍下我的方法,仅做参考:

    比如说你要向串口发0xaa,你可以这样写:
                                         QString str;
                                         str.append(QChar(0XAA);
                                         write(str.toAssic());
    接收就不用说了吧:收到的看16进制直接就是了,要是你想取出来 的话可以这样:
                                         int data;
                                        QByteArray temp;
                                        temp=readAll();
                                        比如你要取出第一个16进制你可以样:
                                        data=temp.at(0)&0x000000ff;
                                        这样data就是你想要的16进制了

还有什么不明白的可以Q我或是给我发邮件:

                                                           QQ:445159738

                                                           eMail:yunjin12@163.com

                                       
   由于该次使用的液晶是无字库的,因此上位机得有自动提取字模的功能,对这个感兴趣的朋友可以看我之前写的一扁关于如何利用QT提取字模的文章,这里就不做介绍了。

原创粉丝点击