STC89C52RC单片机实验板使用手册指导书.doc
(带图纸和文档)stc89c52rc单片机实验板使用手册设计
收藏
资源目录
压缩包内文档预览:(预览前20页/共82页)
编号:21243216
类型:共享资源
大小:1.75MB
格式:ZIP
上传时间:2019-07-31
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
30
积分
- 关 键 词:
-
图纸
以及
文档
stc89c52rc
单片机
实验
试验
使用手册
设计
- 资源描述:
-
(带图纸和文档)stc89c52rc单片机实验板使用手册设计,图纸,以及,文档,stc89c52rc,单片机,实验,试验,使用手册,设计
- 内容简介:
-
TX-1B单片机实验板使用手册单片机实验板使用手册目录TX-1B单片机实验板使用手册11 WAVE使用说明32 KEIL的使用93 STC-ISP软件的使用。174 Easy 51pro 软件使用235 TX-1B单片机实验板各功能实验详解265.1闪烁灯285.2流水灯295.3单键识别325.4矩阵键盘检测345.5利用定时器和蜂鸣器唱歌425.6模数转换ADC0804的应用465.7 数模转换DAC0832的应用505.8 DS18B20温度测量显示实验525.9 59秒计数器605.10 1602字符液晶显示635.11 12864点阵液晶显示实验665.12 串口通讯实验78联系方式821 WAVE使用说明目前应用在单片机的编程语言主要有汇编语言和C语言,汇编语言相对C语言来说执行效率较高,但编程啰嗦烦杂,程序的可移植性较差,也就是说用户对某个芯片或电路编写的驱动程序只在一套电路板上可使用,而当换个电路后用户又要自己重新编写这套驱动程序。这样就在使用的过程中带来了不少麻烦,其次其指令很多,也不方便记忆,因此我建议初学者直接学习用C语言给单片机编程就可以,无需学汇编语言。从我个人就两种语言都会的角度来看,无需知道一点汇编知识直接学C语言同样完全可以学好单片机。本实验板所配的例程大部分由C语言编写成。因此在本手册中的例程讲解大多采用C语言,有各别几个用汇编语言。下面首先讲解WAVE编译器的使用方法.1. 安装SETUP文件(建议安装在C盘下)。2. 复制光盘:软件编译器下的COMP51整个文件夹到C盘目录下。WAVE编译程序时用的编译器就在这个文件夹里面,这一步务必做。3. 首次启动后,编辑框内会有几个默认的程序加载,大家不用管它,选择“文件-关闭项目”将它们关闭。4. 如果你想用WAVE公司标准的建立工程项目的方法建立你的项目,那么请点击“帮助-WAVE6000使用手册”这里面讲的非常仔细,对于这种标准程序我在这里就不再讲了。5. 但是如果你要用另一种比较简单的方法快速的建立项目呢,可按照我下面的方法来做,我已使用多年,保证没有问题。5.1关闭所有已打开的项目5.2如果你没有硬件仿真器,那只能用软件仿真,请这样设置:点击“仿真器-仿真器设置“分别按以下四幅图设置。5.3点击新建文件图标后会在编译框内出来一个以NONAME为标题的空文本,如下图: 此时的保存按钮为灰色,原因是文本框内没任何字符,所以无法保存任何东西,接下来我就TX-1B单片机开发板上点亮与单片机P1.0口相连的一个发光二极管为例,详细介绍WAVE的使用方法:在上图新建的NONAME1编辑框内输入以下字符:/本程序为点亮与单片机P1.0口相连的发光二极管注意:/后面的字符在C语言中为注释,不参与编译,在C语言中注释有两种方法:一种方法是加“/“,如果有多行注释,每行都需要加/;第二种方法用“/*这里为注释.*/”,不加双引号,两个*中间为注释。 此时再查看保存按钮已变成可点击状态,我们点击保存按钮,弹出如下对话框,你可以自己先建立一个你自己的文件夹,将刚才建立的文件命名为test1.c,如下图所示。test1这个名字你可以自己取,但是后面必须要以.c结束,因为我们写的是C语言程序,(汇编语言,以*.asm为名)。 写好文件名字后点SAVE保存文件,此地会发现编译框内的文字颜色发生了变化,这说明此时的文字内容已经变成可以被编译器所识别的字符。5.4 接着在文本框内再输入以下信息#include sbit light1=P10;void main() light1=0;注意:(1)#include 意思是将reg51.h头文件的内容全部放到本行处,该文本内容是51单片机各引脚地址及其内部寄存器地址定义,若要看详细的内容请打开C:COMP51 下reg51.h文件查看,该文件夹下还有其他常用到的头文件。 (2)sbit light1=P10; 把单片机的P1.0口定义成light1,你可以自己随便取你喜欢的名字,但sbit *=P10;格式不可变。 (3)void main() 无返回值型主函数,如果还不懂那请自己回去看C语言吧。 (4) light1=0; 将P1.0口置为低电平,在单片机的C语言中,高电平用“1“来表示,低电平用”0“来表示。输入完上面的文字后点击编译快捷按钮,如果输入没有错误则会在下面的信息窗口中显示若干个对勾,如下图所示:注意:编写程序时必须是严格的C语言格式,在编辑框中不能有多余的字符出现,建议初学者从一开始就要差成一个好的编程习惯和自己的编程风格,要及时的为每一模块函数加上注释说明,不该多写的地方不要多写,不能少写的地方不要少写,这样对将来编写大规模程序有会有很好的帮助。当点击完编译按钮后若出现上图信息窗口中显示的信息,那说明你写的程序已经成功编译,并且已经在你保存文件的目录下面生成了可往单片机内下载的BIN和HEX文件。2 KEIL的使用 2.1 安装,请自己仔细看配套光盘里的安装说明。 2.2 安装成功后,首次启动界面如下图:2.3 我们先新建一个工程文件,点击“Project-New Project”.选择工程文件要存放的路径,并且输入工程文件名,这里我们用test2作为工程文件名,这里就不用在后面加.c了。图片如下:2.4 点击Save 后弹出选择CPU及型号的对话框:2.5 由于本实验板所配的单片是STC公司的,而KEIL中并没有STC公司的产品,不过STC公司的单片机和传统的51单片机是兼容的,所以这里我们就选择Atmel公司的AT89C52。2.6 新建一个C51文件,单击左上角的New File 如下图所示:2.7 保存新建的文件,单击保存按钮。2.8 输入文件名test2.c,这里必须以*.c为文件名。2.9 保存好后我们还需要把文件加入到工程项目中,如下图所示在Source Group1 上单击右键,选择Add Files to Group Source Group12.10 然后选择刚才建立的test2.c文件,单击Add。这时我们看左边工程信息窗口中的Source Group1 下面多了test2.c文件,这说明添加文件成功了。2.11 在编辑框内输入下列字符2.12 接着我们编译工程项目,如下图点击编译如果在下面的信息窗口中显示0 Error(s),0 Warning(s).则说明没有错误,已经成功编译。2.13 接下来我们生成.HEX文件,如下图点击Option for Target.2.14 在下图我们单击Output 选中Create HEX File,再单击OK。2.15 再次点击编译按钮就会在文件目录下生成test2.hex文件。到此为止,您已经学会了如何使用WAVE和KEIL编译文件并生成能够往单片机中烧写的BIN和 HEX文件了,下面我们讲解如何使用STC-ISP和easy 51 Pro给单片机下载程序。3 STC-ISP软件的使用。3.1安装光盘软件目录下的stc_isp_3.1文件夹中的安装文件注意:有些用户无法正常安装此程序,这可能跟你的系统中原来安装的某些程序有冲突,你可以按照以下的方法来安装。1.打开光盘软件目录下的STC解压版将里面所有的以DLL和OCX为后缀名的文件复制到系统windowssystem32下面. 替换此目录下原来有的,但大小为0的文件.如果没有就直接复制那里.如果复制的时候说*文件正在被使用,那就把电脑重起一下再重新复制一次。(如果你的系统没有显示后缀名,请先在文件夹选项中选中显示文件后缀名,这我就不教你了),如果还不能成功,那最后最绝的一招,重装系统。如下图类似这样的文件即为DLL和OCX为后缀名的文件1. 然后直接双击该目录下的STC-ISP V29 Beta5 可执行文件,如图:3.2安装完软件后,启动,首次设置时只需注意芯片的选择,在左上角下拉框中选择STC89C52RC,一般的台式机大多只有一个串口,所以COM栏就选择COM1,如果使用别的串口那就选择相应的串口号,其它全部使用默认,不明白时最好不要乱改,不然可能会把芯片锁死,以后就用不了了。总体设置如下图: 注意:使用笔记本的用户如果笔记本没有串口,那请你去电子市场购买USB转串口线,一般价格是五六十元,但往往便宜的东西总是不太好用,我建议你买的时候向商家问问,要好点的那种,因为STC公司下载软件对这种虚拟的串口比较挑剔,使用这种线的时候建议用户把波特率改为9600.3.3软件安装设置完后,接下来我们讲如何连接硬件实验板,先看下面的连接图,用手机照的不是非常清楚,清注意下面的讲解。首先要保证实验板上插的是STC89C52RC单片机,左上方的USB数据电缆线一定要与计算机相连,它一方面实现USB通信,更重要的是给整块电路板提供电源。当连好USB线后,按下左上方的开关,会看到开关右边有个电源指示灯会亮。左下方的九孔串口线与计算机串口相连,(上图板上串口旁边有个指示灯是亮的,但这并不能说明你的计算机串口是好的或是串口线已经成功连接,这个指示灯的作用主要是下载程序的时候指示正在下载,或是单片机与计算机进行双向串行通信的时候小灯会不停的闪烁,告诉用户通信正在进行。若为单向只发送数据或只接收数据,小灯不一定会亮,这里请用户注意)3.4连接好了硬件也设置好了软件,下面就要下载程序了, 如下图点击软件界面上的Open File 打开对话框,将刚才我们用WAVE编译生成的test1.hex文件选择,大家注意下图中选择框内第一个文件没有后缀名,它实际上是test1.bin,这两个文件是一样的,只是后者比前者要小的多,在下载比较大的程序时我们常用后者。选择好后点击Open 3.5选择好后,要先把实验板上的电源关掉,因为STC的单片机内有引导码,在上电的时候会与计算机自动通讯,检测是否要执行下载命令,所以要等点完下载命令后再给单片机上电。然后点击如下图的Download/下载钮,接着按下实验板上电源给单片机上电,上电后的图片如下所示:若也现上述图片,则说明已经给单片机成功下载了程序,并且已经加密,别人无法破解。成功下载程序后实验板如下图所示,注意左上方八个流水灯中最上方那个点亮了。4 Easy 51pro 软件使用这款软件是专门针对产品附件中附带的AT89S52单片机下载程序的软件,其实如果你不想用这块片子也可以,STC的下载软件可在任何一台电脑上使用,可这款软件就没那么乖了,原来设计产品的时候也没想着用STC的芯片,后来发现这款芯片非常的好用,就换了这款,AT89S52也就一起送给用户了,如果你的电脑经过我下面讲的这些步骤后仍然无法使用,你也别难过,这款芯片就这样,反正也是我送你的,你就安心用STC单片机吧。4.1进入电脑主板BIOS,将并口模式设置为ECP模式,如果没有ECP模式那就不用更改了。确保实验板上的单片机是AT89S52。4.2接好USB电缆线和ISP下载线(电脑端为并口25针,单片机实验板上为白色六针插座)这时连不连串口线都没关系。4.3打开附件光盘中软件目录下的ISP下载器文件夹下的easy 51pro.exe,首次设置如下,每次更改设置后都要把软件关闭,再重新打开更改才能生效。4.4打开单片机开发板上的电源,如果电源接通电源指示灯会亮,这时有可能连复位指示灯也会亮,这是由计算机并口的电流反窜到实验板上的原因。我们不用理它,对下载程序没有影响,但是当成功下载完程序后最好把实验板上的ISP下载线与计算机断开,不然程序可能会运行不正常。点击检测器件,如果你的计算机并口正常,那么会显示如下图所示信息。如果没有检测到器件,那你就省点心,还是使用STC89C52吧!4.5在检测到器件的前提下,接下来先擦除器件,再选打开文件,将你用WAVE或KEIL编译好的BIN或HEX文件选中,点击写器件,完成烧写。到此为止已经非常详细的讲述了如何用WAVE、KEIL编译源程序生成下载文件,如何使用STC-ISP、Easy 51pro 下载bin和hex文件。5 TX-1B单片机实验板各功能实验详解注意:在我要讲具体实验之前这里有必要先介绍一下本实验板上用到的一些元件的操作方法,对于一个电子制作者或者是爱好者来说学会怎么样搜索自己需要元件的资料是非常重要的,现在市场上各种各样的芯片非常的多,能实现同一个功能的芯片也有很多种,世界各大芯片制造公司(除了中国)都有生产。所以我们不可能把芯片的功能、名称及详细使用方法都记全,也没有这个必要,但是必须要知道在你需要实现某个功能的时候怎么样才能找到合适的芯片,下面先给大家推荐两个搜索网站:中国最大的搜索网站和世界最大的搜索网站,上面几乎可以搜到你需要的任何信息,大家一定要充分利用身边可利用的资源,问别人是最没有办法的办法,也是最无能的体现。闲谈:我常在QQ群里碰到问类似这样问题的人“谁有AD590的资料?”一看就知道是个非常菜的鸟,遇到这种问题我理解当事人当时的心情,所以很热情的告诉他“上下载”,大约半个小时后刚才提问题的那位菜先生又来一句“终于找到了,不过全是英文的,谁有它的中文资料啊?”,我只好告诉他“什么时候中国能制造自己的芯片了就有中文资料了,你加油吧!”现在可以明确的告诉大家,芯片的资料基本全是英文的,大家学了这么多年英文,现在正是你用它的时候了,对于电子爱好者看芯片的英文介绍就应该达到看汉语一样的水平,建议大家以后装软件全装英文版的,看电影全看国外原声的,最好连自己的电脑操作系统也装英文版的。 说正事,给大家介绍两个查芯片资料的网站: 这里的芯片资料相当的全,如果没要找到你要的那请看下面这个网站,这里有世界上所有的芯片资料,并且每天更新一次。 锁存器(74HC573):顾名思义,就是把输入端的数据锁存(或送)到输出端,请看下图中的U3元件,第11角(锁存端)为高电平的时候,右边D0-D7的输入与左边Q0-Q7的输出是直通的,就是说,右边是什么电平,左边就是什么电平,可以把它当作不存在。当第11角为低电平的时候,左右两端就被断开了,无论输入端怎么变化,输出端都不会变化,当第11角由低电平变为高电平的一瞬间,输入端的数据会被立即送到输出端,如果此时我们再次把第11角设置为低电平,那么以后当输入端无论再怎么变化,输出端都不会变化而是保持刚才下降沿时输入端的值,这样就达到了锁存数据的目的,这也就是所谓的总线设计思路,一个8位的数据线加一个锁存器后就可以接多个元件,当选通哪个元件的片选,就送数据给那个元件。先说这个元件吧,以后用到别的元件我们再解释。下面开始讲解例程。5.1闪烁灯实验要求点亮与单片机P1.0口相连的发光二极管,延时0.2S,然后熄灭,延时0.2S,再点亮,如此循环下去。实验目的 初步了解单片机IO口输出高低电平的作用,延时函数的时间估算。硬件电路源代码#include/* 上面这行是一个文件包含处理。所谓文件包含是指一个文件将另外一个文件的内容全部包含进来这里的程序虽然只写了一行,但C编译器在处理的时候却要处理几十或几百行,这里包含reg51.h的目的在于本程序要使用P1这个符号,而P1是在reg51.h这个头文件中定义的。大家可以在编译器目录下面用记事本打开这个文件看看。*/sbit P1_0=P10; /定义IO口这步的目的是让编/译器知道P1_0代表的就是单片机的P1.0口void delay02s(void) /延时0.2秒子程序 unsigned char i,j,k; /定义3个无符号字符型变量。 for(i=20;i0;i-) /三个FOR循环用来延时,这里为 for(j=20;j0;j-) /什么是0.2S大家可以用WAVE for(k=248;k0;k-); /高断点仿真一下,就可知道大概 /是0.2S了。 void main(void) /每一个C语言程序有且只有一个主函数, while(1) /循环条件永远为真,以下程序一直执行下去。 P1_0=0; / I/O口P1.0输出低电平,小灯被点亮。 delay02s(); /延时经过0.2秒。 P1_0=1; / I/O口P1.0输出高电平,小灯熄灭。 delay02s(); /延时经过0.2秒。 5.2流水灯实验要求单片机P1口相连的8个发光二极管中的一个循环移位点亮,同时蜂鸣器发出滴滴的响声。蜂鸣器用一PNP三极管驱动,集电极(C极)通过蜂鸣器线圈接5V电源,基极(B极)是控制端,发射极(E极)接地,当三极管C,B极PN结正偏时,PN结导通,即B极为低电平时,三极管导通,蜂鸣器响。再不明白去看模电书。实验目的 掌握循环移位的工作原理,学会使用封装好的函数库,延时函数的时间估算。硬件电路源代码/flow light and beep #include #include /后面要用到它里面的_crol_(k,l)函数/这个函数的意思是把一个字符变量k循环左移l位,关于它的说明/请查看安装KEIL目录下的E:Program FilesKeilC51HLP文件夹/里面的c51lib,这个文件里面有各种用C语言封装好的函数库,我/们在以后使用其中某些函数时可以直接使用而自己不必再写。unsigned char a,b,k,j; /定义四个字符变量sbit beep=P23; / 定义蜂鸣器的接口void delay10ms() /延时字程序,大约延时10ms for(a=100;a0;a-) for(b=225;b0;b-); void main() k=0xfe; /先给k一个初值11111110等待移位 while(1) delay10ms(); beep=0; /打开蜂鸣器 delay10ms(); /让它响10ms beep=1; /关闭蜂鸣器 j=_crol_(k,1); /把k循环左移一位 k=j; /把移完的值再送给k P1=j; /同时把值送到P1口点亮发光二极管 5.3单键识别实验要求每按一次独立键盘的S2键,与P1口相连的一个发光二极管往下移动一位。注意:关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,如果我们再首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。以上为按键识别去抖动的原理。实验目的 独立按键的识别。硬件电路源代码#include sbit BY1=P34; /定义按键的输入端S2键unsigned char count; /按键计数,每按一下,count加1unsigned char temp;unsigned char a,b;void delay10ms(void) /延时程序unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);key() /按键判断程序if(BY1=0) /判断是否按下键盘,当单片机上电时所有IO口为/高电平,S2键一端接地另一端接P3.4,所以当键被按下时P3.4口/直接接地,此时检测P3.4肯定为低电平。 delay10ms(); /延时,软件去干扰 if(BY1=0) /确认按键按下 count+; /按键计数加1 if(count=8) /计8次重新计数 count=0; /将count清零 while(BY1=0);/等待按键释放,如果键未释放则一直在此等待。 move() /广告灯向下移动移动函数a=temp(8-count);/ _crol_()函数P1=a|b;main() count=0; /初始化参数设置 temp=0xfe; P1=0xff; P1=temp; while(1) /永远循环,扫描判断按键是否按下 key(); /调用按键识别函数 move(); /调用广告灯移动函数 5.4矩阵键盘检测实验要求依次按下4*4矩阵键盘上从第1到第20个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。说明:本实验板上数码管为共阴极。静态数码管显示原理:这里就共阴极数码管显示原理进行讲解,一位数码管内一共有8个发光二极管,对共阴极来说其8个发光二极管的阴极在数码管内部全部接在一起,也就是“共阴”说法的来源,阳极是独立的,设计电路时一般把阴极接地,当我们从外部给任一个阳极加一个高电平时这个发光二极管就亮了,如果想要出一个8字,并且把右下角的小数点也点亮的话,那可以给8个阳极全总送高电平,想出几就给相对应的发光二极管送高电平,因此我们在显示数字的时候首先做的就是给0-9十个数字编好码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。另外说一下,一般的数码管每一段亮至少需要10个毫安的电流,而单片机的IO口送不出如此大的电流,所以我们需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片,本实验板使用的74HC573,它最大可以输出500毫安的电流,足够让数码管点亮了。本实验板上的六位数码管上相同段(段指a,b,c,d,e,f,g,h)全部是接在一起的,其中每一个位(阴极)是独立的,所以在做静态显示的时候所有的数码管只能显示相同的数字,当然你可以控制显示几位,如果你让它们静态不同的数字那就得给每一个数码管加一套驱动电路了。但这样做是没有必要的,后面我们会讲到关于数码管动态显示原理。 下面给出本实验板共阴极数码管数字编码 矩阵键盘的四行分别与P3.0-P3.3连接,四列分别与P3.4-P3.7连接。实验目的 学会矩阵键盘的检测,掌握数码管静态显示原理。硬件电路 键盘电路见5.3源代码/4*4键盘检测程序,按下键后相应的代码显示在数码管上#includesbit beep=P23; /蜂鸣器接口sbit dula=P26; /控制数码管段选的锁存器锁存端sbit wela=P27; /控制数码管位选的锁存器锁存端unsigned char i=100;unsigned char j,k,temp,key;void delay(unsigned char i) /可自定义延时长短的延时函数 /当i=10时大约为10毫秒 for(j=i;j0;j-) for(k=125;k0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; / 0-F编码display(unsigned char num) / 显示子函数 P0=tablenum; /将第num个显示编码送P0口 dula=1; /一个下降沿将数据锁存 dula=0; P0=0xc0; /位选通全部的数码管 wela=1; /一个下降沿将数据锁存 wela=0;void main() dula=0; /使两个锁存器不可直通 wela=0; while(1) /进入检测总循环 P3=0xfe; /给P3.0送低电平,其余为高电平 temp=P3; /把P3口数据读回来 temp=temp&0xf0; /把P3口与11110000相与 if(temp!=0xf0) /如果有键按下刚一定不相等,于是进入/下一步检测 delay(10); /延时去抖动 if(temp!=0xf0) /再次判断是否有键按下 temp=P3; /判断为有,再次读P3口数据 switch(temp) /因为我们刚才是将第一行置的低 /在这里再判断是第几列 case 0xee: /如果temp=0xee则为第一行和第一列 key=0; /的交叉点,由此我们知道是矩阵键盘 break; /上的第一个键被按下,我们给key=0。 case 0xde: /以后依此类推 key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) /这段程序是检测按键是否被释放 temp=P3; /如果没有释放就一直等待并且 temp=temp&0xf0; beep=0; /蜂鸣器一直响 beep=1; /释放后关闭蜂鸣器 display(key); /显示按下相应键值的数据 P1=0xfe; /将第一个发光二极管点亮(我写 /程序的时候测试用的) P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xfc; P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xf8; P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P1=0xf0; 5.5利用定时器和蜂鸣器唱歌实验要求用单片机的P2.3口输出不同占空比的方波来控制与它相连的蜂鸣器,当方波的占空比不同时蜂鸣器发出的音调就不同,由此根据歌曲的音调编程实现让蜂鸣器唱歌。占空比:一个周期中,高电平的长度比上总周期的长度的值再乘上100%。标准方波的占空比为50%.实验目的 学会利用单片机的定时器,掌握蜂鸣器的发声操作。硬件电路源代码#include reg51.hunsigned char Count;sbit _Speak =P23 ;/蜂鸣器控制脚unsigned char code SONG = /祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,/路边的野华不要采0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,;void Time0_Init() /定时器0初始化函数TMOD = 0x01; /工作模式选择IE = 0x82; /中断设置TH0 = 0xD8; /装初值TL0 = 0xEF; /12MZ晶振,10msvoid Time0_Int() interrupt 1 /定时器0中断子函数TH0 = 0xD8;TL0 = 0xEF;Count+;/长度加1/*-功能:1MS延时子程序-*/void Delay_xMs(unsigned int x) unsigned int i,j; for( i =0;i x;i+ ) for( j =0;j3;j+ ); /*-功能:歌曲播放子程序i为播放哪一段曲目-*/void Play_Song(unsigned char i)unsigned char Temp1,Temp2;unsigned int Addr;Count = 0;/中断计数器清0Addr = i * 217;while(1)Temp1 = SONGAddr+; if ( Temp1 = 0xFF ) /休止符 TR0 = 0; Delay_xMs(100); else if ( Temp1 = 0x00 ) /歌曲结束符 return; else Temp2 = SONGAddr+; TR0 = 1; while(1) _Speak = _Speak; Delay_xMs(Temp1); if ( Temp2 = Count ) Count = 0; break; /*-功能:主程序-*/void main()Time0_Init();/定时器0中断初始化while(1)Play_Song(0);/播放5.6模数转换ADC0804的应用实验要求从ADC0804 的模拟量通道输入05V 之间的模拟量,通过ADC0804 转换成数字量送给单片机,经单片机处理后在数码管上以十进制形成显示出来。 实验目的 学习如果用单片机控制ADC0804芯片进行数模转换,掌握数码管动态扫描显示的原理。动态扫描:就六位数码管显示123456举例说明如下:先让第一个数码管显示1,其余的全部不亮,1大约亮几毫秒,然后熄灭,紧接着立即让第二个数码管显示2,其余的全部不亮,2同样亮几毫秒,依次这样亮到第六个数码管,然后再回来显示1,如此这样以很快的速度不断循环下去,由于人眼的视觉暂留时间大约为20毫秒左右,所以是感觉不出有不亮的数码管存在的,看见的是六个数码管同时在显示,数值是123456,如果我们把这个过程一点点放慢,看见的是从第一个数码管显1,然后移到第二个再显2,。也就是说在任一时刻只有一位数码管是亮的。这就是数码管动态扫描显示的原理ADC0804: ADC0804是8位全MOS中速A/D 转换器、它是逐次逼近式A/D 转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为100us。ADC0804 转换时序是:当CS0 许可进行A/D 转换。WR由低到高时,A/D开始转换,一次转换一共需要6673 个时钟周期。CS与WR同时有效时启动A/D转换,转换结束产生INTR 信号(低电平有效),可供查询或者中断信号。在CS和RD 的控制下可以读取数据结果。本实验没有使用INTR信号。 硬件电路源代码 /拧动AD旁边的电位器,会在数码管的前三位显示0-255之间的数/值。这就是把模拟信号转换成数字信号,即模数转换。#include#include #define uint unsigned int /宏定义,详情请看C语言书。#define uchar unsigned charsbit adrd=P37; /AD读引角sbit adwr=P36; /AD写引角sbit diola=P25;sbit dula=P26; /数码管段选锁存sbit wela=P27; /数码管位选锁存unsigned char j,k,adval;void delay(unsigned char i)/延时程序 for(j=i;j0;j-) for(k=125;k0;k-);uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/数码管编码void display(uchar bai_c,uchar sh_c,uchar g_c)/显示程序 dula=0; P0=tablebai_c;/显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(5); dula=0; P0=tablesh_c;/显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(5); P0=tableg_c;/显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(5);void main()主程序 uchar a,A1,A2,A2t,A3; diola=0; while(1) /主循环程序不断的采样、显示 adwr=0;/AD写入(随便写个什么都行,主要是为了启动/AD转换) _nop_(); /一个延时字函数 adwr=1; adrd=0; adval=P1;/AD数据读取 adrd=1; delay(10); A1=adval/100;/分出百,十,和个位 A2t=adval%100; A2=A2t/10; A3=A2t%10; for(a=10;a0;a-) / 显示十次,然后去采集一次电压信号 display(A1,A2,A3);/送去显示各位。 ;5.7 数模转换DAC0832的应用实验要求通过用单片机控制DAC0832输出锯齿波,让实验板上发光二极管D12由暗到亮变化,循环下去。实验目的 学会用单片机控制数模转换芯片DAC0832。DAC0832:DAC0832是8位全MOS中速D/A 转换器,采用R2RT 形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V+15V 供电。参考电压为-10V+10V。在此我们直接选择+5V 作为参考电压。DAC0832 有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER WR2 CS 管脚全部接数字地。管脚8 接参考电压,在此我们接的参考电压是+5V。我们在控制P0口输出数据有规律的变化将可以产生三角波,锯齿波,梯型波等波形了。硬件电路源代码/TX-1BDA测试程序,下载后可观察到D13发光二极管由暗变亮再熄/灭过程,#includesbit wela=P27; /数码管位选sbit dula=P26; /段选sbit dawr=P36; /DA写数据sbit csda=P32; /DA片选unsigned char a,j,k;void delay(unsigned char i) /延时 for(j=i;j0;j-) for(k=125;k0;k-);void main() wela=0; dula=0; csda=0; a=0; dawr=0; while(1) P0=a; /给a不断的加一,然后送给DA delay(50); / 延时50ms 左右,再加一,再送DA。 a+; 注意:随着给DA送的数字量的不断增加,其转换成模拟量的电流也不断的增大,所以我们观察发光二极管D12就会从暗变亮,熄灭。5.8 DS18B20温度测量显示实验实验要求 用单片机控制实验板上的DS18B20数字温度传感器,读取当前环境温度,精度达0.1度,温度范围0-99度,并用数码管的前三位显示出来。同时实验板上的单片机还能把温度值通过串口线发送到计算机,在计算机上安装该目录下的.exe文件后,打开应用程序可看到温度值。注意:DS18B20 数字温度传感器是DALLAS 公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点(1)、只要求一个I/O 口即可实现通信。(2)、在DS18B20 中的每个器件上都有独一无二的序列号。(3)、实际应用中不需要外部任何元器件即可实现测温。(4)、测量温度范围在55 到125摄氏度之间。(5)、数字温度计的分辨率用户可以从9 位到12 位选择。(6)、内部有温度上、下限告警设置。DS18B20 详细引脚功能描述1、GND 地信号;2、DQ数据输入出引脚。开漏单总线接口引脚。当被用在寄生电源下,也可以向器件提供电源;3、VDD可选择的VDD 引脚。当工作于寄生电源时,此引脚必须接地。DS18B20 的使用方法。由于DS18B20 采用的是1Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S52 单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。实验目的 学习单总线器件的读写方法,数值合成,数字类型变化等。硬件电路源代码/安装目录下的EXE文件,通过串口线连接计算机与实验板,打开/软件后可在软件界面上显示当前温度值。#include #define uchar unsigned char#define uint unsigned intsbit DS=P22; /define interface 定义DS18B20接口uint temp; / variable of temperatureuchar flag1; / sign of the result positive or negativesbit dula=P26;sbit wela=P27;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/不带小数点编码。unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; /带小数点编码。void delay(uint count) /delay uint i; while(count) i=200; while(i0) i-; count-; /功能:串口初始化,波特率9600,方式1/void Init_Com(void) TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) /send reset and initialization command uint i; /DS18B20初始化 DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;bit tmpreadbit(void) /read a bit 读一位 uint i; bit dat; DS=0;i+; /i+ for delay 小延时一下 DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);uchar tmpread(void) /read a byte date 读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好/一个字节在DAT里 return(dat); /将一个字节数据返回void tmpwritebyte(uchar dat) /write a byte to ds18b20 /写一个字节到DS18B20里 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 写1部分 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /write 0 写0部分 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change 发送温度转换命令 dsreset(); /初始化DS18B20 delay(1); /延时 tmpwritebyte(0xcc); / 跳过序列号命令 tmpwritebyte(0x44); /发送温度转换命令uint tmp() /get the temperature 获得温度 float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); /发送读取数据命令 a=tmpread(); /连续读两个字节数据 b=tmpread(); temp=b; temp0;a-) for(b=60;b0;b-); void display(uint temp)/显示程序 uchar A1,A2,A2t,A3,ser; ser=temp/10; /分离出三位要显示的数字 SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=table1A2;/显示十位 带小数点的 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);void main() /主函数 uchar a; Init_Com(); /初始化串口 do tmpchange(); /温度转换for(a=10;a0;a-) display(tmp(); /显示十次 while(1);5.9 59秒计数器实验要求 使用软件延时的方法实现0-59秒自动计数器,用数码管的前两位显示出来。实验目的 练习进位操作,数码管动态显示。硬件电路源代码/59秒自动计数器#include#define uchar unsigned char uchar j,k,i,a,A1,A2,second;sbit dula=P26;sbit wela=P27;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/数字编码void delay(uchar i) /延时函数 for(j=i;j0;j-) for(k=125;k0;k-);void display(uchar sh_c,uchar g_c) /显示函数 dula=0; P0=tablesh_c; /显示十位 dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); /亮5ms P0=tableg_c; /显示个位 dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); /亮5msvoid main() while(1) second+; /秒加一 if(second=60) /判断是否到60 second=0; /如果到了则清零 A1=second/10; /没到则分离出十位和个位 A2=second%10; for(a=50;a0;a-) /显示部分。至于时间大概是多少 /请用户用软件仿真看时间约等于1秒display(A1,A2);/便可,如果需要精确定时请用定时器 5.10 1602字符液晶显示实验要求 在1602液晶屏上指定的位置显示出自己想要的数字或字符。实验目的 学习1602液晶的操作注意:实验板附带的1602安装方法请看光盘里的液晶使用方法,插好液晶后如果显示字符不清楚,请调节1602液晶对比度调节电位器。关于1602液晶的操作请看光盘里元件资料下的液晶资料。硬件电路源代码(本例程使用汇编语言);这段例程显示的是我的邮箱地址和我的手机号RS bit p3.5 ;定义写数据不是命令接口RW bit P2.1 ;定义读写接口E bit P3.4 ;使能端mov P2,#0mov P2,#0ffhmov P2,#1fhMOV P0,#01H;清除屏幕ACALL ENABLEMOV P0,#38H;8位点阵方式ACALL ENABLEMOV P0,#0FH;开显示ACALL ENABLEMOV P0,#06H;移动光标ACALL ENABLEMOV P0,#80H;显示位置ACALL ENABLEmov dptr,#table3;送数据表3,chaoyue02812163.COMcall write1mov p0,#0c0h;第一行的位置call enablemov dptr,#table2 ;送数据表2,13796625294call write1mov p0,#0c2h ;第二行的位置call enablejmp $ENABLE:CLR RSCLR RWCLR EACALL DELAYSETB ERETwrite1: ;写数据mov r1,#00ha1:mov a,r1movc a,a+dptrcall write2inc r1cjne a,#00h,a1retwrite2:mov p0,asetb rsclr rwclr ecall delaysetb eretdelay:mov r7,#255d1:mov r6,#255d2:djnz r6,d2djnz r7,d1rettable1:db 57h,57h,57h,2Eh,35h,31h,43h,35h,31h,2Eh,43h,4Fh,4Dh,20h,20h,20h,00htable3:DB 43H,48H,41H,4FH,59H,55H,45H,30h,32H,38H,31H,32H,40H,31H,36H,33H,2EH,43H,4FH,4DH;数据CHAOYUE02812163空格table2:db 54h,45h,31h,33h,37h,39h,36H,36H,32H,35H,32H, 39H,34H,39H,31H,35H;数据TEL13796625294915空格end5.11 12864点阵液晶显示实验实验要求 利用128X64 点阵液晶显示屏显示图片,字符,汉字,实现其基本显示功能。实验目的 掌握128X64 点阵液晶显示的原理。注意:关于液晶的操作说明请用户查看光盘元件资料下的YM12864J液晶资料。硬件电路源代码/TX-1B实验板12864液晶测试程序/测试驱动液晶的程序. 在指定的位置显示汉字#include #define uchar unsigned char#define uint unsigned intunsigned char code lcd_lattice16_16; /几个函数声明unsigned char code lcd_letter_8_16;void display_8_16(uchar,uchar,uchar);void displaycoslight(uchar);unsigned char code lcd_lattice_coslight15320;sbit CS1=P30; /液晶左半屏选择sbit CS2=P31; /液晶右半屏选择sbit RS=P35; /写数据或命令选择sbit E=P34; /液晶使能 bit dot_not; /反白标志void wrst_le(uchar date) /写左部分状态字 CS1=1; CS2=0; RS=0; E=1; P0=date; E=0;void wrst_ri(uchar date) /写右部分状态字 CS1=0; CS2=1; RS=0; E=1; P0=date; E=0;void wrda_le(uchar date) /写左部分数据 CS1=1; CS2=0; RS=1; E=1; P0=date; E=0;void wrda_ri(uchar date) /写右部分数据 CS1=0; CS2=1; RS=1; E=1; P0=date; E=0;void lcdinit() /初始化 wrst_le(0x3f); wrst_ri(0x3f); /*display on*/void displaycls(uchar background) /1清白屏,0清成黑屏 uchar i; uchar j; lcdinit(); wrst_le(0xc0); wrst_ri(0xc0) ; /设置显示起始行 for(i=0;i8;i+) wrst_le(0xb8|i); /设置页地址 wrst_le(0x40|0); /设置列地址 for(j=0;j64;j+) if (background=0) wrda_le(0xff);/清成白屏 else wrda_le(0);/清成黑屏 for(i=0;i8;i+) wrst_ri(0xb8|i);/设置页地址 wrst_ri(0x40|0);/设置列地址 for(j=0;j64;j+) if (background=0) wrda_ri(0xff);/清成白屏 else wrda_ri(0);/清成黑屏 void displayword(uchar lcdrow,uchar lcdline,uchar wordnumber) /在指定的列和行显示一个汉字 uchar i; uint j; if(lcdline64) lcdinit(); wrst_le(0xc0); wrst_le(0xb8|lcdrow); /设置页地址 wrst_le(0x40|lcdline); /设置列地址 j=(wordnumber-1)*32; for(i=0;i32;i+) if(dot_not=1) wrda_le(lcd_lattice16_16i+j); else wrda_le(lcd_lattice16_16i+j); if(i=15) lcdinit(); wrst_le(0xb8|(lcdrow+1); /设置页地址 wrst_le(0x40|lcdline); /设置列地址 else lcdinit(); wrst_ri(0xc0); /设置显示起始行 wrst_ri(0xb8|lcdrow); /设置页地址 wrst_ri(0x40|(lcdline-64); /设置列地址 j=(wordnumber-1)*32; for(i=0;i32;i+) if(dot_not=1)wrda_ri(lcd_lattice16_16i+j); else wrda_ri(lcd_lattice16_16i+j); if(i=15) wrst_ri(0xb8|(lcdrow+1); /设置页地址 wrst_ri(0x40|(lcdline-64);/设置列地址 void display_8_16(uchar lcdrow,uchar lcdline,uchar datanumber) /在指定的列和行显示一个字符 uchar i; uint j;if(lcdline64) wrst_ri(0xc0); wrst_ri(0xb8|lcdrow);/设置页地址 wrst_ri(0x40|lcdline);/设置列地址 j=datanumber; j=(16*j); for(i=0;i16;i+) if(dot_not) wrda_ri(lcd_letter_8_16i+j); else wrda_ri(lcd_letter_8_16i+j); if(i=7) wrst_ri(0xb8|(lcdrow+1);/设置页地址 wrst_ri(0x40|lcdline);/设置列地址 else if(lcdline122) wrst_le(0xc0);/设置显示起始行 wrst_le(0xb8|lcdrow);/设置页地址 if(lcdline121) wrda_le(0x40|(lcdline-64);/设置列地址 j=datanumber*16; for(i=0;i16;i+) if(dot_not) wrda_le(lcd_letter_8_16i+j); else wrda_le(lcd_letter_8_16i+j); if(i=7) wrst_le(0xb8|(lcdrow+1);/设置页地址 wrst_le(0x40|(lcdline-64);/设置列地址 void displaycoslight(uchar which_bmp) /显示一幅图像函数 uchar i; uchar j;wrst_le(0xc0); wrst_ri(0xc0);/*设置显示起始行*/ for(i=1;i6;i+) wrst_ri(0xb8|i);/*设置页地址*/ wrst_ri(0x40|32);/*设置列地址*/ for(j=0;j32;j+) wrda_ri(lcd_lattice_coslightwhich_bmp(64*(i-1)+j); wrst_le(0xb8|i);/*设置页地址*/ wrst_le(0x40|00);/*设置列地址*/ for(j=32;j64;j+) wrda_le(lcd_lattice_coslightwhich_bmp(64*(i-1)+j); /*/unsigned char code lcd_lattice_coslight15320=/*-调入了一幅图像:/*- 宽度x高度=64x40 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xA0,0xA0,0xA0,0xA8,0xA8,0xA8,0xA8,0xA8,0xAA,0x2A,0x2A,0x2A,0x0A,0x0A,0x0A,0x0A,0x2A,0x2A,0x2A,0xAA,0xA8,0xA8,0xA8,0xA8,0xA8,0xA0,0xA0,0xA0,0x80,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,0x00,0x00,0x00,0x00,0x00,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,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,0x00,0x00,0x00,0x00,0x00,0x02,0x0A,0x2A,0x2A,0x2A,0xAA,0xAA,0xAA,0xAA,0xAA,0xA8,0xA0,0xA0,0xA0,0x80,0x80,0x80,0x80,0xA0,0xA0,0xA0,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0x2A,0x2A,0x2A,0x0A,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0x10,0x10,0x10,0x20,0x00,0x00,0xC0,0x20,0x10,0x10,0x10,0x20,0xC0,0x00,0x00,0x60,0x90,0x90,0x90,0x90,0x20,0x00,0x02,0xF2,0x02,0x02,0x02,0x02,0x02,0x02,0x12,0xF2,0x12,0x02,0x00,0xC0,0x20,0x10,0x10,0x90,0xA0,0x80,0x00,0x00,0xF0,0x80,0x80,0x80,0x80,0xF0,0x00,0x00,0x10,0x10,0x10,0xF0,0x10,0x10,0x10,0x00,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02,0x00,0x00,0x01,0x02,0x04,0x04,0x04,0x02,0x01,0x00,0x00,0x02,0x04,0x04,0x04,0x04,0x03,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x07,0x04,0x00,0x00,0x01,0x02,0x04,0x04,0x04,0x02,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00;/unsigned char code lcd_letter_8_16=/*- 文字: 0 - 0 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*- 文字: 1 - 1 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*- 文字: 2 - 2 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*- 文字: 3 - 3 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 4 - 4 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*- 文字: 5 - 5 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 6 - 6 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 7 - 7 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 8 - 8 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*- 文字: 9 - 9 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,;/unsigned char code lcd_lattice16_16=/*- 文字1: 简 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x08,0xC7,0x12,0x26,0x8A,0x82,0xAA,0xA4,0xA3,0xA2,0x26,0x2A,0xE2,0x02,0x00,0x00,0x00,0xFF,0x00,0x00,0x1F,0x12,0x12,0x12,0x12,0x1F,0x40,0x80,0x7F,0x00,0x00,/*- 文字2: 易 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x00,0x00,0x00,0xBE,0xEA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x80,0x80,0x00,0x00,0x00,0x52,0x52,0x49,0x28,0x24,0x12,0x11,0x08,0x04,0x03,0x40,0x80,0x7F,0x00,0x00,/*- 文字3: 信 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,/*- 文字4: 号 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x40,0x40,0x5F,0xD1,0x51,0x51,0x51,0x51,0x51,0x51,0x5F,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x02,0x07,0x02,0x02,0x22,0x42,0x82,0x42,0x3E,0x00,0x00,0x00,0x00,/*- 文字5: 发 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x10,0x3E,0x10,0x10,0xF0,0x9F,0x90,0x90,0x92,0x94,0x1C,0x10,0x10,0x10,0x00,0x40,0x20,0x10,0x88,0x87,0x41,0x46,0x28,0x10,0x28,0x27,0x40,0xC0,0x40,0x00,0x00,/*- 文字6: 生 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x80,0x60,0x1E,0x10,0x10,0x10,0x10,0xFF,0x12,0x10,0x10,0x98,0x10,0x00,0x00,0x01,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x61,0x40,0x00,/*- 文字7: 器 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x40,0x4F,0x49,0x49,0xC9,0xCF,0x70,0xC0,0xCF,0x49,0x59,0x69,0x4F,0x00,0x00,0x02,0x02,0x7E,0x45,0x45,0x44,0x7C,0x00,0x7C,0x44,0x45,0x45,0x7E,0x06,0x02,0x00,/*- 文字8: 我 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x20,0x20,0x22,0x22,0xFE,0x21,0x21,0x20,0x20,0xFF,0x20,0x22,0xAC,0x20,0x20,0x00,0x04,0x04,0x42,0x82,0x7F,0x01,0x01,0x10,0x10,0x08,0x07,0x1A,0x21,0x40,0xF0,0x00,/*- 文字9: 最 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x40,0x40,0xC0,0x5F,0x55,0x55,0xD5,0x55,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x20,0x20,0x3F,0x15,0x15,0x15,0xFF,0x48,0x23,0x15,0x09,0x15,0x23,0x61,0x20,0x00,/*- 文字10: 爱 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30,0x00,0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40,0x00,/*- 文字11: 毕 -*/*- 宋体12; 此字体下
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
2:不支持迅雷下载,请使用浏览器下载
3:不支持QQ浏览器下载,请用其他浏览器
4:下载后的文档和图纸-无水印
5:文档经过压缩,下载后原文更清晰
|