社区导航

 

搜索
查看: 187660|回复: 266

[原创] 资深工程师单片机实战项目精讲(连载),由易到难连续分享

  [复制链接]

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2014-6-10 16:15 | 显示全部楼层 |阅读模式
资深工程师单片机实战项目精讲(连载),由易到难连续分享


face0.gif

    Hi!大家好,我叫吴鉴鹰,100%中国制造,长181cm,净重70kg。采用人工智能,各部分零件齐全,软硬件运转稳定,经二十多年的运行,属质量信得过产品。是一名从业10多年的单片机工程师,长年从事单机、DSP、fpga、PLC以及触摸屏的项目开发,自信比牛顿更懂单片机、比诸葛亮更会玩DSP、比汉武大帝懂得什么是指针,这年头就得玩一个综合实力。
       闻得EEWORLD上有一批志同道合之士,愿意一道交流技术,于是花以时日浏览之,果然不乏卧虎藏龙之辈,鉴鹰深感钦佩,感谢这些前辈同行能够分享自己的项目经验和学习心得。也通过这些有技术含量的帖子博客获益不少。
      

       回想当年鉴鹰刚刚大学本科毕业不久,进入一家大型国企,保守传统思想——“教会徒弟,饿死师傅”这种陋习的影响,只能靠自己死磕书本,硬啃项目慢慢才取得一点进步。所以后来干脆辞职再次回到电子科技大学读了三年研究生!为了让现在毕业的毕业的年轻人不要重蹈鉴鹰当年的覆辙,我也愿意将自己多年积累的一点经验分享给大家,想让更多的年轻人看到,获得一点点帮助就足矣!

        鉴鹰将会逐步分享自己的一点项目经验和学习心得,由于水平能力有限,纰漏之处,还望各位同行指出。
每一个项目会提供原理图、源程序还有仿真图。

face8.gif



现在来开始详细解析如何完成各种项目的具体的方法和软硬件,提供详细的硬件原理图和软件程序,欢迎大家来畅所欲言!
温馨提示:点击相关标题下面的链接即可到相关的项目
1、吴鉴鹰单片机实战项目精讲(连载)之基于单片机的数字电子钟设计

2、吴鉴鹰单片机实战项目精讲(连载)之基于单片机的摇摇棒的制作

3、吴鉴鹰单片机实战项目精讲(连载)之燃气报警器的制作——硬件设计

4、吴鉴鹰单片机实战项目精讲(连载)之燃气报警器的制作——软件设计

5、吴鉴鹰单片机实战项目精讲(连载)之电子秤的设计 ——硬件设计

6、吴鉴鹰单片机实战项目精讲(连载)之电子秤的设计 ——软件设计

7、吴鉴鹰单片机实战项目精讲(连载)微机键盘的运用——原理介绍

8、吴鉴鹰单片机实战项目精讲(连载)微机键盘的运用——程序设计

9、吴鉴鹰单片机实战项目精讲(连载)之如何提高单片机的抗干扰能力

10、吴鉴鹰单片机实战项目精讲(连载)之超声波测距仪设计(一)——原理图

11、吴鉴鹰单片机实战项目精讲(连载)之超声波测距仪设计(二)——主机程序

12、吴鉴鹰单片机实战项目精讲(连载)之超声波测距仪设计(三)——从机程序


13、吴鉴鹰单片机实战项目精讲(连载)之数字示波器的使用教程
2.gif
温馨提示:在以下连续的几个章节中,吴鉴鹰会只针对单片机驱动12864的显示分享一系列的项目,从最基本的文字数字的显示,再到图片的显示,到最后动画的显示,以及模拟时钟的显示,然后俄罗斯方块的显示,贪吃蛇的显示!让你彻底的征服12864,做12864的强者,相信没有你做不到的,只有你想不到的,玩转12864,小菜一碟!










142945ck1lplafof3iah31.gif




213008jxgvhrr0xz36rzxg.gif







温馨提示
未完待续,以后吴鉴鹰每个星期至少更新一讲内容,以后每讲内容尽量做到内容清晰,发帖必为经典,让读者更容易接受和吸收,分享更多有技术含量,我自己做过的项目,敬请持续关注


来源:EEWorld 51单片机板块,转载请附上链接

评分

9

查看全部评分

为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-10 16:18 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2015-4-27 09:04 编辑

1、吴鉴鹰单片机实战项目精讲(连载)之基于单片机的数字电子钟设计

相关的原理图请点击下载: 吴鉴鹰基于单片机的电子数字时钟设计原理图.pdf (593.42 KB, 下载次数: 1315)
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

203

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-6-2 21:54 | 显示全部楼层
很牛逼,确实实力派

点评

过奖过奖,大家互相学习  详情 回复 发表于 2015-6-2 22:35


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-17 10:53 | 显示全部楼层

10、吴鉴鹰单片机实战项目精讲(连载)之基于单片机的超声波测距仪设计

本帖最后由 吴鉴鹰. 于 2014-6-17 11:11 编辑

10、吴鉴鹰单片机实战项目精讲(连载)之超声波测距仪设计(一)——原理图
相关资料请点击下载:
吴鉴鹰基于单片机的超声波测距设计原理图.pdf (542.16 KB, 下载次数: 657)




图片1.png

图1

1、超声波测距原理
发射器发出的超声波以速度v在空气中传播,在到达被测物体是被反射返回,由接受器接受,其往返时间为t,有s=vt/2即可算出被测物体的距离。由于超声波也是一种声波,其声速v与温度有关,下表列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应该通过温度补偿的方法加以校正。

1超声波测距仪原理框图单片机发出40khz的信号,经放大后通过超声波发射器输出;超声波接受器将接受到得超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行辨别、计算,得出距离数并送LCD显示并送语音播报模块播报。
2、吴鉴鹰的项目成品具有的功能
1) 具有超声波测距功能,测量距离0.20m~5.00m测距精度±1㎝。2) 具有测量距离数值无线传输功能。3) 实时显示测量的距离,显示格式为:X.XXm4) 汉字提醒显示:距离在0.40m~1.00m,显示“危险距离”并用红色LED灯指示;距离在1.00m~2.00m,显示“保持距离”,并用黄书LED灯指示;距离在2.00m以上,显示“安全距离”并用绿色LED灯指示。5) 具有实时语音播报功能,实时播报测量距离数值,格式:X.XXm,实时播报时间间隔≤10s,实时播报声音清晰明亮、无明显失真,在1m距离处人耳能准确分辨。语音播报要与显示同步。
图片2.png

图2

3、超声波测距方法的选择
       超声波测距的原理一般采用渡越时间法TOFtime of flight)。首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离。测量距离的方法有很多种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波在标准空气中的传播速度为331.45/秒,由单片机负责计时,单片机使用12.0MHZ晶振,所以此系统的测量精度理论上可以达到毫米级。由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到要求。根据设计任务、控制对象和现有条件本系统硬件电路采用由单片机最小系统、温度补偿电路、超声波发射电路、超声波接收电路、显示电路无线通信电路以及语音播报电路构成。本超声波测距仪的具体工作过程如下,单片机控制的振荡源产生40kHz的频率信号来驱动超声传感器。每次发射包含6个脉冲左右,当第一个超声波脉冲发射后,计数器开始计数,在检测到第一个回波脉冲的瞬间,计数器停止计数,得到从发射到接收的时间t ,单片机读取温度值补偿声速,利用测距公式可计算出被测距离,同时由无线通信模块将测量数据传到下位机进行显示和语音播报。系统总体框图如图所示。
图片3.png

3 发射模块

图片4.png

图 4

4 接收模块
4、超声波发生器选择
超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。本课题属于近距离测量,可以采用常用的压电式超声波换能器来实现。超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。此次设计采用反射波方式。测距仪的分辨率取决于对超声波传感器的选择。超声波传感器是一种采用压电效应的传感器,常用材料是压电式陶瓷。由于超声波在空气传播时会有相当的衰减,衰减的程度与频率的高低成正比;而频率高分辨率也高,故短距离测量时应选择高频率的传感器,而长距离测量时应用低频率的传感器。
5、超声波接受传感器
超声探头的核心是其塑料外套或者金属外套中的一块压电晶片。构成晶片的材料可以有许多种。晶片的大小,如直径和厚度也各不相同,因此每个探头的性能是不同的,我们使用前必须预先了解它的性能。超声波传感器的主要性能指标包括:工作频率。工作频率就是压电晶片的共振频率。当加到它两端的交流电压的频率和晶片的共振频率相等时,输出的能量最大,灵敏度也最高。工作温度。由于压电材料的居里点一般比较高,特别时诊断用超声波探头使用功率较小,所以工作温度比较低,可以长时间地工作而不失效。医疗用的超声探头的温度比较高,需要单独的制冷设备。灵敏度。主要取决于制造晶片本身。机电耦合系数大,灵敏度高;反之,灵敏度低。因此超声波接受传感器应该应用集成电路CX20106ACX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路(如图2-3)。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容CS的大小,可以改变接收电路的灵敏度和抗干扰能力。此部分电路在集成芯片上2.5显示单元选择显示单元是计算机系统开发时使用的主要设备之一,它可将计算机的运算结果、中间结果、存储器地址以及存储器、寄存器中的内容显示出来,从而实现人机对话。可以做显示器的有:LED,LCD,CRT等。CRT就是常见的显像管式的显示器。优点是颜色视觉效果好,视角宽,可靠性高,便宜;缺点是体积大耗电多,有微量的X射线辐射。LED就是发光二极管。LED一般适合做大屏幕的显示设备,最突出的有点那就是屏幕尺寸可以不受限制,亮度可以做的很高,其他的如显色性、对比度等都不如CRT显示器。但是考虑到本设计需要显示测量距离,补偿温度以及危险,保持 ,安全等警告信号。所以选择采用128*64液晶模块。2.6语音播报电路选择语音播报语音芯片有很多种,例如WT1380WT588D等。WT1380具有多种报警功能,定时器功能,时钟输出功能,中断输出功能以及语音播报功能。它的语音功能和万年历功能可以同时工作,主频采用RC振荡,副频采用32.768K晶振精确分频。可以计算年、月、日、时、分、秒等信息,并可以将时间信息反馈给主控单片机。因而,WT1380是一款性价比极高的语音时钟芯片。但是本设计不要求芯片有可以计算年、月、日、时、分、秒等信息的复杂功能。所以播报电路采用WT588D系列的集单片机和语音电路于一体的可编辑语音芯片。WT588D系列语音单片机是广州唯创科技有限公司联合台湾华邦共同研发出来的集单片机和语音电路于一体的可编辑语音芯片。功能多音质好应用范围广性能稳定是WT588D系列语音单片机的特长,弥补了以往各类语音芯片应用领域狭小的缺陷,MP3控制模式、按键控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、三线串口控制模式以及三线串口控制I/O口扩展输出模式,让应用人员能将产品投放在几乎可以想象得到的场所。WT588D是一款功能强大的可重复擦除烧写的语音单片机芯片。WT588D让语音芯片不再为控制方式而寻找合适的外围单片机电路,高度集成的单片机技术足于取代复杂的外围控制电路。配套WT-APP上位机操作软件可随意更换WT588D语音单片机芯片的任何一种控制模式,把信息下载到SPI-Flash上即可。软件操作方式简洁易懂,撮合了语音组合技术,大大减少了语音编辑的时间。2.7温度传感器的选择大家知道,声音在不同温度的空气中传播速度是不同的,所以这里要考虑到温度补偿的问题。温度传感器有很多种,例如温度传感器AD590AD590是美国模拟器件公司生产的单片集成两端感温电流源。流过器件的电流(mA)等于器件所处环境的热力学温度(开尔文)度数。AD590的测温范围为-55℃~+150℃。AD590的电源电压范围为4V30V。电源电压可在4V-6V范围变化,电流变化1mA,相当于温度变化1KAD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。输出电阻为710WM。它的精度高。AD590共有IJKLM五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。但是考虑到成本问题我选用TS-18B20数字温度传感器。该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V5.5V无需备用电源测量。温度范围为-55°C+125℃ 。-10°C+85°C范围内精度为±0.5°C
温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。


6、硬件电路的设计 --------------------------------------------

硬件电路的设计主要包括单片机系统及显示电路、语音播报电路、温度补偿电路、无线传输、超声波发射电路和超声波检测接受电路五部分。单片机采用AT89C51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P3.6端口输出超声波换能器所需的40KHz的方波信号,利用外部中断1口检测超声波接受电路输出的返回信号。显示单元部分采用12864液晶模块。3.1 AT89S51单片机的功能及特点AT89S51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4K bytes的课反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度。非易失性存储技术生产,兼容标准MCS51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89S51单片机可以为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。3.1.1主要性能参数Ø 与MCS51产品指令系统完全兼容。Ø 4K字节可以重复擦写Flash闪速存储器。Ø 1000吃擦写周期。Ø 全静态操作:0Hz24Hz。Ø 三级加密程序存储器。Ø 128*8字节内部RAM。Ø 32个可编程I/O口线。Ø 6个中断源。Ø 可编程串行UART通道。Ø 低功耗空闲和掉电模式。3.1.2功能特性概述AT89S51提供以下功能:Ø 4k字节Flash闪速存储器;Ø 128字节内部RAM;Ø 32I/O口线;Ø 两个16位定时器/计时器;Ø 一个5向量两级中断结构;Ø 一个双工串行口通信;Ø 片内振荡器及时钟电路。同时,AT89S51可以降至0Hz的静态逻辑操作,并支持两种软件可选的节点工作模式。空闲方式停止CPU的工作,当允许RAM,定时/计数器,串行口及中断系统继续工作。掉电式保存RAM中的内容,但振荡器停止工作并禁止其他左右部件工作直到下一个硬件复位。
图片5.png

图5

图5,AT89S51单片机 3.2单片机最小系统其作用主要是为了保证单片机系统能正常工作。如图3-2所示,单片机最小系统主要由AT89S51单片机、外部振荡电路、复位电路和+5V电源组成。在外部振荡电路中,单片机的XTAL1XTAL2管脚分别接至由12MHZ晶振和两个30PF电容构成的振荡电路两侧,为电路提供正常的时钟脉冲。在复位电路中,单片机RESET管脚一方面经20 F的电容接至电源正极,实现上电自动复位,另一方面经开关s接电源。其主要功能是把PC初始化为0000H,是单片机从0000H单元开始执行程序,除了进入系统的初始化之外,当由于程序出错或者操作错误使系统处于死锁状态时,为了摆脱困境,也需要按复位键重新启动。因此,复位电路是单片机系统中不可缺少的一部分。
图片6.png


图6

图6,单片机最小系统,单片机测距原理单片机发出超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差tr,然后求出距离SCt÷2  式中的C为超声波波速。限制该系统的最大可测距离存在4个因素:超声波的幅度、反射的质地、反射和入射声波之间的夹角以及接收换能器的灵敏度。接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。为了增加所测量的覆盖范围、减小测量误差,可采用多个超声波换能器分别作为多路超声波发射/接收的设计方法,限于实际需要,本电路只采用单路超声波发射接收。由于超声波属于声波范围,其波速C与温度有关。
7、超声波发射电路
超声波发射电路压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。
图片7.png

7

发射电路主要由反相器74LS04和超声波发射换能器T构成,如图所示,单片机P2.7端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R2R3一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。
8、超声波检测接收电路
超声波接收电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容C16
的大小,可以改变接收电路的灵敏度和抗干扰能力。其电路由图所示。
图片8.png

图8


CX20106A的引脚注释:1IN:超声波信号输入端,该脚的输入阻抗约为40kΩ。2AGC:该脚与GND之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性。增大电阻R或减小C,将使负反馈量增大,放大倍数下降,反之则放大倍数增大。但C的改变会影响到频率特性,一般在实际使用中不必改动,推荐选用参数为R=4.7Ω,C=3.3μF3C0:该脚与GND之间连接检波电容,电容量大为平均值检波,瞬间相应灵敏度低;若容量小,则为峰值检波,瞬间相应灵敏度高,但检波输出的脉冲宽度变动大,易造成误动作,推荐参数为3.3μF4GND:接地端。5RC0:该脚与电源端VCC接入一个电阻,用以设置带通滤波器的中心频率f0,阻值越大,中心频率越低。例如,取R=200kΩ时,fn42kHz,若取R=220kΩ,则中心频率f038kHz6C:该脚与GND之间接入一个积分电容,标准值为330pF,如果该电容取得太大,会使探测距离变短。7OUT:遥控命令输出端,它是集电极开路的输出方式,因此该引脚必须接上一个上拉电阻到电源端,该电阻推荐阻值为22kΩ,没有接收信号时该端输出为高电平,有信号时则会下降。8RC1:电源正极,4.5V5V9、温度补偿电路
DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,测温范围为-55125℃,最大分辨率可达0.0625℃。DS18B20可以直接读出被测温度值,而且采用了一线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。测温电路图3-5所示。DS18B20温度传感器:(1):技术性能描述独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。Ø 测温范围-55℃~+125℃,固有测温分辨率0.5℃。Ø 工作电源:3~5V/DC。Ø 在使用中不需要任何外围元件。Ø 测量结果以9~12位数字量方式串行传送。Ø 不锈钢保护管直径Φ6。Ø 适用于DN15~25DN40~DN250各种介质工业管道和狭小空间设备测温。Ø 标准安装螺纹M10X1M12X1.5G1/2任选。Ø PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
10、显示模块
带中文字库的128X64是一种具有4/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64。内置819216*16点汉字,和12816*8ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×416×16点阵的汉字。12864液晶模块可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
图片9.png


图9

11、语音播报电路
语音播报电路采用WT588D系列的集单片机和语音电路于一体的可编辑语音芯片。功能多音质好应用范围广性能稳定是WT588D系列语音单片机的特长,同时具有MP3控制模式、按键控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、三线串口控制模式以及三线串口控制I/O口扩展输出模式。可控制的语音地址位能达到220个!每个地址位里能加载可组合语音为128段语音。只需通过适当的访问地址就可以实现语音播报,使用方便,语音播报电路设计如图所示。
图片10.png


图  10

11APC240无线通信模块

无线发射与接收电路采用APC240无线通信模块。它是新一代的多通道嵌入式无线数传模块,其可设置众多的频道,发射功率高,而仍然具有较低的功耗。它可以在工业等强干扰的恶劣环境中使用。在任何状态下都可以1次传输256bytes的数据,当设置空中波特率大于串口波特率时,可1次传输无限长度的数据。同时它还提供标准的UART/TTLRS485RS232三种接口1200/2400/4800/9600bps四速率,和三种接口校验方式.采用串口设置模块参数。具有丰富便洁的软件编程设置选项。无线发射与接收电路见
图片11.jpg

图 11

图片12.png

图12


Ø 接口方式:232/485/TTL串口,格式有8N1/8E1/8O1可选;Ø 接受灵敏度高,视距可靠传输距离可达1200m;Ø 采用FSK的方式调制,支持OOK/ASK/MSK调制;Ø 载频433MHz,可定制315M/868M/915M等其他ISM频段;Ø 提供PC机配置软件,可以灵活设置模块的各种参数;Ø 串口速率:4800/9600/19200/38400/57600/115200bps;Ø 空中速率:5K/10K/20K/30K/40K/50K/77K/100K/150K/200K/250Kbps;Ø 功耗和休眠省电模式:功率<100 mw,接收电流<35mA,发射电流<100mA,休眠时电流<12uA;Ø 支持多个字网组群工作模式,网络地址配置相同的模块间才可以相互通讯;Ø 具有中继功能,可选择中继节点进行传输,有效扩大传输距离;Ø 支持透明传输方式和地址传输方式,可以组成点对点、点对多点、对点对多点等无线通信网络;Ø 5V直流供电(可以选择3.3V);3.9.2APC240无线通信模块主要技术指标工作频率:433M        调制方式:FSK发射功率:<20dBm(100mW)接收灵敏度:-119dB发射电流:<35mA接收电流:<100mA休眠电流:<12uA工作信道:32个频段选择数据接口:232/485/TTL串口数据格式:8N1/8E1/8O1串口速率:4800/9600/19200/38400/57600/115200bps空中速率:5K/10K/20K/30K/40K/50K/77K/100K/150K/200K/250Kbps硬件接口:2.0插针/插座通讯距离:0-700米(10dbm,10kbps,可视距离)天线阻抗:50Ω工作温度:-40-85℃供电方式:DC3.3V/5V尺寸:32.3x54.0mm(不包括天线)



点评

硬件很彪!!!!!  详情 回复 发表于 2014-12-12 13:39
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-7-5 15:32 | 显示全部楼层
17、吴鉴鹰单片机实战项目精讲(连载)之驱动12864的滚动文字以及美女图片的显示(一)——程序设计

  1. /******************************************************
  2. *程序:LCD12664液晶显示原理                                                           
  3. *
  4. ** 这一讲的主要内容:  LCD12664液晶显示原理                                                                                       
  5. ** 功能描述:  对滚动汉字和美女图片的LCD12864的显示
  6. ** 输 入:
  7. ** 液晶:Proteus元件库—AMPIRE128X64(无字库)         
  8. ** 内容:显示滚动汉字和美女图片      
  9. ** 输 出:
  10. **         
  11. ** 全局变量:
  12. ** 调用模块:
  13. **
  14. ** 作 者:    吴鉴鹰
  15. ** 日 期:     14.03.12

  16. 备注:有什么错误的地方,欢迎各大烧友指正

  17. O(∩_∩)O~
  18. *******************************************************/

  19. #include<AT89X52.h>
  20. #include<intrins.h>
  21. #include<math.h>
  22. //#include"source.h"
  23. #define uchar unsigned char
  24. #define uint  unsigned int

  25. #define LCD_databus P0 //LCD12864的8位数据口

  26. sbit LCD_RS_OUT=P2^2;         //LCD_RS_OUT为0---命令;1----数据
  27. sbit LCD_RW_OUT=P2^1;         //LCD_RW_OUT为1---写;0---读
  28. sbit LCD_EN_OUT=P2^0;         //使能端
  29. sbit LCD_CS1_OUT=P2^4;         //片选1低电平有效,控制左半屏
  30. sbit LCD_CS2_OUT=P2^3;         //片选1低电平有效,控制右半屏

  31. sbit KK_KEY1_OUT=P3^0;
  32. sbit KK_KEY2_OUT=P3^1;
  33. sbit KK_KEY3_OUT=P3^2;        
  34. sbit KK_KEY4_OUT=P3^3;
  35. sbit KK_KEY5_OUT=P3^4;
  36. sbit KK_KEY6_OUT=P3^5;
  37. sbit KK_KEY7_OUT=P3^6;

  38. //五个按键控制口

  39. void CHECK_busy();

  40. uchar code rrrr_table[]={        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  41. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  42. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xF8,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0x0E,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x87,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
  49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x03,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x0E,0x30,
  50. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x78,0x1C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  51. 0x00,0x3C,0xFC,0x38,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xDE,0x71,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,
  52. 0x00,0x00,0x00,0x00,0x00,0x00,0x79,0x9E,0x79,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x3B,0x9E,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  54. 0x0F,0xF7,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xEF,0x37,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  55. 0x00,0x00,0x00,0x00,0x00,0x03,0xDE,0x7B,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xBC,0xFD,0x80,0x00,0x00,
  56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  57. 0x79,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x1E,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,
  59. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
  60. 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  62. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  63. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
  64. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,
  65. 0x00,0x01,0x9C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0xC0,0x00,0x99,0x00,0x00,0x30,0x00,0x03,0x9A,0x00,0x0C,0x23,0x00,0x00,0x00,0x02,0xC6,
  66. 0x00,0x99,0x80,0x06,0xB4,0x00,0x02,0x21,0x00,0x06,0x33,0x00,0x10,0x80,0x07,0x26,0x00,0x98,0x00,0x12,0x88,0x00,0x02,0x24,0x80,0x06,0x3F,
  67. 0x00,0x1F,0xC0,0x05,0x26,0x00,0x15,0x00,0x1C,0x00,0x00,0x03,0x66,0x70,0x17,0x67,0x00,0x0F,0x00,0x01,0xBE,0x00,0x02,0x00,0x0E,0x70,0x00,
  68. 0x03,0x7E,0x00,0x17,0xE2,0x00,0x07,0x00,0x07,0x00,0x01,0xA0,0x40,0x18,0x00,0x00,0x06,0xCE,0x00,0x0E,0x62,0x00,0x07,0x00,0x03,0xA6,0x00,
  69. 0x9C,0x80,0x12,0x38,0x00,0x06,0x0F,0x80,0x06,0x62,0x00,0x06,0x00,0x03,0x08,0x00,0x84,0x00,0x10,0xF0,0x00,0x0C,0xFC,0x00,0x06,0x22,0x00,
  70. 0x1E,0x00,0x05,0x1C,0x00,0x1E,0x00,0x10,0x40,0x00,0x12,0x24,0x80,0x3E,0x42,0x00,0x1E,0x00,0x01,0x1C,0x00,0x04,0x00,0x10,0x80,0x00,0x02,
  71. 0x44,0xC0,0x3C,0x43,0x00,0x7F,0xF0,0x01,0x0E,0x00,0x04,0x00,0x11,0x10,0x80,0x02,0x64,0x80,0x00,0x03,0x00,0x20,0x00,0x00,0xFA,0x80,0x08,
  72. 0x00,0x13,0x08,0x80,0x02,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x18,0x00,0x00,0x07,0x00,0x02,0x0C,0x00,0x00,0x00,0x00,0x00,
  73. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  76. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  77. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  78. 0x00,0x00};

  79. unsigned char code picture_DIS[][64]={/*--  调入了一幅图像:E:\学习资料\专业课程相关资料\单片机学习\吴鉴鹰单片机项目详细解析\12864项目系列\LCD12864显示\Proteus_12864程序包\12864美女图片显示\图片\1888-11120210532720.bmp  --*/
  80. /*--  调入了一幅图像:C:\Users\Administrator\Desktop\美女图片\1.bmp  --*/
  81. /*--  宽度x高度=128x64  --*/
  82. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  83. 0xF3,0xFB,0xFF,0xFF,0xFF,0xFF,0xC6,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,
  84. 0xFF,0xFF,0xFE,0xF4,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF0,0xF0,
  85. 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
  87. 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x07,
  88. 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
  89. 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3C,
  90. 0x3F,0xFF,0xF3,0xC3,0x03,0x03,0x01,0x00,0x00,0x01,0x00,0x01,0x01,0x07,0x0F,0x0F,
  91. 0xC9,0xFF,0x7F,0x1F,0x1F,0x1F,0x1B,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x19,0x1F,
  92. 0x1F,0x1F,0x1F,0x1F,0x18,0x18,0x18,0x1D,0x1D,0x1D,0x0D,0x0D,0x0F,0x0F,0x0F,0x0F,
  93. 0x0F,0x0F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x88,
  94. 0x88,0x88,0x98,0x18,0x18,0x30,0xF0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,
  95. 0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  96. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  97. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  98. 0xFC,0xFE,0xFF,0xFF,0xFF,0xFC,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xFF,
  99. 0xFF,0x39,0x18,0x18,0x18,0x18,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,
  100. 0x1E,0x06,0x06,0x06,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,
  101. 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
  102. 0x03,0x03,0x2F,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  103. 0xF7,0xF7,0xFA,0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF8,0xF8,0xF0,0xF0,0xF8,0x7C,
  104. 0x78,0x78,0x7C,0x3C,0x3C,0x3C,0x3C,0x3C,0xB8,0xFC,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,
  105. 0xF8,0xF8,0xF8,0xFC,0xFC,0xF8,0xF8,0xF0,0xFC,0xFC,0xE4,0xE8,0x60,0x00,0x00,0x00,
  106. 0x10,0x03,0xEF,0xEF,0xBF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
  107. 0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  108. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  110. 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x7F,
  111. 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x07,0x03,0x0D,0x3F,0x7F,0xDE,0xFF,0xFF,
  112. 0x00,0x1E,0x1E,0x0C,0x00,0x00,0x00,0x00,0x81,0xC3,0xC3,0xC1,0xE3,0xE3,0xB0,0xB0,
  113. 0xF0,0xF8,0xF9,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xE0,
  114. 0x00,0x00,0x00,0x7E,0x73,0xF7,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  115. 0x01,0x0F,0x3E,0x78,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  116. 0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
  117. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  118. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,
  119. 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE1,0xFF,0xFF,0xFE,0xF8,0xF8,0xF0,0xE0,0xE1,0xC1,
  120. 0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  121. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  122. 0x00,0x00,0x00,0x00,0x0F,0xD9,0x9F,0x7F,0xFF,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,
  123. 0x00,0x00,0x00,0x00,0x03,0x1F,0x7C,0x60,0x40,0x40,0xC0,0xE0,0xC0,0xC0,0x80,0x80,
  124. 0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  125. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  126. 0x00,0x00,0x00,0x00,0x00,0xB8,0x0C,0x86,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  127. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  128. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  129. 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F,0x7F,0x7F,0x7F,0xFF,0xFF,
  130. 0x80,0x80,0xC0,0xC0,0xD8,0xEF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFE,0xF0,0xE0,0xE0,0xE0,
  131. 0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
  132. 0x01,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
  133. 0x02,0x02,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x0C,0x0C,0x08,0x08,0x08,0x18,0x18,
  134. 0x18,0x18,0x18,0x18,0x18,0x11,0x73,0x77,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  135. 0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xEF,0xFF,0xEF,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF,
  136. 0xFF,0xFF,0xFF,0xFB,0xFB,0xFB,0xBB,0x3B,0x37,0x3F,0x1F,0x0F,0x00,0x00,0x00,0x00,
  137. 0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFD,
  138. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFF,0xFF,0xFF,
  139. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x63,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xFE,
  140. 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,
  141. 0xFC,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xE8,0xE8,0xE8,0xE8,0xE8,0xE8,0xE8,
  142. 0xE8,0xE8,0xE8,0xFC,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xCF,0xCF,0xCF,0xCF,0xDF,
  143. 0xFF,0xFC,0xFF,0xFF,0xFD,0xE1,0xC0,0xC0,0xC1,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  144. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0xFC,0xF8,0xF0,0xF0,0xF0,
  145. 0xF0,0xF0,0xF0,0xF1,0xF3,0xF3,0xF3,0xF3,0xF3,0xFB,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,


  146. };


  147. unsigned char code picture_DIS_ONE[][64]={
  148. /*--  调入了一幅图像:C:\Users\Administrator\Desktop\美女图片\2.bmp  --*/
  149. /*--  宽度x高度=128x64  --*/
  150. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  151. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  152. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,
  153. 0x80,0xC0,0x40,0x40,0x40,0x40,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  154. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
  155. 0x20,0x20,0x20,0x20,0xE0,0xA0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  156. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  157. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  158. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  159. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0x60,
  160. 0x20,0x20,0x20,0x30,0x10,0x10,0x10,0x18,0x08,0x08,0x0C,0x84,0x86,0x83,0x81,0x80,
  161. 0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x40,0x60,0x20,0x20,0x20,0x20,0xA0,0xA0,0xA0,
  162. 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
  163. 0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFE,0xFC,0xF0,0xF0,0xF0,
  164. 0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xD8,0xB8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,
  165. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  166. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x60,0x20,0xF0,
  167. 0xD0,0x10,0x18,0x08,0x0C,0x04,0x06,0x03,0x01,0xF1,0xA1,0x21,0x60,0x40,0x41,0xC3,
  168. 0x02,0x04,0x04,0xCC,0xFE,0xFE,0xFE,0xFF,0x1F,0xE3,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
  169. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0x7F,
  170. 0xFF,0xDF,0xDD,0xD9,0xD1,0xC0,0xD1,0xC0,0xD0,0xF0,0xF0,0xE1,0xFF,0xFB,0xFF,0xFF,
  171. 0x3F,0x1F,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x07,0x3F,0x7F,0xFF,
  172. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xFC,
  173. 0xF8,0xF8,0xF8,0xFC,0xF8,0xF8,0xF0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,
  174. 0x00,0x08,0x0C,0x04,0x04,0x06,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x1C,0x7B,
  175. 0xFF,0xC0,0xC0,0x00,0x00,0x1C,0xFA,0xCC,0xF0,0xF3,0xFF,0x02,0x0E,0x66,0x36,0x02,
  176. 0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFD,0x0F,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  177. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  178. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,
  179. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
  180. 0xC1,0x63,0x37,0x17,0x8F,0xCF,0x07,0x07,0x03,0x03,0x03,0x03,0xF3,0xF1,0x71,0xE3,
  181. 0x03,0x07,0x07,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0x00,
  182. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xE0,
  183. 0xE0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF8,0x7F,0xFF,0xFF,0xB7,0xF0,0xB0,0x10,0x10,0x10,
  184. 0x10,0x18,0xFE,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  185. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  186. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFB,0xFF,0xFF,0xFF,0x80,
  187. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,
  188. 0xCF,0xF8,0xE0,0xC0,0x9F,0x3F,0x00,0x0E,0x1F,0x1C,0x0C,0x0C,0xF5,0xF0,0xF0,0xE0,
  189. 0x00,0x00,0x00,0x00,0x80,0xD0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,
  190. 0x7C,0x7C,0xFC,0xFE,0x7E,0x7E,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x07,0x07,0x07,0x03,
  191. 0x07,0x3D,0xFF,0x9F,0x01,0x01,0x00,0x00,0x00,0x01,0xCF,0x7D,0x83,0xC7,0xCE,0x8C,
  192. 0xF0,0x80,0x07,0x1F,0xFF,0xFF,0x7F,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  193. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x3F,0xBF,0xBF,0xFF,0xFF,0xBF,
  194. 0xFF,0xFF,0xFF,0xFF,0xDF,0x8F,0x07,0x43,0x87,0xC7,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,
  195. 0xFC,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xF0,0xFD,0x7F,0x3F,0x3F,0xFF,
  196. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,
  197. 0xFC,0xFC,0xFE,0xFF,0xFF,0x7F,0x7F,0x7F,0x3F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,
  198. 0x02,0x03,0x03,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x08,0x08,0x18,0x10,
  199. 0x10,0x30,0x21,0x21,0x20,0x20,0x60,0x40,0xC0,0x80,0x81,0x90,0x18,0x08,0x0C,0x0C,
  200. 0x06,0x02,0x00,0x00,0xC1,0xE3,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,
  201. 0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x03,
  202. 0x03,0x03,0x03,0x83,0x83,0x83,0x81,0x81,0x83,0x83,0x83,0x83,0x83,0x83,0x87,0x8F,
  203. 0xFF,0x77,0x7F,0x7F,0x7F,0x7F,0x5F,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
  204. 0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
  205. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  206. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  207. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,
  208. 0x06,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x07,0x07,0x03,0x03,0x02,0x02,0x02,
  209. 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x01,
  210. 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  211. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  212. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  213. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  214. };

  215. unsigned char code picture_DIS_TWO[][64]={
  216. /*--  调入了一幅图像:C:\Users\Administrator\Desktop\美女图片\3.bmp  --*/
  217. /*--  宽度x高度=128x64  --*/
  218. 0x00,0x00,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  219. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  220. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  221. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  222. 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  223. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  224. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,
  225. 0x07,0x07,0x07,0x07,0x07,0x03,0x07,0x07,0x03,0x07,0x07,0x0F,0x4F,0x1F,0x1F,0x7F,
  226. 0x00,0x00,0x00,0xFF,0xFF,0xFE,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  227. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x2F,0x2F,0xAF,0xEF,0xEF,0x7B,
  228. 0x3F,0x57,0x1B,0x31,0xB3,0xB7,0xF7,0xFF,0xBF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  229. 0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xBF,0xBF,0x87,0x81,0x80,0x80,0x80,0x80,0x80,0x80,
  230. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  231. 0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,
  232. 0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,
  233. 0x00,0x00,0x00,0x00,0x02,0x87,0x80,0xB0,0x80,0xC0,0xC3,0xE0,0xE8,0xF8,0xF8,0xFC,
  234. 0x00,0xC0,0xC0,0x83,0xFF,0xFF,0xC0,0xDF,0xFF,0xBF,0x9F,0x8F,0x87,0x9F,0xFF,0xC7,
  235. 0x81,0x80,0x80,0x83,0x83,0x83,0x01,0x00,0x00,0x70,0xFC,0x6E,0x67,0x03,0x00,0xC2,
  236. 0x04,0x84,0x84,0x80,0x06,0xDA,0xF2,0xFA,0x7B,0x78,0x18,0x18,0x30,0x30,0x30,0x30,
  237. 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x60,0x60,0x60,0x60,0x60,
  238. 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x40,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
  239. 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
  240. 0x00,0x01,0x03,0x07,0x0E,0x0C,0x18,0x30,0x7F,0x67,0xC7,0x87,0x07,0x03,0x63,0xE3,
  241. 0xE3,0xC3,0x63,0xE3,0xE3,0xF3,0xF3,0xE3,0xE3,0xF3,0xF3,0xF3,0xF3,0xF7,0xF7,0xF1,
  242. 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
  243. 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x07,0x03,0x07,0x07,0x07,0x07,0x07,0x0F,
  244. 0x0D,0x0F,0x0F,0x0F,0x0F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  245. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,
  246. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  247. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
  248. 0x00,0x14,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF7,0x1E,0x1D,0xEF,0xE7,
  249. 0x07,0xC3,0xC3,0xC1,0x81,0xF9,0x21,0x39,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFF,
  250. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  251. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  252. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x60,0xE0,0xF0,
  253. 0x70,0x58,0x78,0x18,0x0C,0xAC,0x44,0x07,0x23,0x00,0x00,0x00,0x08,0x00,0x40,0x00,
  254. 0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xD0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
  255. 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x28,
  256. 0x2A,0x00,0x32,0x68,0x3C,0x2E,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xF8,0xF3,0xE7,
  257. 0xE0,0xE3,0xE3,0xE3,0xD9,0xFF,0xFC,0xF8,0xC0,0xE0,0xF0,0xF8,0xFC,0xFF,0xFF,0xFF,
  258. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  259. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,
  260. 0xE0,0xE0,0xF0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFB,
  261. 0xFB,0xFA,0xF8,0xF8,0xFC,0xFF,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,
  262. 0xF3,0xF7,0xFF,0xFD,0xEF,0xE3,0xE1,0xE1,0xE1,0xE1,0xE1,0xE3,0xE3,0xE7,0xE7,0xE7,
  263. 0xEE,0xEE,0xFE,0xFC,0xDC,0xDC,0xD8,0xF8,0xEF,0xCC,0xDD,0xFD,0xFC,0xE0,0xE4,0xF0,
  264. 0xF0,0xF0,0xF8,0xF8,0xFC,0xFF,0xFF,0xDF,0xFF,0xE7,0xCD,0xC7,0xCF,0xCF,0x9F,0xBF,
  265. 0xBF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
  266. 0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xF8,0xF8,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,
  267. 0xF8,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFE,0xFE,0x3F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
  268. 0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,
  269. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  270. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  271. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  272. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0x79,0x30,0x30,0x10,
  273. 0x00,0x10,0x19,0x29,0x5B,0x7F,0x6F,0xEF,0xEF,0xFF,0xFF,0xF3,0xFF,0xFF,0x9F,0xBF,
  274. 0x01,0x01,0x01,0x03,0x87,0xBF,0xBF,0xFF,0xFF,0xFF,0xF7,0xF7,0xF3,0xF3,0xFF,0xFF,
  275. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xA5,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,
  276. 0xFF,0xFF,0xFF,0xF4,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  277. 0xFF,0xFF,0xFF,0xCF,0xCF,0x8F,0xCF,0x8F,0xDF,0x9F,0x9F,0xBF,0xFF,0xDF,0xFF,0xFF,
  278. 0xCF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x13,0x7B,0xFB,0x03,0x03,0x03,
  279. 0x03,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x0F,0x0F,0x0F,0x1F,0x1B,0x03,0x07,0x07,
  280. 0x07,0x07,0x07,0x07,0x0F,0x1F,0x1F,0x0F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3F,0xBE,0xFE,
  281. 0xCE,0xC6,0x8E,0x9E,0x3E,0x6E,0x8E,0xCE,0xDE,0xDC,0xFC,0xFE,0xFC,0xFE,0xFE,0xFE,

  282. };


  283. unsigned char code picture_DIS_THREE[][64]={
  284. /*--  调入了一幅图像:C:\Users\Administrator\Desktop\美女图片\4.bmp  --*/
  285. /*--  宽度x高度=128x64  --*/
  286. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xCF,0x40,0x00,0x00,0x00,0x00,
  287. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  288. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  289. 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
  290. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,
  291. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xDF,0x5F,0x5F,0x5F,0x7F,0x7F,
  292. 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,
  293. 0x38,0x38,0x6E,0x7E,0x00,0x30,0x78,0x20,0x20,0x00,0x00,0xFE,0xFF,0xFF,0xFE,0x00,
  294. 0x60,0xC0,0xC0,0x80,0x00,0x00,0x00,0x80,0x6E,0x07,0x00,0x00,0x06,0x0C,0x18,0x30,
  295. 0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  296. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x16,
  297. 0x1A,0x1B,0x1F,0x17,0x37,0x36,0x24,0x20,0x30,0x31,0x13,0x13,0x13,0x12,0x32,0x32,
  298. 0x22,0x66,0x66,0xC4,0xC4,0xC4,0xF4,0xF4,0x04,0x04,0x04,0x0F,0x0F,0x0C,0x08,0x08,
  299. 0x08,0x08,0x08,0x18,0x18,0x10,0x10,0x30,0x3F,0x3F,0x2F,0x3F,0x7F,0x7F,0x5F,0xDF,
  300. 0x9F,0x8B,0x8F,0x1E,0x1E,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x28,0x28,0x38,
  301. 0x20,0x08,0x7E,0x7E,0x00,0x30,0x78,0x00,0x00,0x00,0x00,0xCE,0xFF,0xFF,0xFF,0x00,
  302. 0x00,0x80,0x81,0x83,0x87,0x86,0xFC,0x97,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  303. 0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
  304. 0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0x60,0x60,0x20,0x30,0x30,0x30,0x10,0x18,
  305. 0x18,0x08,0x08,0x08,0x0C,0x0C,0x0C,0x04,0x04,0x04,0x06,0x06,0x06,0x06,0x02,0x02,
  306. 0x02,0x02,0x06,0x06,0x04,0x0D,0xEB,0xFF,0xFF,0xE6,0xC6,0xCC,0xDC,0xFC,0xFC,0xF8,
  307. 0xF8,0x70,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x80,
  308. 0x80,0x00,0x01,0x01,0x01,0xE3,0xE7,0x26,0x6C,0xD8,0x98,0x70,0xE0,0x00,0x00,0x00,
  309. 0x38,0x38,0x38,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x02,
  310. 0x21,0x29,0x69,0xC9,0xC9,0x89,0x99,0x11,0x11,0x31,0x21,0x61,0x41,0xC1,0x81,0x81,
  311. 0x80,0x00,0x00,0x01,0x01,0x01,0x03,0x82,0xE2,0x02,0x02,0x02,0x02,0x02,0x02,0x03,
  312. 0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  313. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  314. 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x7B,0x0F,0x7F,0x00,0x00,0x00,0x01,0x01,
  315. 0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE1,0x39,0x1F,0x03,0x01,0x01,0x03,0x07,0x07,
  316. 0x07,0x07,0xB7,0x9F,0x9F,0xCF,0xC3,0xC0,0xE0,0xF8,0xFF,0xFE,0xFF,0x3E,0x3C,0xFE,
  317. 0xFE,0xDE,0xDE,0x1E,0x1E,0x7E,0x7E,0x7E,0x36,0x74,0x76,0xF6,0xFE,0xF6,0x00,0x00,
  318. 0x00,0x00,0x00,0xC0,0xDE,0x00,0x01,0x01,0x03,0x03,0x02,0x06,0x04,0x04,0x04,0x14,
  319. 0xDD,0x89,0x09,0x09,0x0B,0x1B,0x1F,0x1F,0x1F,0x16,0x30,0x30,0x20,0x60,0x60,0x40,
  320. 0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  321. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  322. 0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
  323. 0x00,0x00,0x00,0x00,0xFC,0x6F,0x03,0x80,0x80,0xC0,0x40,0x60,0x70,0x30,0x78,0x4C,
  324. 0xC6,0xC3,0x81,0x80,0xFE,0x83,0x81,0xC3,0xC3,0xC7,0xCF,0xCF,0xDF,0xF8,0xE0,0xC3,
  325. 0x43,0xC0,0xC0,0xC0,0xC0,0xCE,0xE7,0xE7,0xE0,0xE0,0xF0,0xFF,0xFF,0xFF,0x3E,0x00,
  326. 0x00,0x40,0xB0,0x1F,0x30,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,
  327. 0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  328. 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x02,0x02,
  329. 0x02,0x02,0x06,0x04,0x04,0x04,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x8C,
  330. 0x8C,0x84,0x84,0xDC,0xFC,0xFC,0xCC,0x0C,0x0E,0x0D,0x0F,0x0C,0x0C,0x0C,0x0E,0x0E,
  331. 0x0A,0x0A,0x0B,0x0B,0x0B,0x09,0x09,0x19,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  332. 0x00,0x00,0x00,0xF1,0xA1,0xE1,0x79,0x7F,0x7F,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x3F,
  333. 0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0xDF,0xDF,0xCF,0xCF,0xCF,0xDF,0xFF,0xCF,0x00,0x00,
  334. 0x30,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,
  335. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  336. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x3E,
  337. 0x7E,0x4E,0x58,0x58,0x58,0x58,0x68,0x6C,0x2C,0x36,0x36,0x13,0x13,0x19,0x09,0x09,
  338. 0x09,0x08,0x0C,0x0C,0x0C,0x04,0x07,0x0C,0x0C,0xF8,0xF8,0x08,0x08,0x08,0x08,0x08,
  339. 0x08,0x08,0x0C,0x0C,0x0C,0x2C,0xFC,0xE4,0xE4,0xE4,0xE4,0xE6,0xE6,0xE2,0xE6,0xE6,
  340. 0xC7,0xC7,0x01,0xB9,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x06,
  341. 0x08,0x0F,0x00,0x0C,0x1F,0x16,0x17,0x97,0x9F,0x9F,0x9F,0xBF,0xFF,0x9F,0x00,0x00,
  342. 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  343. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  344. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  345. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  346. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0x80,0x00,0x00,0x00,0x00,
  347. 0xBC,0x80,0x80,0x80,0xC0,0xFB,0xFF,0xC7,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xDF,
  348. 0x9F,0x07,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,
  349. 0x17,0x17,0x00,0x3C,0x3E,0x0C,0x0F,0x07,0x3F,0x3F,0x7F,0x7F,0xFF,0x3F,0x00,0x00,

  350. };


  351. unsigned char code picture_DIS_FOUR[][64]={
  352. /*--  调入了一幅图像:C:\Users\Administrator\Desktop\美女图片\5.bmp  --*/
  353. /*--  宽度x高度=128x64  --*/
  354. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  355. 0x00,0x00,0x80,0xE0,0x70,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
  356. 0x04,0x0C,0x0C,0x0C,0x08,0x08,0x08,0x08,0x08,0x08,0x18,0x18,0x18,0x18,0x18,0x10,
  357. 0x10,0x10,0x10,0x30,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,
  358. 0x60,0x40,0x40,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
  359. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  360. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  361. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  362. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x38,
  363. 0x1C,0x0E,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x50,
  364. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  365. 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  366. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x0E,0x1C,
  367. 0x78,0xE0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  368. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  369. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  370. 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0x3E,0x07,0x00,0x00,
  371. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF0,0x5F,0x41,0x40,
  372. 0x40,0x40,0x60,0x20,0x20,0x30,0x18,0x18,0x0C,0x06,0x03,0x01,0x01,0x01,0x00,0x00,
  373. 0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x06,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
  374. 0x00,0x00,0xC0,0xE0,0x60,0x30,0x10,0x10,0x18,0x18,0x08,0x18,0x78,0xF8,0xFC,0x0C,
  375. 0x04,0x06,0x07,0x07,0x07,0x87,0xCF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xF8,0xF8,
  376. 0xF8,0xF0,0xF0,0xE0,0xE0,0xE0,0xE0,0x40,0x40,0x40,0x00,0x80,0x80,0x80,0x00,0x00,
  377. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  378. 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x70,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,
  379. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x38,0x0E,0x03,0x00,0x00,0x00,
  380. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  381. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18,0x18,0x0C,
  382. 0x0E,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x60,0x30,0x18,0x18,
  383. 0x0C,0x06,0x06,0x03,0x01,0x01,0x80,0xC0,0xC0,0x41,0x61,0x3B,0x1B,0x0F,0x87,0x07,
  384. 0x07,0x07,0x07,0x03,0x00,0x02,0x03,0x07,0x0F,0x0F,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,
  385. 0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xF8,0xF0,0x80,0x00,0x00,0x00,0x00,
  386. 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x06,0x06,0xF4,
  387. 0x14,0x1C,0x18,0x18,0x10,0x30,0x70,0xE0,0xA0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
  388. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  389. 0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x7C,0x07,0x81,0x80,0x80,0xC0,0xC0,0xE0,0xF0,
  390. 0x10,0x18,0x18,0x0C,0x86,0x86,0xC2,0xC3,0xE3,0x61,0x60,0x60,0x30,0x30,0x1F,0x1F,
  391. 0xDF,0xFF,0x7F,0x1E,0x0E,0x1F,0x1D,0x30,0x60,0xC0,0x80,0x9C,0x3A,0x7F,0x01,0x00,
  392. 0x38,0x18,0x08,0x00,0x00,0x80,0x0C,0x0F,0x0F,0x17,0x1C,0x0E,0x00,0x00,0x80,0x81,
  393. 0xC3,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,
  394. 0x08,0x08,0x08,0x08,0x18,0x18,0x10,0x30,0x30,0x20,0x20,0x20,0x20,0x20,0xC0,0xF7,
  395. 0xFC,0x00,0x00,0x80,0x00,0x00,0x00,0x01,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
  396. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x08,0x08,0x08,
  397. 0x0C,0x0C,0x0C,0x0E,0x07,0x05,0x06,0x06,0x07,0x05,0x05,0x05,0x04,0x07,0x0F,0x0E,
  398. 0x07,0x07,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x80,0x80,0xC0,0xC0,0x60,0x7C,0x0F,
  399. 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x02,0x06,
  400. 0x04,0x0C,0x08,0x18,0x1F,0x3F,0x3F,0x3E,0x7E,0x7C,0x7C,0x7E,0x7F,0x7F,0x7F,0x7F,
  401. 0x7F,0x7F,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x07,0x07,0x03,0x00,0x00,0x00,0x00,
  402. 0x00,0x04,0xEC,0x3C,0x18,0x1C,0x0C,0x04,0x06,0x06,0x02,0x03,0x01,0xF9,0xFF,0x87,
  403. 0xC0,0x78,0x32,0x1B,0x98,0x8A,0x8C,0x84,0x0E,0x0F,0x1E,0x7E,0xF4,0x04,0x04,0x86,
  404. 0xC6,0xC4,0x64,0x34,0x14,0x1E,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
  405. 0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x04,0x04,
  406. 0x04,0x04,0x04,0x06,0x02,0x02,0x02,0x02,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
  407. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  408. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  409. 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  410. 0x01,0x01,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x01,0x03,0x03,0x0F,0x0B,
  411. 0x1B,0x33,0x30,0x23,0x23,0x23,0x23,0x31,0x10,0x18,0x08,0x0C,0x0D,0x06,0x03,0x03,
  412. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  413. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  414. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  415. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  416. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  417. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  418. };

  419. unsigned char code huan[] = {/*--  文字:  欢  --*/
  420. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  421. 0x04,0x24,0x44,0x84,0x64,0x9C,0x40,0x30,0x0F,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
  422. 0x10,0x08,0x06,0x01,0x82,0x4C,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0x80,0x00};

  423. unsigned char code ying[] = {/*--  文字:  迎  --*/
  424. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  425. 0x40,0x40,0x42,0xCC,0x00,0x00,0xFC,0x04,0x02,0x00,0xFC,0x04,0x04,0xFC,0x00,0x00,
  426. 0x00,0x40,0x20,0x1F,0x20,0x40,0x4F,0x44,0x42,0x40,0x7F,0x42,0x44,0x43,0x40,0x00};

  427. unsigned char code guang[] = { /*--  文字:  光  --*/
  428. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  429. 0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x40,0x40,0x00,
  430. 0x80,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00};

  431. unsigned char code ling[] = {/*--  文字:  临  --*/
  432. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  433. 0x00,0xF8,0x00,0x00,0xFF,0x40,0x20,0x18,0x0F,0x18,0x68,0x08,0x08,0x08,0x08,0x00,
  434. 0x00,0x1F,0x00,0x00,0xFF,0x00,0x00,0x7F,0x21,0x21,0x3F,0x21,0x21,0x7F,0x00,0x00,};

  435. unsigned char code wuwu[] = {/*--  文字:  吴  --*/
  436. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  437. 0x00,0x00,0x80,0x9E,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0x00,0x00,0x00,
  438. 0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x44,0x44,0x84,0x84,0x00};

  439. unsigned char code jianjian[] = {/*--  文字:  鉴  --*/
  440. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  441. 0x00,0x00,0x3E,0x00,0x80,0xBF,0x40,0x20,0x58,0x87,0x84,0x0C,0x34,0x04,0x00,0x00,
  442. 0x02,0x42,0x49,0x49,0x5A,0x6A,0x4A,0x7E,0x4A,0x6A,0x5A,0x49,0x49,0x42,0x02,0x00};

  443. unsigned char code yingY[] = {/*--  文字:  鹰  --*/
  444. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  445. 0x00,0x00,0xFE,0x22,0x12,0xFA,0x26,0x12,0xFB,0xAE,0xAA,0xFE,0xAA,0xAA,0x02,0x00,
  446. 0x40,0x30,0x0F,0x40,0x40,0x5E,0x52,0x53,0x56,0x52,0x1A,0x56,0x90,0x70,0x00,0x00};

  447. unsigned char code  MEIMEI[] = {/*--  文字:  美  --*/
  448. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  449. 0x00,0x04,0x24,0x24,0x25,0x26,0x24,0xFC,0x24,0x26,0x25,0x24,0x24,0x04,0x00,0x00,
  450. 0x81,0x89,0x89,0x49,0x49,0x29,0x19,0x0F,0x19,0x29,0x49,0x49,0x89,0x89,0x81,0x00};

  451. unsigned char code NVNV[] ={/*--  文字:  女  --*/
  452. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  453. 0x20,0x20,0x20,0x20,0xA0,0x70,0x2F,0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0x00,
  454. 0x00,0x80,0x80,0x46,0x45,0x28,0x28,0x10,0x18,0x26,0x21,0x40,0x80,0x00,0x00,0x00};

  455. unsigned char code TUTU[] = {/*--  文字:  图  --*/
  456. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  457. 0x00,0xFE,0x02,0x42,0x22,0x32,0x5E,0x92,0x52,0x32,0x12,0x02,0x02,0xFE,0x00,0x00,
  458. 0x00,0xFF,0x42,0x42,0x42,0x51,0x55,0x64,0x69,0x41,0x42,0x42,0x42,0xFF,0x00,0x00};

  459. unsigned char code PIANN[] = {/*--  文字:  片  --*/
  460. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  461. 0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00,
  462. 0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00};

  463. unsigned char code ZHANN[] = {/*--  文字:  展  --*/
  464. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  465. 0x00,0x00,0xFE,0x12,0x92,0x92,0xF2,0x92,0x92,0x92,0xF2,0x92,0x92,0x1E,0x00,0x00,
  466. 0x80,0x60,0x1F,0x04,0x04,0xFC,0x47,0x24,0x0C,0x14,0x27,0x34,0x4C,0x44,0x44,0x00};


  467. unsigned char code yuan[]={/*--  文字:  圆  --*/
  468. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  469. 0x00,0xFF,0x01,0x01,0xDD,0x55,0x55,0x55,0x55,0x55,0xDD,0x01,0x01,0xFF,0x00,0x00,
  470. 0x00,0xFF,0x40,0x40,0x67,0x50,0x48,0x47,0x48,0x50,0x67,0x40,0x40,0xFF,0x00,0x00};

  471. unsigned char code ju[]={/*--  文字:  矩  --*/
  472. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  473. 0xA0,0x90,0x8F,0xF8,0x88,0x88,0x88,0x00,0xFE,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
  474. 0x40,0x20,0x18,0x07,0x02,0x04,0x18,0x00,0x7F,0x42,0x42,0x42,0x42,0x47,0x40,0x00};

  475. unsigned char code xing[]={/*--  文字:  形  --*/
  476. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  477. 0x40,0x42,0x42,0xFE,0x42,0x42,0xFE,0x42,0x42,0x40,0x10,0x88,0xE4,0x47,0x02,0x00,
  478. 0x80,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x84,0x42,0x21,0x10,0x08,0x0E,0x04,0x00};

  479. unsigned char code zhi[]={/*--  文字:  直  --*/
  480. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  481. 0x00,0x04,0x04,0xF4,0x94,0x94,0x9C,0x97,0x94,0x94,0x94,0xF4,0x04,0x04,0x00,0x00,
  482. 0x40,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x40,0x00};

  483. unsigned char code xian[]={/*--  文字:  线  --*/
  484. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  485. 0x40,0x60,0x58,0xC7,0x62,0x00,0x90,0x90,0x90,0xFF,0x90,0x92,0x9C,0x94,0x80,0x00,
  486. 0x20,0x22,0x23,0x12,0x12,0x12,0x20,0x20,0x10,0x13,0x0C,0x14,0x22,0x40,0xF8,0x00};



  487. unsigned char code qing[]={/*--  文字:  请  --*/
  488. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  489. 0x40,0x40,0x20,0xE2,0x04,0x40,0x40,0x54,0xD4,0xBF,0xAA,0xAA,0x20,0x20,0x20,0x00,
  490. 0x00,0x00,0x18,0x0F,0x04,0x02,0x00,0x3F,0x0A,0x0A,0x20,0x7F,0x00,0x00,0x00,0x00};

  491. unsigned char code an[]={/*--  文字:  按  --*/
  492. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  493. 0x00,0x20,0x20,0xFF,0x90,0x00,0x60,0x20,0x20,0xD2,0x14,0x10,0x50,0x30,0x00,0x00,
  494. 0x02,0x02,0x11,0x3F,0x00,0x22,0x22,0x12,0x17,0x09,0x0D,0x13,0x21,0x21,0x01,0x00};

  495. unsigned char code button[]={/*--  文字:  键  --*/
  496. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  497. 0x80,0x40,0x70,0xCE,0x48,0x18,0xF0,0x00,0xA8,0xA8,0xFF,0x54,0x7C,0x10,0x10,0x00,
  498. 0x00,0x02,0x02,0x1F,0x29,0x14,0x0D,0x0B,0x14,0x15,0x1F,0x25,0x24,0x20,0x20,0x00};

  499. unsigned char code xuan[]={/*--  文字:  选  --*/
  500. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  501. 0x80,0x80,0x44,0xC8,0x00,0xA0,0x98,0x90,0x7F,0xC8,0x48,0x48,0x40,0x00,0x00,0x00,
  502. 0x10,0x10,0x0F,0x08,0x08,0x14,0x12,0x11,0x10,0x27,0x28,0x28,0x28,0x26,0x20,0x00};

  503. unsigned char code ze[]={/*--  文字:  择  --*/
  504. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  505. 0x00,0x20,0x20,0xFF,0x50,0x90,0x40,0x2C,0x14,0xD2,0xAA,0xA6,0x40,0x40,0x40,0x00,
  506. 0x02,0x02,0x09,0x1F,0x00,0x04,0x04,0x05,0x05,0x3F,0x02,0x02,0x02,0x02,0x00,0x00};

  507. unsigned char code andsoon[]={/*--  文字:  …  --*/
  508. /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
  509. 0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,
  510. 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00};




  511. /*******************************************************************************************
  512. ** 函数名称:  void delay(uint i)
  513. ** 功能描述:  延时函数  
  514. ** 输 入:    uint i(需要延时的数量)
  515. **         
  516. **        
  517. ** 输 出:
  518. **         
  519. ** 全局变量:
  520. ** 调用模块:
  521. **
  522. ** 作 者:    吴鉴鹰
  523. ** 日 期:     14.03.12
  524. ********************************************************************************************/
  525. void delay(uint i)
  526. {
  527.         while(--i);
  528. }


  529. /*******************************************************************************************
  530. ** 函数名称:  void LCD_COM_WRI(uchar value)
  531. ** 功能描述:  LCD液晶写命令函数  
  532. ** 输 入:    uchar value(向LCD写入的命令)
  533. **         
  534. **        
  535. ** 输 出:
  536. **         
  537. ** 全局变量:
  538. ** 调用模块:
  539. **
  540. ** 作 者:    吴鉴鹰
  541. ** 日 期:     14.03.12
  542. ********************************************************************************************/
  543. void LCD_COM_WRI(uchar value)        //写命令函数
  544. {
  545.    CHECK_busy();                                                //对LCD的每次读写都要读忙
  546.    LCD_RS_OUT=0;                                                         //选择命令
  547.    LCD_RW_OUT=0;                                                         //读操作
  548.    LCD_databus=value;
  549.    LCD_EN_OUT=1;                                                        //LCD_EN_OUT由1----0锁存有效数据
  550.    _nop_();
  551.    _nop_();
  552.    LCD_EN_OUT=0;
  553. }

  554. /*******************************************************************************************
  555. ** 函数名称:  void LCD_DATA_WRI(uchar value)
  556. ** 功能描述:  LCD液晶写数据的函数  
  557. ** 输 入:    uchar value(向LCD写入的数据)
  558. **         
  559. **        
  560. ** 输 出:
  561. **         
  562. ** 全局变量:
  563. ** 调用模块:
  564. **
  565. ** 作 者:    吴鉴鹰
  566. ** 日 期:     14.03.12
  567. ********************************************************************************************/
  568. void LCD_DATA_WRI(uchar value)//写数据函数        
  569. {
  570.    CHECK_busy();
  571.    LCD_RS_OUT=1;                                                 //选择数据
  572.    LCD_RW_OUT=0;        
  573.    LCD_databus=value;
  574.    LCD_EN_OUT=1;                                                //LCD_EN_OUT由1----0锁存有效数据
  575.    _nop_();               
  576.    _nop_();
  577.    LCD_EN_OUT=0;
  578. }

  579. /*******************************************************************************************
  580. ** 函数名称:  void CHECK_busy()
  581. ** 功能描述:  读“忙”函数,判断液晶当前是否忙碌  
  582. ** 输 入:     
  583. **         
  584. **        
  585. ** 输 出:
  586. **         
  587. ** 全局变量:
  588. ** 调用模块:
  589. **
  590. ** 作 者:    吴鉴鹰
  591. ** 日 期:     14.03.12
  592. ********************************************************************************************/
  593. void CHECK_busy()//读“忙”函数-----数据线的最高位DB71则busy               
  594. {
  595.         P0=0x00;
  596.            LCD_RS_OUT=0;  
  597.            LCD_RW_OUT=1;
  598.         LCD_EN_OUT=1;
  599.         while(P0 & 0x80);
  600.         LCD_EN_OUT=0;
  601. }


  602. /*******************************************************************************************
  603. ** 函数名称:  uchar Read_LCD(void)
  604. ** 功能描述:  读LCD数据函数  
  605. ** 输 入:     
  606. **         
  607. **        
  608. ** 输 出:    return value(返回读出的数据)
  609. **         
  610. ** 全局变量:
  611. ** 调用模块:
  612. **
  613. ** 作 者:    吴鉴鹰
  614. ** 日 期:     14.03.12
  615. ********************************************************************************************/
  616. uchar Read_LCD(void)                        //读数据函数
  617. {
  618.         uchar value;
  619.         CHECK_busy();
  620.         LCD_databus=0xFF;                        //先进行一次空读操作
  621.         LCD_RS_OUT=1;
  622.         LCD_RW_OUT=1;
  623.         LCD_EN_OUT=1;
  624.         _nop_();
  625.         _nop_();
  626.         LCD_EN_OUT=0;
  627.         
  628.         LCD_databus=0xFF;                        //读取真正的数据
  629.         LCD_RS_OUT=1;
  630.         LCD_RW_OUT=1;
  631.         LCD_EN_OUT=1;
  632.         value=LCD_databus;
  633.         _nop_();
  634.         _nop_();
  635.         LCD_EN_OUT=0;
  636.         
  637.         return value;
  638. }

  639. /*******************************************************************************************
  640. ** 函数名称:  void CHOOSE_PG(uchar page)
  641. ** 功能描述:  设置“页”LCD12864共8页,一页是8行点阵点
  642. ** 输 入:    uchar page(送入设置的页数)
  643. **         
  644. **        
  645. ** 输 出:   
  646. **         
  647. ** 全局变量:
  648. ** 调用模块:
  649. **
  650. ** 作 者:    吴鉴鹰
  651. ** 日 期:     14.03.12
  652. ********************************************************************************************/
  653. void CHOOSE_PG(uchar page)                //设置“页”LCD12864共8页,一页是8行点阵点        
  654. {
  655.   page=0xb8|page;                                 //页的首地址为0xB8
  656.   LCD_COM_WRI(page);
  657. }

  658. /*******************************************************************************************
  659. ** 函数名称:  void CHOOSE_LINE(uchar startline)
  660. ** 功能描述:  设置显示的起始行
  661. ** 输 入:    uchar startline(送入设置的起始行)
  662. **         
  663. **        
  664. ** 输 出:   
  665. **         
  666. ** 全局变量:
  667. ** 调用模块:
  668. **
  669. ** 作 者:    吴鉴鹰
  670. ** 日 期:     14.03.12
  671. ********************************************************************************************/
  672. void CHOOSE_LINE(uchar startline)  //设置显示的起始行           
  673. {
  674.   startline=0xC0|startline;     //起始行地址为0xC0
  675.   LCD_COM_WRI(startline); //设置从哪行开始:共0--63;一般从0 行开始显示
  676. }


  677. /*******************************************************************************************
  678. ** 函数名称:  void CHOOSE_COLUMN(uchar column)
  679. ** 功能描述:  设置显示的列
  680. ** 输 入:    uchar column(设置显示的列)
  681. **         
  682. **        
  683. ** 输 出:   
  684. **         
  685. ** 全局变量:
  686. ** 调用模块:
  687. **
  688. ** 作 者:    吴鉴鹰
  689. ** 日 期:     14.03.12
  690. ********************************************************************************************/
  691. void CHOOSE_COLUMN(uchar column)        //设置显示的列        
  692. {
  693.   column=column &0x3f;                         //列的最大值为64
  694.   column= 0x40|column;                         //列的首地址为0x40
  695.   LCD_COM_WRI(column);        //规定显示的列的位置
  696. }

  697. /*******************************************************************************************
  698. ** 函数名称:  void SET_ON_Off(uchar onoff)
  699. ** 功能描述:  显示开关函数:0x3E是关显示,0x3F是开显示  
  700. ** 输 入:    uchar onoff(0x3E是关显示,0x3F是开显示)  
  701. **         
  702. **        
  703. ** 输 出:   
  704. **         
  705. ** 全局变量:
  706. ** 调用模块:
  707. **
  708. ** 作 者:    吴鉴鹰
  709. ** 日 期:     14.03.12
  710. ********************************************************************************************/
  711. void SET_ON_Off(uchar onoff)                //显示开关函数:0x3E是关显示,0x3F是开显示   
  712. {
  713.         onoff=0x3e|onoff;                         //onoff:1---开显示;0---关显示
  714.         LCD_COM_WRI(onoff);
  715. }

  716. /*******************************************************************************************
  717. ** 函数名称:  void SEL_SCREN(uchar screen)
  718. ** 功能描述:  LCD选择屏幕  
  719. ** 输 入:    uchar screen(选择屏幕0:全屏  1:左半屏 2:右半屏)  
  720. **         
  721. **        
  722. ** 输 出:   
  723. **         
  724. ** 全局变量:
  725. ** 调用模块:
  726. **
  727. ** 作 者:    吴鉴鹰
  728. ** 日 期:     14.03.12
  729. ********************************************************************************************/
  730. void SEL_SCREN(uchar screen)        //选择屏幕
  731. {                                                  
  732.    switch(screen)
  733.    {
  734.             case 0: LCD_CS1_OUT=0;LCD_CS2_OUT=0;break; //全屏     
  735.      case 1: LCD_CS1_OUT=0;LCD_CS2_OUT=1;break;//左半屏        
  736.      case 2: LCD_CS1_OUT=1;LCD_CS2_OUT=0;break;//右半屏      
  737.      default:break;
  738.    }
  739. }

  740. /*******************************************************************************************
  741. ** 函数名称:  void ClearScreen(uchar screen)
  742. ** 功能描述:  清屏函数  
  743. ** 输 入:    uchar screen(0--全屏;1---左半屏;2---右半屏 )  
  744. **         
  745. **        
  746. ** 输 出:   
  747. **         
  748. ** 全局变量:
  749. ** 调用模块:
  750. **
  751. ** 作 者:    吴鉴鹰
  752. ** 日 期:     14.03.12
  753. ********************************************************************************************/
  754. void ClearScreen(uchar screen)        //清屏函数  
  755. {         
  756.      uchar i,j;
  757.      SEL_SCREN(screen);                //0--全屏;1---左半屏;2---右半屏
  758.          for(i=0;i<8;i++)                         //控制页数0-7,共8页
  759.          {
  760.         CHOOSE_PG(i);
  761.                 CHOOSE_COLUMN(0);
  762.               for(j=0;j<64;j++)           //控制列数0-63,共64列
  763.                   {
  764.           LCD_DATA_WRI(0x00); //写入0,地址指针自加1
  765.               }
  766.      }                                         
  767. }


  768. /*******************************************************************************************
  769. ** 函数名称:  void init_LCD()
  770. ** 功能描述:  LCD的初始化  
  771. ** 输 入:      
  772. **         
  773. **        
  774. ** 输 出:   
  775. **         
  776. ** 全局变量:
  777. ** 调用模块:
  778. **
  779. ** 作 者:    吴鉴鹰
  780. ** 日 期:     14.03.12
  781. ********************************************************************************************/
  782. void init_LCD()                                         //LCD的初始化  
  783. {
  784.         SET_ON_Off(1);                                 //开显示
  785.         SEL_SCREN(0);
  786.         ClearScreen(0);                                //清屏
  787.         CHOOSE_LINE(0);                                 //开始行:0
  788. }

  789. /*******************************************************************************************
  790. ** 函数名称:  void Draw_dots(uchar x,uchar y,uchar color)
  791. ** 功能描述:  画点函数  
  792. ** 输 入:    uchar x,uchar y,uchar color (x:很坐标 y:纵坐标 color:显示的颜色)
  793. **         
  794. **        
  795. ** 输 出:   
  796. **         
  797. ** 全局变量:
  798. ** 调用模块:
  799. **
  800. ** 作 者:    吴鉴鹰
  801. ** 日 期:     14.03.12
  802. ********************************************************************************************/
  803. void Draw_dots(uchar x,uchar y,uchar color)
  804. {
  805.         uchar x_byte;
  806.         uchar x_bit;
  807.         uchar Temp_data;                //暂时存放从LCD读出的数据
  808.         x_byte=(y>>3);                  //计算出该点属于哪个字节
  809.         x_bit=y-(x_byte<<3);        //属于字节的哪一位

  810.         
  811.         if(x>63)                                //x>63则显示在右半屏
  812.         {
  813.                 SEL_SCREN(2);
  814.                 x=x-64;
  815.         }
  816.         else                                        //显示在左半屏
  817.         {
  818.                 SEL_SCREN(1);
  819.         }
  820.         CHOOSE_PG(x_byte);                //设置行地址
  821.         CHOOSE_COLUMN(x);                        //设置列地址
  822.          Temp_data=Read_LCD();        //先读出没打点前LCD中的数据
  823.         switch(color)
  824.         {
  825.                 case 0x01 : Temp_data &= ~(1<<x_bit);break;        //擦除
  826.                 case 0x02 : Temp_data ^= (1<<x_bit); break;        //反白
  827.                 case 0x03 : Temp_data |= (1<<x_bit); break;        //画点
  828.                 default : break;
  829.         }
  830.         
  831.         CHOOSE_PG(x_byte);
  832.         CHOOSE_COLUMN(x);
  833.         LCD_DATA_WRI(Temp_data);        //将处理后的数据送到LCD中显示
  834.         
  835. }


  836. /*******************************************************************************************
  837. ** 函数名称:  void Draw_line(unsigned char x1,y1,x2,y2)
  838. ** 功能描述:  两点间画直线:x1<x2<127,y1<y2<64  
  839. ** 输 入:   unsigned char x1,y1,x2,y2(两点的坐标)  
  840. **         
  841. **        
  842. ** 输 出:   
  843. **         
  844. ** 全局变量:
  845. ** 调用模块:
  846. **
  847. ** 作 者:    吴鉴鹰
  848. ** 日 期:     14.03.12
  849. ********************************************************************************************/                    
  850. void Draw_line(unsigned char x1,y1,x2,y2)
  851. {
  852.         unsigned char i;        
  853.         for(i=x1;i<x2+1;i++)        
  854.                 Draw_dots(i,(y2-y1)*(i-x1)/(x2-x1)+y1,2);
  855. }

  856. /*******************************************************************************************
  857. ** 函数名称:  void Draw_circle(unsigned char x,y,r)
  858. ** 功能描述:  画圆函数  
  859. ** 输 入:    画圆:(x,y)为圆心,r为半径
  860. **         
  861. **        
  862. ** 输 出:   
  863. **         
  864. ** 全局变量:
  865. ** 调用模块:
  866. **
  867. ** 作 者:    吴鉴鹰
  868. ** 日 期:     14.03.12
  869. ********************************************************************************************/
  870. void Draw_circle(unsigned char x,y,r)
  871. {
  872.         unsigned char i;        
  873.         for(i=x-r;i<x+r+1;i++)
  874.         {
  875.                 Draw_dots(i,y-sqrt(r*r-(x-i)*(x-i)),2);               
  876.                 Draw_dots(i,y+sqrt(r*r-(x-i)*(x-i)),2);               
  877.         }
  878. }

  879. /*******************************************************************************************
  880. ** 函数名称:  void Draw_retic(uchar x1,uchar y1,uchar x2,uchar y2)
  881. ** 功能描述:  画矩形
  882. ** 输 入:    uchar x1,uchar y1,uchar x2,uchar y2 (x1,y1为左上角坐标,x2,y2为右下角坐标)
  883. **         
  884. **        
  885. ** 输 出:   
  886. **         
  887. ** 全局变量:
  888. ** 调用模块:
  889. **
  890. ** 作 者:    吴鉴鹰
  891. ** 日 期:     14.03.12
  892. ********************************************************************************************/
  893. void Draw_retic(uchar x1,uchar y1,uchar x2,uchar y2)//画正方形,x1,y1为左上角坐标,x2,y2为右下角坐标
  894. {
  895.         uchar i;
  896.         for(i=0;i<=x2-x1;i++)
  897.         {  
  898.                 Draw_dots(x1+i,y1,2);  
  899.                 Draw_dots(x1+i,y2,2);  
  900.         }
  901.         for(i=0;i<=y2-y1;i++)
  902.         {  
  903.                 Draw_dots(x1,y1+i,2);  
  904.                 Draw_dots(x2,y1+i,2);  
  905.         }
  906. }


  907. /*******************************************************************************************
  908. ** 函数名称:  void Display_ASCII(uchar screen,uchar page,uchar column,uchar *p)
  909. ** 功能描述:  显示开关函数:0x3E是关显示,0x3F是开显示  
  910. ** 输 入:    uchar screen,uchar page,uchar column,uchar *p(屏数,页数,还有显示的数组首地址)  
  911. **         
  912. **        
  913. ** 输 出:   
  914. **         
  915. ** 全局变量:
  916. ** 调用模块:
  917. **
  918. ** 作 者:    吴鉴鹰
  919. ** 日 期:     14.03.12
  920. ********************************************************************************************/
  921. void Display_ASCII(uchar screen,uchar page,uchar column,uchar *p)
  922. {
  923.         uchar i;
  924.         SEL_SCREN(screen);
  925.         CHOOSE_PG(page);
  926.         CHOOSE_COLUMN(column);
  927.         for(i=0;i<8;i++)                        //显示字符上半部分:8*8
  928.         {
  929.                 LCD_DATA_WRI(p[i]);
  930.         }
  931.         CHOOSE_PG(page+1);                        //显示字符下半部分:8*8
  932.         CHOOSE_COLUMN(column);
  933.         for(i=0;i<8;i++)
  934.         {
  935.                 LCD_DATA_WRI(p[i+8]);
  936.         }
  937. }

  938. /*******************************************************************************************
  939. ** 函数名称:  void Display_HZ(uchar screen,uchar page,uchar column,uchar *p)
  940. ** 功能描述:  显示汉字  
  941. ** 输 入:    uchar screen,uchar page,uchar column,uchar *p(屏数,页数,还有显示的数组首地址)  
  942. **         
  943. **        
  944. ** 输 出:   
  945. **         
  946. ** 全局变量:
  947. ** 调用模块:
  948. **
  949. ** 作 者:    吴鉴鹰
  950. ** 日 期:     14.03.12
  951. ********************************************************************************************/  
  952. void DIS_HZ_HANSHU(uchar screen,uchar page,uchar column,uchar *p)
  953. {
  954.         uchar i;
  955.         SEL_SCREN(screen);
  956.         CHOOSE_PG(page);                                        //写上半页:16*8
  957.         CHOOSE_COLUMN(column*16);                         //控制列
  958.         for(i=0;i<16;i++)                                  //控制16列的数据输出
  959.         {
  960.                 LCD_DATA_WRI(p[i]);                 //汉字的上半部分
  961.         }
  962.         CHOOSE_PG(page+1);                                //写下半页:16*8
  963.         CHOOSE_COLUMN(column*16);                        //控制列
  964.     for(i=0;i<16;i++)                                //控制16列的数据输出
  965.         {
  966.                 LCD_DATA_WRI(p[i+16]);        //汉字的下半部分
  967.         }
  968. }


  969. /*******************************************************************************************
  970. ** 函数名称:  void Display_picture(uchar a[][64])
  971. ** 功能描述:  显示图片的函数  
  972. ** 输 入:    uchar a[][64](存放图片的数组)  
  973. **         
  974. **        
  975. ** 输 出:   
  976. **         
  977. ** 全局变量:
  978. ** 调用模块:
  979. **
  980. ** 作 者:    吴鉴鹰
  981. ** 日 期:     14.03.12
  982. ********************************************************************************************/
  983. void Display_picture(uchar a[][64])//显示图形—128*64大小
  984. {
  985.         uchar i,j;
  986.         
  987.         for(j=0;j<8;j++)
  988.         {        
  989.                 SEL_SCREN(1);
  990.                 CHOOSE_PG(j);
  991.                 CHOOSE_COLUMN(0);
  992.                 for(i=0;i<64;i++)
  993.                 {
  994.                         LCD_DATA_WRI(a[2*j][i]);//每隔一行取一次数组中的数据
  995.                 }
  996.                 SEL_SCREN(2);
  997.                 CHOOSE_PG(j);
  998.                 CHOOSE_COLUMN(0);
  999.                 for(i=0;i<64;i++)
  1000.                 {
  1001.                         LCD_DATA_WRI(a[2*j+1][i]);//每隔一行取一次数组中的数据
  1002.                 }        
  1003.         }        
  1004. }


  1005. /*******************************************************************************************
  1006. ** 函数名称:  void key_scan(void)
  1007. ** 功能描述:  按键函数  
  1008. ** 输 入:     
  1009. **         
  1010. **        
  1011. ** 输 出:   
  1012. **         
  1013. ** 全局变量:
  1014. ** 调用模块:
  1015. **
  1016. ** 作 者:    吴鉴鹰
  1017. ** 日 期:     14.03.12
  1018. ********************************************************************************************/
  1019. void key_scan(void)
  1020. {
  1021.         uchar i;
  1022.         if(KK_KEY1_OUT==0)                                                //按键1按下,显示汉字
  1023.         {
  1024.                 delay(5000);
  1025.                 if(KK_KEY1_OUT==0)
  1026.                 {
  1027.                         while(!KK_KEY1_OUT);
  1028.                         ClearScreen(0);
  1029.                         for(i=8;i>0;i--)                  //滚屏
  1030.                         {
  1031.                                 DIS_HZ_HANSHU(1,0+i,2,huan);
  1032.                                 DIS_HZ_HANSHU(1,0+i,3,ying);
  1033.                                 DIS_HZ_HANSHU(2,0+i,0,guang);
  1034.                                 DIS_HZ_HANSHU(2,0+i,1,ling);
  1035.                                 DIS_HZ_HANSHU(1,2+i,0,wuwu);
  1036.                                 DIS_HZ_HANSHU(1,2+i,1,jianjian);
  1037.                                 DIS_HZ_HANSHU(1,2+i,2,yingY);
  1038.                                 DIS_HZ_HANSHU(1,2+i,3,MEIMEI);
  1039.                                 DIS_HZ_HANSHU(2,2+i,0,NVNV);
  1040.                                 DIS_HZ_HANSHU(2,2+i,1,TUTU);
  1041.                                 DIS_HZ_HANSHU(2,2+i,2,PIANN);
  1042.                                 DIS_HZ_HANSHU(2,2+i,3,ZHANN);
  1043.                                 delay(30000);
  1044.                                 ClearScreen(0);
  1045.                         }
  1046.                         DIS_HZ_HANSHU(1,0+i,2,huan);
  1047.                         DIS_HZ_HANSHU(1,0+i,3,ying);
  1048.                         DIS_HZ_HANSHU(2,0+i,0,guang);
  1049.                         DIS_HZ_HANSHU(2,0+i,1,ling);
  1050.                         DIS_HZ_HANSHU(1,2+i,0,wuwu);
  1051.                         DIS_HZ_HANSHU(1,2+i,1,jianjian);
  1052.                         DIS_HZ_HANSHU(1,2+i,2,yingY);
  1053.                         DIS_HZ_HANSHU(1,2+i,3,MEIMEI);
  1054.                         DIS_HZ_HANSHU(2,2+i,0,NVNV);
  1055.                         DIS_HZ_HANSHU(2,2+i,1,TUTU);
  1056.                         DIS_HZ_HANSHU(2,2+i,2,PIANN);
  1057.                         DIS_HZ_HANSHU(2,2+i,3,ZHANN);                        
  1058.                 }
  1059.         }

  1060.         if(KK_KEY2_OUT==0)                                //按键2按下,显示图片---美女图片1
  1061.         {
  1062.                 delay(5000);
  1063.                 if(KK_KEY2_OUT==0)
  1064.                 {
  1065.                         while(!KK_KEY2_OUT);
  1066.                         ClearScreen(0);
  1067.                         Display_picture(picture_DIS);
  1068.                 }
  1069.         }

  1070.         if(KK_KEY3_OUT==0)                                //按键2按下,显示图片---美女图片2
  1071.         {
  1072.                 delay(5000);
  1073.                 if(KK_KEY3_OUT==0)
  1074.                 {
  1075.                         while(!KK_KEY3_OUT);
  1076.                         ClearScreen(0);
  1077.                         Display_picture(picture_DIS_ONE);
  1078.                 }
  1079.         }

  1080.         if(KK_KEY4_OUT==0)                                //按键2按下,显示图片---美女图片3
  1081.         {
  1082.                 delay(5000);
  1083.                 if(KK_KEY4_OUT==0)
  1084.                 {
  1085.                         while(!KK_KEY4_OUT);
  1086.                         ClearScreen(0);
  1087.                         Display_picture(picture_DIS_TWO);
  1088.                 }
  1089.         }

  1090.     if(KK_KEY5_OUT==0)                                //按键2按下,显示图片---美女图片14
  1091.         {
  1092.                 delay(5000);
  1093.                 if(KK_KEY5_OUT==0)
  1094.                 {
  1095.                         while(!KK_KEY5_OUT);
  1096.                         ClearScreen(0);
  1097.                         Display_picture(picture_DIS_THREE);
  1098.                 }
  1099.         }

  1100.         if(KK_KEY6_OUT==0)                                //按键2按下,显示图片---美女图片5
  1101.         {
  1102.                 delay(5000);
  1103.                 if(KK_KEY6_OUT==0)
  1104.                 {
  1105.                         while(!KK_KEY6_OUT);
  1106.                         ClearScreen(0);
  1107.                         Display_picture(picture_DIS_FOUR);
  1108.                 }
  1109.         }
  1110.         if(KK_KEY7_OUT==0)                                //按键3按下,显示几何图形
  1111.         {
  1112.                 delay(5000);
  1113.                 if(KK_KEY7_OUT==0)
  1114.                 {
  1115.                         while(!KK_KEY7_OUT);
  1116.                         ClearScreen(0);
  1117.                         DIS_HZ_HANSHU(1,0,2,zhi);
  1118.                         DIS_HZ_HANSHU(1,0,3,xian);
  1119.                
  1120.                         DIS_HZ_HANSHU(2,2,1,ju);
  1121.                         DIS_HZ_HANSHU(2,2,2,xing);
  1122.                
  1123.                         DIS_HZ_HANSHU(1,4,1,yuan);
  1124.                
  1125.                         Draw_line(0,0,127,63);
  1126.                         Draw_retic(70,0,120,33);
  1127.                         Draw_circle(30,40,25);
  1128.                 }
  1129.         }
  1130. }


  1131. /*******************************************************************************************
  1132. ** 函数名称:  void main()
  1133. ** 功能描述:  完成滚动汉字和美女图片的显示  
  1134. ** 输 入:      
  1135. **         
  1136. **        
  1137. ** 输 出:   
  1138. **         
  1139. ** 全局变量:
  1140. ** 调用模块:
  1141. **
  1142. ** 作 者:    吴鉴鹰
  1143. ** 日 期:     14.03.12
  1144. ********************************************************************************************/
  1145. void main()
  1146. {  
  1147.            init_LCD();                                        //初始12864  
  1148.            ClearScreen(0);                                //清屏
  1149.         //Display_picture(rrrr_table);
  1150.         //while(1);
  1151.            CHOOSE_LINE(0);                                //显示开始行  
  1152.         DIS_HZ_HANSHU(1,2,1,qing);
  1153.         DIS_HZ_HANSHU(1,2,2,an);
  1154.         DIS_HZ_HANSHU(1,2,3,button);
  1155.         DIS_HZ_HANSHU(2,2,0,xuan);
  1156.         DIS_HZ_HANSHU(2,2,1,ze);
  1157.         DIS_HZ_HANSHU(2,2,2,andsoon);        //上电显示:“请按键选择…”
  1158.         while(1)
  1159.         {        
  1160.                 key_scan();
  1161.         }
  1162. }
复制代码



为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2014-6-25 15:35 | 显示全部楼层
表示很崇拜。。。

点评

最近比较忙,所以没有持续更新!近期会更新完成的。  详情 回复 发表于 2014-10-1 23:16


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-13 13:10 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2014-6-13 13:12 编辑

6、吴鉴鹰单片机实战项目精讲(连载)之电子秤的设计 ——软件设计


  1. /*************************************************************************
  2. ** 函数名称:   _Low_level_init  
  3. ** 功能描述:   这个函数的主要功能是对单片机的端口和串行通讯的波特率、通信方式等作一系列的规定很处理  
  4.                                                          
  5. ** 输 入:
  6. **         
  7. **         
  8. ** 输 出:
  9. ** 全局变量:
  10. ** 调用模块:
  11. **
  12. ** 作 者:    吴鉴鹰
  13. ** 日 期:    14.03.2
  14. *******************************************************************************/
  15. //Low_level_init.c
  16. #include<ina90.h>
  17. #include<io8585.h>
  18. int  _Low_level_init(void)
  19. {
  20.    UBRR = 12;
  21.    UCR = 0X08;
  22.    GIMSK = 0X40;
  23.    _SEI();
  24.    return 1;
  25. }
  26.    
  27.    
  28. /*主函数*/  
  29. #include<pgmspace.h>
  30. #include<stdio.h>
  31. #include<stdlib.h>
  32. #include "io8515.h"
  33. #include "serial.h"
  34. #include "gpr.h"
  35. #include "kb.h"
  36. /***************************************************************************************
  37. ** 函数名称:   main  
  38. ** 功能描述:   串口的初始化、初始化键盘的收发  
  39.                                                          
  40. ** 输 入:
  41. **         
  42. **         
  43. ** 输 出:
  44. ** 全局变量:
  45. ** 调用模块:
  46. **
  47. ** 作 者:    吴鉴鹰
  48. ** 日 期:    14.03.2
  49. *****************************************************************************************/
  50. void main()
  51. {
  52.    unsigned char key;
  53.    init_usart();                    //串口的初始化程序
  54.    init_kb();                       //初始化键盘的收发
  55.    while(1)
  56.    {
  57.       key = getchar();
  58.    putchar(key);
  59.    delay(100);                   //延时子程序
  60.    }
  61. }

  62. /*键盘处理子程序*/
  63. #include<pgmspace.h>
  64. #include "kb.h"
  65. #include "serial.h"
  66. #include "qpr.h"
  67. #include "scancodes.h"
  68. #define BUFF_SIZE 64
  69. unsigned char dege,bitcount;        //0 :符号,1 :正号
  70. unsigned char kb_buffer[BUFFER_SIZE];
  71. unsigned char *inpt,*outpt;
  72. unsigned char buffercnt;
  73. /******************************************************************************
  74. ** 函数名称:   init_kb  
  75. ** 功能描述:   初始化键盘  
  76.                                                          
  77. ** 输 入:
  78. **         
  79. **         
  80. ** 输 出:
  81. ** 全局变量:
  82. ** 调用模块:
  83. **
  84. ** 作 者:    吴鉴鹰
  85. ** 日 期:    14.03.2
  86. **********************************************************************************/
  87. void init_kb(void)
  88. {
  89.     inpt = kb_buffer;                 //初始化缓冲区        
  90. outpt = kb_buffer;
  91. buffcnt = 0;
  92. MCUCR = 2;                       //INT0中断,下降沿触发
  93. edge = 0;                        //0:下降沿,1 :上升沿
  94. bitcount = 11;
  95. }
  96. /**********************************************************************************
  97. ** 函数名称:   INT0_interrupt  
  98. ** 功能描述:   按键接收中断函数  
  99.                                                          
  100. ** 输 入:
  101. **         
  102. **         
  103. ** 输 出:
  104. ** 全局变量:
  105. ** 调用模块:
  106. **
  107. ** 作 者:    吴鉴鹰
  108. ** 日 期:    14.03.2
  109. **************************************************************************************/
  110. interrupt  [INT0_vect]  void INT0_interrupt(void)
  111. {
  112.    static unsigned char data;            //保持接收扫描码的状态
  113.    if(!edge)                             //下降沿触发中断服务程序
  114.    {
  115.       if(bitcount < 11 && bitcount > 2)  //3~10位是数据
  116.    {                                  //删除起始位和停止位
  117.      data = (data >> 1);            
  118.   if(PIND & 8)
  119.   data = data | 0x80;             //如果为“1”则存储         
  120.    }
  121.    MCUCR = 3;                         //设置该寄存器是为了用上升沿触发中断
  122.    edge = 1;
  123.    }
  124.    else
  125.    {
  126.      MCUCR = 2;
  127.   edge = 0;
  128.   if(--bitcount == 0)               //该判断是接收到所有的中断的时候
  129.   {
  130.     decode(data);
  131.     bitcount = 11;
  132.   }
  133.    }
  134. }
  135. /*********************************************************************************
  136. ** 函数名称:   decode  
  137. ** 功能描述:   键盘按键码解码函数
  138.                                                          
  139. ** 输 入:
  140. **         
  141. **         
  142. ** 输 出:
  143. ** 全局变量:
  144. ** 调用模块:
  145. **
  146. ** 作 者:    吴鉴鹰
  147. ** 日 期:    14.03.2
  148. ************************************************************************************/
  149. void decode(unsigned char sc)
  150. {
  151.    static unsigned char is_up = 0,shift = 0,mode = 0;
  152.    unsigned char i;
  153.    if(!is_up)                          //最后一位数据的接收
  154.    {
  155.       switch(sc)
  156.    {
  157.      case 0xf0: is_up = 1;break;    //确定完成了的按键
  158.   case 0x12: shift = 1;break;    //左边的shift键
  159.   case 0x59: shift = 1;break;    //右边的shift键
  160.   case 0x05:                     //F1键
  161.   if(mode == 0)
  162.   {
  163.     mode = 1;                    //进入按键扫描模式
  164.   }
  165.   if(mode == 2)                  //离开按键扫描模式
  166.   {
  167.     mode = 3;
  168.   }
  169.   break;
  170.   default:
  171.   if(mode == 0 || mode == 3)     //ASCΙΙ模式
  172.   {
  173.     if(!shift)                   //如果没有shift键被按下
  174.     {                            //查表
  175.       for(i=0;unshifted[0] != sc && unshifted[0];i++);
  176.    if(unshifted[0] == sc)
  177.    {
  178.       put_kbuffer(unshifted[1]);
  179.    }
  180.     }
  181.     else
  182.     {                           //如果shift键被按下
  183.          for(i = 0;shifted[0] != sc && shifted[0];i ++);
  184.       if(shifted[0] == sc)
  185.       {
  186.          put_kbbuffer(shifted[1]);
  187.       }
  188.     }
  189.   }
  190.   else
  191.   {
  192.     print_hexbyte(sc);          //扫描键盘吗模式
  193.     put_kbbuffer(' ');          //显示模式
  194.     put_kbbuffer(' ');
  195.   }
  196.   break;
  197.    }
  198.    }
  199.    else
  200.    {
  201.       is_up = 0;                      //2个0xf0在一列中不允许的
  202.    switch(sc)
  203.    {
  204.        case 0x12:shift = 0;break;  //左shift
  205.     case 0x59:shift = 0;break;  //右shift
  206.     case 0x05:                  //F1
  207.     {
  208.       if(mode == 1)
  209.    {
  210.      mode = 2;
  211.    }
  212.    if(mode == 3)
  213.    {
  214.      mode = 0;
  215.    }
  216.    break;
  217.    case 0x06:                //F2
  218.    clr();
  219.    break;
  220.     }
  221.    }
  222.    }
  223. }
  224. /****************************************************************************************
  225. ** 函数名称:   put_kbbuff  
  226. ** 功能描述:   键盘输入字符的函数
  227.                                                          
  228. ** 输 入:
  229. **         
  230. **         
  231. ** 输 出:
  232. ** 全局变量:
  233. ** 调用模块:
  234. **
  235. ** 作 者:    吴鉴鹰
  236. ** 日 期:    14.03.2
  237. ****************************************************************************************/
  238. void put_kbbuff(unsigned char c)
  239. {
  240.      if(buffcnt < BUFF_SIZE)                  //若缓冲区为空
  241.      {
  242.        *inpt = C;                          //在缓冲区中输入一个字符            
  243.     inpt++;                             //指针加1
  244.     buffcnt ++;
  245.     if(inpt >= kb_buffer + BUFF_SIZE)   //指针判断
  246.     {
  247.        inpt = kb_buffer;
  248.     }
  249.   }   
  250. }
  251. /*****************************************************************************************
  252. ** 函数名称:   getchar  
  253. ** 功能描述:   读取键盘输入字符的函数
  254.                                                          
  255. ** 输 入:
  256. **         
  257. **         
  258. ** 输 出:
  259. ** 全局变量:
  260. ** 调用模块:
  261. **
  262. ** 作 者:    吴鉴鹰
  263. ** 日 期:    14.03.2
  264. ****************************************************************************************/
  265. int  getchar(void)
  266. {
  267.    int byte;
  268.    while(buffcnt == 0);                     //等待数据
  269.    byte = *outpt;                           //取数据
  270.    outpt++;                                 //指针加1
  271.    if(outpt >= kb_buffer + BUFFER_SIZE)     //指针比较
  272.    outpt = kb_buffer;
  273.    buffcnt--;                               //缓冲区减去1
  274.    return byte;
  275. }
复制代码



为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

3364

TA的帖子

420

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2014-6-10 16:17 | 显示全部楼层
期待ing


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-10 16:36 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2015-4-27 08:17 编辑

2、吴鉴鹰单片机实战项目精讲(连载)之摇摇棒的制作

相关的硬件原理图请点击下载: 摇摇棒原理图设计.pdf (324.58 KB, 下载次数: 338)
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

84

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2014-6-10 20:02 | 显示全部楼层
跟老师好好学习下


回复

使用道具 举报

1268

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2014-6-10 20:10 | 显示全部楼层
感谢分享。


回复

使用道具 举报

2945

TA的帖子

0

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2014-6-10 21:28 | 显示全部楼层
呵呵,在这里看到楼主了

点评

哈哈,多多交流啊!!!  详情 回复 发表于 2014-6-11 08:10
昵称:灰小子


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-11 08:10 | 显示全部楼层
exiao 发表于 2014-6-10 21:28
呵呵,在这里看到楼主了

哈哈,多多交流啊!!!
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

443

TA的帖子

43

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-6-11 09:04 | 显示全部楼层
乘128,乘2这种运算,可以用移位运算替代
TH0 = -5000/256;
TL0 = -5000%256;
这种赋值,何不先算好,再加条注释

点评

这只是让读者知道这个数据是怎么来的,如果要求运算速度很高的话,肯定就这样做了!  详情 回复 发表于 2014-6-11 09:18
一心一意,精益求精


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-11 09:18 | 显示全部楼层
Laspide 发表于 2014-6-11 09:04
乘128,乘2这种运算,可以用移位运算替代
TH0 = -5000/256;
TL0 = -5000%256;

这只是让读者知道这个数据是怎么来的,如果要求运算速度很高的话,肯定就这样做了!
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-11 09:35 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2014-6-17 09:49 编辑

3.吴鉴鹰单片机实战项目精讲(连载)之燃气报警器的制作——硬件设计
相关的原理图请点击下载: 吴鉴鹰便携式可燃性气体报警器设计原理图.pdf (559.2 KB, 下载次数: 324)
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-11 11:15 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2014-6-13 08:57 编辑

4.吴鉴鹰单片机实战项目精讲(连载)之燃气报警器的制作——软件设计


  1. /******************************************************
  2. *程序:可燃性气体报警器                                                     
  3. ** 这一讲的主要内容: 可燃性气体报警器的设计和制作                                                                                 
  4. ** 功能描述:  
  5. ** 输 入:         
  6. ** 内容:     
  7. ** 输 出:
  8. **         
  9. ** 全局变量:
  10. ** 调用模块:
  11. **
  12. ** 作 者:    吴鉴鹰
  13. ** 日 期:     14.02.22

  14. 备注:有什么错误的地方,欢迎各大烧友指正

  15. O(∩_∩)O~
  16. *******************************************************/
  17. #include <reg51.h>        // 引用标准库的头文件
  18. #include <intrins.h>
  19. #include <stdio.h>
  20. #define uchar unsigned char
  21. #define uint unsigned int

  22. sbit DIN = P2^0;     // 串行数据输入
  23. sbit CLK = P2^1;     // 串行时钟
  24. sbit LOAD = P2^2;     // 显示数据锁存控制
  25. sbit SOUND = P1^5;     //用来进行蜂鸣器的报警
  26. sbit ST=P3^6;  //启动信号
  27. sbit EOC=P3^3;  //转换结束信号,连到外部中断1口,转换结束后进入外部中断
  28. sbit OE=P3^7;  //输出使能
  29. #define NoOp   0x00           // 空操作寄存器
  30. #define Digit0 0x01           // 数码管1寄存器
  31. #define Digit1 0x02           // 数码管2寄存器
  32. #define Digit2 0x03           // 数码管3寄存器
  33. #define Digit3 0x04           // 数码管4寄存器
  34. #define Digit4 0x05           // 数码管5寄存器
  35. #define Digit5 0x06           // 数码管6寄存器
  36. #define Digit6 0x07           // 数码管7寄存器
  37. #define Digit7 0x08           // 数码管8寄存器
  38. #define DecodeMode 0x09       // 译码模式寄存器
  39. #define Intensity 0x0a           // 亮度寄存器
  40. #define ScanLimit 0x0b        // 扫描位数寄存器
  41. #define ShutDown 0x0c         // 低功耗模式寄存器
  42. //#define DisplayTest 0x0f      // 显示测试寄存器
  43. #define ShutdownMode 0x00        // 低功耗方式
  44. #define NormalOperation 0x01     // 正常操作方式
  45. #define ScanDigit 0x07           // 扫描位数设置,显示8位数码管
  46. #define DecodeDigit 0xff         // 译码设置,8位均为BCD码
  47. #define CommonDigit 0x00            // 译码设置,8位均为非译码方式
  48. #define IntensityGrade 0x0a      // 亮度级别设置
  49. #define TestMode 0x01            // 显示测试模式
  50. #define TextEnd 0x00             // 显示测试结束,恢复正常工作模式

  51. float result; //这是AD采样采得的数据
  52. uchar  MAX,MIN; //这是报警极的最低值和不报警的最大值
  53. uint f;
  54. /**********************************************************************
  55. ** 函数名称:  SendChar
  56. ** 功能描述:  向MAX7219写入字节(8位)
  57. ** 输 入:  ch :要送入的数据
  58. **         
  59. **        
  60. ** 输 出:
  61. **         
  62. ** 全局变量:
  63. ** 调用模块: 延时函数_nop_
  64. **
  65. ** 作 者:     吴鉴鹰
  66. ** 日 期:     14.02.22
  67. **-------------------------------------------------------------------------------------------------------
  68. ** 修改人:吴鉴鹰
  69. ** 日 期:
  70. **------------------------------------------------------------------------------------------------------
  71. ***********************************************************************/
  72. void SendChar(uchar ch)
  73. {
  74.      uchar i,temp;
  75.      _nop_();    //短暂的延时
  76.      for (i=0;i<8;i++)
  77.      {
  78.   temp=ch&0x80;
  79.      ch=ch<<1;
  80.         if(temp)    //当该位为1时写入
  81.         {
  82.          DIN=1;
  83.             CLK=0;
  84.          CLK=1;
  85.         }
  86.         else     //当该位为0时写入
  87.         {
  88.          DIN=0;
  89.          CLK=0;
  90.          CLK=1;
  91.         }
  92.      }
  93. }

  94. /***********************************************************************
  95. ** 函数名称:  changestyle
  96. ** 功能描述:  译码功能,将需要显示的数字转成相应的七段译码表
  97.               如要显示的字符为“0”,则为7e ---0111 1111,就中间的一个LED不亮
  98. ** 输 入:    p:要转换的数据
  99. **         
  100. **        
  101. ** 输 出:
  102. **         
  103. ** 全局变量:
  104. ** 调用模块:
  105. **
  106. ** 作 者:     吴鉴鹰
  107. ** 日 期:     14.02.22
  108. **-------------------------------------------------------------------------------------------------------
  109. ** 修改人:吴鉴鹰
  110. ** 日 期:
  111. **------------------------------------------------------------------------------------------------------
  112. ***********************************************************************/
  113. uchar changestyle(uint p)
  114. {
  115.    uchar c;
  116.    if(p==0) c = 0x7e;
  117.    if(p==1) c = 0x30;
  118.    if(p==2) c = 0x6d;
  119.    if(p==3) c = 0x79;
  120.    if(p==4) c = 0x33;
  121.    if(p==5) c = 0x5b;
  122.    if(p==6) c = 0x5f;
  123.    if(p==7) c = 0x70;
  124.    if(p==8) c = 0x7f;
  125.    if(p==9) c = 0x7b;
  126.        return(c);
  127. }

  128. /***********************************************************************
  129. ** 函数名称:  delayms
  130. ** 功能描述:  译码功能,将需要显示的数字转成相应的七段译码表
  131.               如要显示的字符为“0”,则为7e ---0111 1111,就中间的一个LED不亮
  132. ** 输 入:    ms:需要延时的长度
  133. **         
  134. **        
  135. ** 输 出:
  136. **         
  137. ** 全局变量:
  138. ** 调用模块:
  139. **
  140. ** 作 者:     吴鉴鹰
  141. ** 日 期:     14.02.22
  142. **-------------------------------------------------------------------------------------------------------
  143. ** 修改人:吴鉴鹰
  144. ** 日 期:
  145. **------------------------------------------------------------------------------------------------------
  146. ***********************************************************************/
  147. void delayms(uint ms)
  148. {
  149. uchar i;
  150. while(ms--) for(i=0;i<120;i++);
  151. }

  152. /***********************************************************************
  153. ** 函数名称:  WriteWord
  154. ** 功能描述:  向MAX7219写入字(16位)
  155. ** 输 入:    addr:需要延时的长度
  156. **         
  157. **        
  158. ** 输 出:
  159. **         
  160. ** 全局变量:
  161. ** 调用模块:
  162. **
  163. ** 作 者:     吴鉴鹰
  164. ** 日 期:     14.02.22
  165. **-------------------------------------------------------------------------------------------------------
  166. ** 修改人:吴鉴鹰
  167. ** 日 期:
  168. **------------------------------------------------------------------------------------------------------
  169. ***********************************************************************/
  170. /* 向MAX7219写入字(16位)*/
  171. void WriteWord (uchar addr,uchar num)
  172. {
  173.     LOAD=0;      
  174.     _nop_();
  175.     SendChar(addr);
  176.     _nop_();
  177.     SendChar(num);
  178.     _nop_();
  179.     LOAD=1;    // 锁存进相应寄存器
  180. }
  181. /* MAX7219初始化 */
  182. void InitDisplay ()
  183. {
  184.      WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
  185.      WriteWord (DecodeMode,CommonDigit);      // 设置译码模式为非译码模式
  186.      WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
  187. }
  188. /***********************************************************************
  189. ** 函数名称:  show
  190. ** 功能描述:  显示函数,其中Fdata为状态为第一位,Sdata状态为第二位,Tdata为状态为第三位。
  191.      Fdata为状态为第四位。degdata为显示的具体数值degdata 为4位  例如23.21(要求degdata输入格式)
  192. ** 输 入: Fdata  Sdata  Ddata  Hdata
  193. **         
  194. **        
  195. ** 输 出:
  196. **         
  197. ** 全局变量:
  198. ** 调用模块:
  199. **
  200. ** 作 者:    吴鉴鹰
  201. ** 日 期:     14.02.22
  202. **-------------------------------------------------------------------------------------------------------
  203. ** 修改人:吴鉴鹰
  204. ** 日 期:
  205. **------------------------------------------------------------------------------------------------------
  206. ***********************************************************************/
  207. void show(float degdata,uint Fdata,Sdata,Ddata,Hdata)
  208. {
  209.        uint a,b,c,d;     //a为10位值,b为个位值,c为小数点后1位值,d为小数点后2位值,e为临时数据
  210.     InitDisplay ();     // MAX7219初始化
  211.     _nop_();           //延时一小会
  212.     a=degdata/10;   
  213.     b=(degdata-a*10)/1;
  214.     c=(degdata-a*10-b)*10;
  215.     d=(degdata-a*10-b-c*0.1)*100;
  216.     a=changestyle(a);
  217.     b=changestyle(b);
  218.     c=changestyle(c);
  219.     d=changestyle(d);
  220.     b=b|0x80;
  221.        WriteWord(Digit0,a);
  222.        WriteWord(Digit1,b);
  223.        WriteWord(Digit2,c);
  224.        WriteWord(Digit3,d);
  225.        WriteWord(Digit4,Fdata);
  226.        WriteWord(Digit5,Sdata);
  227.        WriteWord(Digit6,Ddata);
  228.        WriteWord(Digit7,Hdata);
  229. }
  230. /***********************************************************************
  231. ** 函数名称:  KEY
  232. ** 功能描述:  按键检测程序,实现检测标准的修改
  233. ** 输 入:
  234. **         
  235. **        
  236. ** 输 出:  MAX , MIN
  237. **         
  238. ** 全局变量:
  239. ** 调用模块:
  240. **
  241. ** 作 者:    吴鉴鹰
  242. ** 日 期:     14.02.22
  243. **-------------------------------------------------------------------------------------------------------
  244. ** 修改人:吴鉴鹰
  245. ** 日 期:
  246. **------------------------------------------------------------------------------------------------------
  247. ***********************************************************************/
  248. void KEY()
  249. {
  250.    if(P0&0X01)
  251.    {
  252.       EA = 0;
  253.       delayms(30);
  254.    if(P0&0X01)
  255.    {
  256.         MAX ++;
  257.    }
  258.    EA = 1;
  259.    }
  260.    else if(P0&0X02)
  261.    {
  262.        EA = 0;
  263.        delayms(30);
  264.        if(P0&0X02)
  265.     {
  266.        MAX--;
  267.     }
  268.     EA = 1;
  269.    }
  270.    else if(P0&0X04)
  271.    {
  272.        delayms(30);
  273.        if(P0&0X04)
  274.     {
  275.        MIN++;
  276.     }
  277.    }
  278.    else if(P0&0X08)
  279.    {   EA = 0;
  280.        delayms(30);
  281.        if(P0&0X08)
  282.     {
  283.        MIN--;
  284.     }
  285.     EA = 1;
  286.    }
  287. }
  288. /***********************************************************************
  289. ** 函数名称:  shutshow
  290. ** 功能描述:  用来熄灭所有的数码管
  291. ** 输 入:
  292. **         
  293. **        
  294. ** 输 出:
  295. **         
  296. ** 全局变量:
  297. ** 调用模块:
  298. **
  299. ** 作 者:    吴鉴鹰
  300. ** 日 期:     14.02.22
  301. **-------------------------------------------------------------------------------------------------------
  302. ** 修改人:吴鉴鹰
  303. ** 日 期:
  304. **------------------------------------------------------------------------------------------------------
  305. ******************************************************************/
  306. void shutshow()            //数码管不显示函数
  307. {
  308.      WriteWord(0x0c,0x00); //向低功耗模式寄存器(地址为0X0c)写入全1值(上电状态)用来熄灭显示器
  309. }

  310. main()
  311. {
  312.      TMOD=0x02;  //T1工作模式2
  313.   TH0=0x14;     //定时器初始值高位
  314.   TL0=0x00;
  315.   IE=0x82;     //IE.7位为1表示CPU开放中断,IE.1位也为1,表示允许定时器T0溢出中断
  316.   TR0=1;         //使能定时器
  317.   P1=0x00;  //选择ADC0809的通道1(000)(P1.0~P1.2)   

  318.   
  319.     // IT1=0;       //低电平触发
  320.     IT1=1;          //下降沿触发
  321.     EX1=1;     //使能外部中断1
  322.     EA=1;        //允许全局中断

  323. WriteWord(0x0f,0x00);  //退出测试模式
  324. WriteWord(0x0a,0x03);  //调解亮度,16级可选择,用于设置LED的显示亮度,从0xX0~0xXF

  325. delayms(1000);
  326. show(88.89,0x01,0x01,0x01,0x01);
  327. delayms(1000);
  328. while(1)
  329. {
  330.      ST=0;ST=1;ST=0;  //启动A/D转换
  331.         while(EOC==0);  //等待转换完成
  332.   OE=1;
  333.   if(f==1)
  334.   {
  335.    delayms(1000);                   // 延时1s
  336.    if(result > MAX) SOUND = 0;       //这里的60是设定的报警极限值,当超过该值时开始报警
  337.    if(result < MIN) SOUND = 1;    //没达到报警值,无动作
  338.    show(result,0x01,0x01,0x01,0x01); //显示ad转换后的电压值
  339.    delayms(1000);
  340.   }
  341.   else
  342.   {                                     //这是鹰哥的风格,不管几句话都加上大括号,这样看起不会乱
  343.      show(0x01,0x01,0x01,0x01,55.55);   //如果初始化未成功则显示55.55
  344.   }
  345.   //Display_Result(P3);
  346.   OE=0;
  347.   KEY();
  348. }
  349. }

  350. /***********************************************************************
  351. ** 函数名称:  counter1
  352. ** 功能描述:  当数据采集完毕,出发单片机的外部中断进行数据的存储显示以及报警
  353. ** 输 入:
  354. **         
  355. **        
  356. ** 输 出:
  357. **         
  358. ** 全局变量:
  359. ** 调用模块:
  360. **
  361. ** 作 者:    吴鉴鹰
  362. ** 日 期:     14.02.22
  363. **-------------------------------------------------------------------------------------------------------
  364. ** 修改人:吴鉴鹰
  365. ** 日 期:
  366. **------------------------------------------------------------------------------------------------------
  367. *******************************************************************/
  368. void  counter1(void) interrupt 2 using 2
  369. {
  370.    
  371.    EX1=0;
  372.    result = P0;
  373.    EX1=1;
  374. }
复制代码




点评

鹰哥你好,我是单片机初学者,看了你的程序之后有点疑惑:中断那边TMOD=0x02应该是t0模式2吧?还有书上说的模式2都是th0=tl0,所以对你那边的 [*] TH0=0x14; //定时器初始值高位 [*] TL0=0x00;这一句不是很理  详情 回复 发表于 2014-7-30 11:17
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

28

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2014-6-12 00:07 | 显示全部楼层
这不是在电子发烧友论坛分享的么

点评

为了让更多的人看到,所以也在这里分享了!!!  详情 回复 发表于 2014-6-12 07:54


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-12 07:54 | 显示全部楼层
Cresta 发表于 2014-6-12 00:07
这不是在电子发烧友论坛分享的么

为了让更多的人看到,所以也在这里分享了!!!
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

108

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-6-12 13:01 | 显示全部楼层
好贴 ,mark,以后慢慢看。


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-13 08:51 | 显示全部楼层
本帖最后由 吴鉴鹰. 于 2015-1-12 09:14 编辑

5、吴鉴鹰单片机实战项目精讲(连载)之基于单片机的电子秤的设计


需要相关硬件原理图的请点击下载:

吴鉴鹰基于单片机的电子秤设计原理图.pdf (284.67 KB, 下载次数: 314)
图片13.png
为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2014-6-13 10:00 | 显示全部楼层
关注ING


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-13 14:13 | 显示全部楼层
资深工程师单片机实战项目精讲(连载),由易到难连续分享

点评

老师,如果要对单片机采集到的二点信号模拟值(一个高一个低)与标准仪器对比\校准,专业叫标定吧,单片机如何写程序,给大家普及一下知识.  详情 回复 发表于 2015-3-12 14:24


回复

使用道具 举报

363

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

 楼主| 发表于 2014-6-13 21:52 | 显示全部楼层

7、吴鉴鹰单片机实战项目精讲(连载)微机键盘的运用——原理介绍

本帖最后由 吴鉴鹰. 于 2014-6-17 09:47 编辑

7、吴鉴鹰单片机实战项目精讲(连载)微机键盘的运用——原理介绍



有的时候我们总是抱怨键盘太少,做起来太麻烦了,所以就有人就比较聪明,直接运用电脑的键盘,也就是人们常说的“微机键盘”。下面吴鉴鹰就针对这个微机键盘的给大家做简单的介绍,已解决大家的键盘太少之忧,让大家做人机界面更加畅通无阻。

图片1.jpg

图 1

     本文通过分析微机键盘的工作原理及数据格式, 从单片机应用系统的实际需出发, 对微机键盘与单片机的接口及软件进行了设计。用中断方式实现了微机键盘与单片机之间的通信。

     大家知道微机键盘是微机系统必不可少的外设, 其品种很多, 既有最经常使用的101102 等键盘, 又有各种适用于金融、证券等领域的小键盘。实际上, 单片机应用系统中也可用微机键盘作为人机交互工具。然而, 由于微机键盘的数据格式较多, 要开发它的完整功能编程量大。因此,在实际使用中, 往往要求厂家做成适合于单片机应用接口要求的特殊键盘, R S 2 32 串口格式, 这对应用是很不方便的。

    本文通过开发实践体会到: 微机键盘应用于单片机系统时, 只要满足实际要求, 硬件电路和软件设计完全可以简化, 并在这方面作了许多工作。
1 键盘功能及数据格式
键盘通过五芯插头与主机系统相连。一条数据线、一条时钟线均是双向的
(既可向系统发键盘数据, 又可接收系统发来的键盘命令), 一条是复位线, 另两条分别是+ SV 电源线和地线。五芯插头的布局如图1 所示。
图片2.png

图 2

微机键盘尽管形式各异, 但一般都符合两种标准川; 一种是Pc / XT 标准, 另一种是AT标准。前者数据位为9 (较老式), 后者数据n , 是较常用的一种标准, 目前许多微机键盘都兼容这一标准。下面对后者作一简要介绍:                           
1.1 键盘功能
键盘通过数据线和时钟线与系统通信, 它接收系统发来的键盘命令码, 送出键盘数据。
在接通电源后键盘首先进行复位等初始化工作, 然后进行键盘扫描, 作好接收命令和发送键盘数据的准备工作。
键盘和系统相互间的数据通信均采用n 位格式的串行方式: 第一位起始位, 2 9 位是8 位数据位(低位在前高位在后), 10 位是奇偶校验位, n 位是停止位, 数据的起始位为低电平。系统接收的键盘数据和键盘接收的键盘命令均在移位时钟的下降沿同步输人, 时钟周期为50 u s 。其时序如图2 所示。

2 微机键盘与系统通信帧格式时序
图片3.png

图 3


1.2 键盘命令
键盘命令是由系统发送给键盘的命令码。键盘在接收到这些命令时, 20 ms 内予以响应, 即送回一个响应(FA ll)
键盘命令的含义如下:
(l) FFH 复位键盘一一使键盘进行复位和内部自测试操作;
(2FE H 重新发送一检测到键盘数据错误时, 要求键盘重新输出原来的内容;
(3) F6 H 设置键盘缺省值一一使键盘复位到初始状态, 并停止键盘扫描;
(4) FS H 设置缺省值并停止键盘一一使键盘复位到初始状态, 并停止键盘扫描;
(5) F4 H 启动键盘一一清除键盘输出缓冲器, 并启动键盘扫描和输出数据;
(6) F3 H 设置拍发速率/ 延时参数;
(7) E E H 回响命令一一要求键盘接收到此命令时也回送E E H 予以响应;
(8) E lH 置位/ 复位LE D 指示器。

1.3 键盘数据
键盘数据包括键盘扫描码和命令响应码。键盘扫描码是用户按下键盘按键时, 键盘发送给系统的数据, 不同的键其码值是不同的。可通过查阅有关资料〔‘〕或测试获得。命令响
应码则是键盘对系统命令的响应。其含义如下:
(1) FE H 请求重发一一对收到一个奇偶校验错或无效命令时, 请求系统重发命令;
(2) FA H 正常应答一一对任何一个有效的键盘命令, 均以该响应作答;
(3 ) OOH 超限应答一一当用户按键速度超出键盘内缓冲器存放的16 个扫描码时,
出该应答;
(4 ) FD H 诊断故障应答一一键盘在自测试过程中, 若有故障则以FD H 应答;
(5) A A I硕诊断正常应答一一键盘在自测试过程中, 若无故障则以A A H 应答;
(6) E E H 回响命令应答一一键盘收到系统的回响命令(E E H ) , 也发一个E E H
;
(7 ) FO H 断开扫描码前缀字节一一断开扫描码占两个字节, 第一个字节总是刊H ,
二个字节和接通扫描码相同。

2、接口及软件设计
微机键盘与单片机的接口如图
3 所示。
图片4.png

图  4

在此对单片机无特殊要求, 可采用

A T ME L 公司的AT89 C5 1 单片机, 其指令系统和IN JE L 公司的MCS -51 系列单片机完全兼容。单片机Pl.7 连数据线1)A T,P3.2 (IN ,I0 )连时钟C LK。微机键盘与单片机只有建立正常的通信关系, 才能控制键盘及处理键盘数据
。因此在软件设计上本文着重于介绍键盘数据的接收、键盘命令的发送、键盘的自检和复位这三部分。在软件设计时键盘命令只需使用一个,即初始化键(F FH )。对键盘数据的接收不作奇偶校验, 以简化编程。
2.1 键盘数据的接收
键盘数据的接收用IN TO 外部中断方法来实现; 在时钟线C LK 为低电平时产生一次中断, 读取数据线D A I,一位数据。键盘通过时钟线C L K 产生n 个时钟脉冲, 使单片机产生1 次中断, 才接收完一帧信息。中断次数的识别由单元E IC 来完成,E IC 的初值为1 1, 每中断一次减1。当E IC 0 , 表明一帧信息接收完, 同时禁止外部中断(E XO = O)、禁止键盘发数据(C LK = 0 )、置数据接收完成标志bR ()K = 1 并使E IC 的初值为1 1
键盘数据存放单元在K B D ; 其初值为# o fh, 每中断一次数据线1)A T K B D 左移一位数据, 同时K B D 也左移出一位, 当检测到KD 左移出起始位“ 0 ” 时, K B D 中的内容即为要接收的键盘数据。当主程序处理完键盘数据K BD , 为了接收下一帧信息, 应置C LK= 1,EXO = 1
bR O K = 0
2.2.2 键盘命令的发送
键盘命令的发送采用刊中断方法来实现; 每次中断, 都对时钟线C LK 求反, 以产生n个脉冲, 把发送缓冲区SB LS13H 中的信息经数据线1A T 送给键盘。
中断次数由单元T IC来控制, T IC 的初值为2, 每中断一次减1。当T IC 0 , 一帧n 位信息发送完, D A T= 1CL K = 1、命令发送完成标志b R ()K = 1, T IC 的初值为2, 并禁止定时器工作(T R O= 0 ), 为发送键盘命令或接收键盘数据作好准备。
SB HSB L 组成的发送缓冲区, 用于存放要发送的一帧n 位信息。其中S 13H 为高字
,SB L 为低字节, 一帧信息在该缓冲区中的存放格式如图4 所示。
图片5.png

图 5


其中: d0 位为一帧信息的起始位;
,d7 d l 为键盘命令(田为最高位,d1 为最低位) ;D l 为奇偶校验位;砚为停止位;其余未定义。如单片机时钟频率为12 M llz , 定时器工作方式1, 要确保键盘对时钟周期为5 0 u s 的要求, 则时间常数取值为TL0 = # ocdh,THO = # offh

为了方便大家交流,建了两个QQ群:QQ群3号:198387118  【1000人群】QQ群5号: 239316959【2000人群】群内已有成员3000余人!
更多内容关注微信公众号:单片机精讲吴鉴鹰


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-23 14:56 , Processed in 0.668955 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表