欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《单片机应用技术》实训任务书40.docx

    • 资源ID:69323776       资源大小:781.43KB        全文页数:38页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《单片机应用技术》实训任务书40.docx

    下面以如何把asm格式文件导入KEIL中以及如何编译为例。一、建立一个工程项目如图1-6所示,单击主菜单中“projeci”选项,在弹出的下拉菜单中选择“New Project选 项。此时,弹出如图1-7所示的对话框,在文件名中输入一个项目名,流水灯”,选择保存路 径,单击“保存”按钮。图16新建个工程项目图L7保存工程项目|批注机电1:图1-7的对话框需筌更换下.因为本软件 是英文软件,何来中文或图,请修改成“CgieNew Project*,对话框.批注机电1:图1-7的对话框需筌更换下.因为本软件 是英文软件,何来中文或图,请修改成“CgieNew Project*,对话框.二、选择芯片在弹出的Selecl Device for Targel 'Targel 为11标targel选择设备)对话框中用单击 Aimel前面的+号,展开单片机型号清单,选择单片机芯片型号“89C52",如图1-8所示。单 击“确定”按钮,系统将返回主界面。vcc铲LEDSTC89C52RCVCC 40 T8Cl 6 oTIr2200OuFT2P10 VCCT2EXPI IPO 0 ,I)oC2 染lulOluFMAX冷VCC GND T10UTRIIN RlOirrTilNT1OUT T2IN R2IN R2OUTVCC C6 I10P! 2 Pl 3 PI 4 Pl 5 Pl 6 Pl 7 RCTPO 1 .ADI PO2.AD2 PO 3 RD3 PO 4 AD4 PO5.AD5 P0 6 AD6 PO336 lul31 CSJCIO"taw【八WRP3 6 RHP3 7 XTAU XTAL1 *SS1920I打RXDP3 0 E4J TXI) P3 RLE PROG1 -n一 储 PSEN D5TTP3 3 PAA"-p-I TO PS 4 TI PS 5P2 6 Al I P2 5 AI3 VI I 12 P2 3 All P2 2 AIOP2 VA9P20 AS302826I Ou!图2-14点亮LED灯的电路图图2-14只比单片机最小系统的电路图多了一个电阻和一个LED发光二极管,它们被连 接在了 P.O引脚。电路中多的这个电阻称为限流电阻,串联于电路中,起到分压的作用。在电路中加限流 电阻的目的是减小负载端电流,在发光二极管一端添加一个限流电阻可以减小流过发光二极 管的电流,防止损坏LED灯。电路中的LED灯是半导体二极管的一种,可以把电能转化成光能。发光二极管与普通 二极管一样,由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从 P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的 电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能 境状态不同。当电子和空穴发合时释放出的能抗多少不同,释放出的能及越多,则发出的光 的波氏越短。常用的是发红光、绿光或黄光的二极管。发光二极管的两根引线中较长的一根为正极,应接电源正极。有的发光二极管的两根引 线一样长,但管壳上有一凸起的小舌,靠近小舌的引线为正极。发光二极管与小白炽灯泡和 乐灯相比,其特点是:工作电压很低(有的仅一点几伏):工作电流很小(有的仅零点几亳 安即可发光):抗冲击和抗震性能好,可靠性而,寿命长:通过调制通过的电流强弱可以方 便地调制发光的强弱。由于有这些特点,发光一.极管在一些光电控制设备中用作光源,在许 多电子设备中用作佶号显示器。把它的管心做成条状,用7条条状的发光管组成7段式半导 体数码管,每个数码管可显示09十个数字。当硬件电路设计完毕后,设计工作还没有完成,因为单片机产品需要硬件和软件共同支 持才能正常工作,这里提到的软件主要是指用户编写的源程序。这也是区别于传统的电子产 品的地方。本系统要实现的主要功能是点亮一个LED灯.,根据外围电路的设计,只需要通过指令 控制单片机的第一个引脚输出低电平,就可以使第一个LED灯发光。采用C语言编程序如下。#includc<AT89X52.h> 包含头文件sbi( lcdl=PHO;定义变量ledl为P1.0.也就是单片机的第一个引脚。void main()主程序开始,C语言唯一的一个主程序。ledl=O,让单片机的第一个引脚输出低电平,点亮LED灯。)把上面这个程序通过“任务一”介绍的方法建立一个项目,注意因为此程序为C语言程 序,所以在“任务一”中“建立源程序文件”时需要在填写文件名称时加上“.C” °建立完 整的项H并编译通过之后,再通过“任务一”介绍的“ISP软件”把程序下载到单片机中。 就会发现电路中的LED灯点亮了。三、闪烁的小灯硬件电路与图2-13完全相同,要完成小灯的闪烁效果,我们只需要修凶程序,具体程 序如下。#includc<AT89X52.h>/121 含头文件sbitlcdl=P|AO:定义变量Icdl为P1.0,也就是单片机的第一个引脚,void main()主程序开始,C语言唯一的一个主程序。(int i;whiled)led1=0;让第片机的第一个引脚输出低电平,点亮LED灯"fbr(i=O; i<5000; i+);lcdl = l;让单片机的第一个引脚输出高电平,熄灭LED灯。fbr(i=O; i<5000: i+);I)上述程序中只是加了在小灯的亮与灭之间加了两个for循环语句,来实现一定的延时。 加延时程杼的原因在于,人的眼暗要想看清灯有闪烁也就是亮灭的变化需要定的反应时 间。正如日常生活中的日光灯,实际它在以传秒50次的频率闪烁,但我们的眼睛分辨不出 来。那要到什么程序人眼才能分辨清楚呢,这个时间大概在10ms.知道了这个原因就不难 理解为什么要让for语句循环5 000次了,它就是为了让人眼能够看清灯在闪烁。而不加延 时实际只灯也在闪烁只不过人眼看不出来。一、实现按键控制小灯有了按键结构及其工作原理的理论知识,下面来具体实现按键控制小灯,其实现过程如 下。1 .硬件电路按照图3-5所示搭建电路。军 j d yr 1STC89C52RCT2/P1.0VCCT2EXP1 1 P0.0/AD0 Pl 2P0 1 ADIPl.3P0.2/AD2Pl.4P0 3/AD3Pl.5P0.4/AD4Pl 6P0 5/AD5Pl.7P0.6/AD6RSTP0 " .AD2RXDP3.0直TXD P3.1ALE PROG INTO P3.2 PSEN IKH P3.3 P2.7/A15 TO P3 4 P2 6 A14 T1 P3 5 P2 5 Al3 WRP3.6 P2 4/A12 RDP3" P2 3 AllXTAL2 P2.2/A1OXTAL1 P2.1/A9VSSP2.0/A840220c,疝 S 39338437536635一348339321031'HI 0 °f U301229R6 13285 1k 1407152616251"241823V(:C 192021图3-5 一个LED控制电路图3-5中省略了一些辅助电路包括电源电路、晶振电路、程序下载电路和豆位电路等。 要想实现完整的功能这些电路是必不可少的,但为了理解方便这里略去了。在PI.0接了一 个发光二极管和一个限流电阻,在P3.0接了一个带上拉电阻的按犍。2 .程序设计单片机的编程或者说大多数嵌入式系统的编程主要有两种方式:一种是中断的方式;另 种是查询的方式。对于图3-5所示的电路,因为没有连接到中断相关的引脚或与其建立联 系,所以应该先应用查询的方式来编写相应的程序,P3.0端口最初的状态为高电平,当有" 按键按下时为低电平,所以应该在程序中直询这个端口的状态是为低电平来确定有按键按下 了。下面利用图3-5来实现这样一个现象,监视按说SI (接在P3.0端口上),用发光二极 管DI (接在单片机PI.0端口上)显示按键状态,若按下按键SI,则发光二极管D1亮:若 未按下按键SL则发光二极管DI熄灭。按键S1状态的检测过程为单片机对按键状态的检测相对丁单片机来说,是从单片机的 P30端口输入信号,而输入的信号只有高电平和低电平两种,当按键未按下时,输入高电 平:当按键按下时,输入低电平。输出控制:如图35所示,当PLO端口输出高电平,即PI.O=1时,根据发光二极管的 单向导电性可知,这时发光二极管D1熄灭:当P1.0端口输出低电平,即P1.0=0时,发光 二极管D1亮。基于此可形成按键控制小灯的程序框图,如图3-6所示。图3-6按键控制小灯的程序框图由图3-6可以形成如下C语言程序。#include <AT89X52.h>sbi(SI=P3A0:sbilDI=PIN):此句话引出下面的编程,但是此句话叙述的太过口语化,清规范下吧。void main(void) (while( 1) (if(SI=O)DIR; 灯亮 else Dl = l;灯灭 )二、实现多路按键状态指示1 .硬件电路如图3-7所示,单片机的接四个发光二极管D"D4, PL4P1.7接四个按键 SI-S4,编程将按键的状态反映到发光二极管.匕(按键按下,对应的灯亮,按键未按下. 对应的灯灭)。T2P1.0 VCCT2EX P1 1 PO O ADOPl.2Pl.3P14 Pl.5Pl.6Pl.7 iurr RXDP3.0PO 1 ADI P0 2 AD2 P03AD3 PO J ADJ PO.5 AD5 P0.6 AD6 P0.7/AD7_EATXDP3 1ALEPROG0PI2 Dm P3.3 T0P3.4 T1 P3.5 WRP3.6 RDP3.7 XTAL1 XT AL I VSSPSEN P2 " A15 P26/A14 P2.5/A13 P2 4/A12 P2.3/A11 P2 2 A10P2 1,A9 P2 0 AS5.1k图3-7四个LED控制电路2 .程序设计按键状态检测:对按键状态检测,相对单片机来说是输入关系,可轮流检测每个按键 状态,根据每个开关的状态让相应的发光二极管指示;也可以一次性检测四路开关状态,然 后让其指示。输出控制:根据按键的状态,由发光二极管DID4来指示,可逐个显示,也可采用一 次指示。基于此可形成多路按键状态显示的程序框图,如图3-8所示。图3-8多路按键状态显示的程序框图 由图3-8可以形成如下C语言程序。#include <AT89X52.h>unsigned char teinp:void inain(void)while(l)(tcmp=Pl»4;tcmp=temp | OxfD;Pl=tcmp;)根据每个按键的状态让相应的发光二极管指示,其思路较为简单,这里仅列出相应的C 语言程序。#include <AT89X52.h>void main(void)(while(l)(if(Pl_4= =0)(Pl_0=0;)else(Pl_0=1;if(PI_5= =0)(Pl_I=0; else ()if(PI_6= =0)Pl_2=0; else (Pl _2=1;if(PI_7= =0)Pl_3=0;elsePl_3=l;)1)三、实现按键控制流水灯1 .硬件电路这里仍然可以用图3-7所示电路,只不过按键我们在这只用到rsi,在单片机的PI端 口仍然连接有四个发光二极管。要实现的现象是上电的时候,D1接在P1.0管脚上的发光二 极管在闪烁,当每一次按下按键S1的时候,D2接在PL1管脚上的发光二极管在闪烁,出 按卜按键S1的时候,D3接在P1.2管脚上的发光二极管在闪烁,再按卜按键S1的时候, D4接在P1.3管脚上的发光二极管在闪烁,再按卜按他SI的时候,又轮到D1在闪烁了, 如此轮流下去,从而实现由按键控制的流水灯。2 .程序设计在我们生活中,我们很容易通过不同的人名来区分不同的人:那是因为每个人有不同的 名子,我们就很快认出。同样,对于要通过一个按说来识别每种不同的功能,我们给每个不 同的功能模块用不同的1D号标识,这样,每按下一次按键,ID的值是不相同的,所以单片 机就很容易识别不同功能的身份了 .DI到D4发光二极管在每个时刻的闪烁的时间是受按键S1来控制,我们给DI到D4 闪烁的时段定义出不同的1D号,当D1在闪烁时,【D=0:当D2在闪烁时,ID=1;当D3 在闪烁时,ID=2;当D4在闪烁时,ID=3;很显然,只要每次按下按键S1时,分别给出 不同的1D号我们就能够实现预期的目标。由此思路形成图3-9所示,按键控制流水灯的程序框图。图3-9按说控制流水灯的程序框图 由图3-9可以形成如下C语言程序。include <AT89X52.h>unsigned char ID;void delay I Oms( void)/10 亳秒延时函数(unsigned char i,j:for(i=20;i>0;i-)for(j=248;j>0;j-);void dclay02s(void)/2 秒延时函数(unsigned char i:for(i=20;i>0;i-)(delay 10ms();void inain(void)(while(l)(if(PI_4=0)delay 10ms();if(Pl_4=0)(ID+;if(ID= =4) (ID=0;)while(Pl_4=0);)switch(iD) case0:Pl_O=-Pl_O;delay02s():break; case I:P1 _ 1 =P I _ I ;delay02s();break; case 2:PI_2=Pl_2;delay02s();break; case 3:PI_3=P l_3;delay02s();break;一、硬件电路IN* VS GAND VOVTLM486NI 22WF简易音响的总体思路就是用单片机的I/O端口产生与音符对应的频率信号,以这种思路 可以得出简易音响的电路图,如图4-6所示,这里需要大家注意图中省去了单片机的周边电 路,并且晶振电路中用的是2MHz晶振。T2P10T2EXPI I POO ADOPI 2R> I APIPI 3POX AD:PI 4PO 3 ADIPI 5PO J AIMPl 6PO5 AI>5PI 7P06 AD6RSTH>"AD"RXD P3 0TXDP5 ALE 四卫2 rTTnTT Pl 5 P2* AI5 TOP3J P26AI4 Ti P5S P2 5AB Wr P3 6 P2 4 Al: n>pv p: j ai XTAL2 P22AIO XT.AL1 P2 I A9 VSSP2 Q A8图46简易音响电路连接图图4.6中涉及到一款芯片LM386。它是一种音频集成功放,具有自身功耗低,电压熠 益可调整,电源电压范围大,外接元件少和总谐波失真小等优点,广泛应用于录音机和收音 机中。LM386内部与通用型集成运放相类似,它是一个三级放大电路。笫一级为差分放大 电路,使用镜像电流源作为差分放大电路有源负我,可使单瑞输出电路的增益近似等于双端 输出电容的增益。第二级为共射放大电路,以增大放大倍数。第三级构成准互补输出级。LM386的外形和引脚的排列如图4-7所示。引脚2为反相输入端,引脚3为同相输入 端,引脚5为输出端,引脚6和引脚4分别接电源和地,引脚I和引脚8为电压增益设定端。 使用时在引脚7和地之间接旁路电容,通常取10nF»增益旁路设定电容+“cc MtHm内向国)LM386LU LzJ LzJ L±J 地拉反相同相地 设定愉入播入图47 LM386的外形和出脚的排列LM386的电源电压为412 V或518V(LM386N4):静态消耗电流为4mA;电压增益 为20200 dB,在引脚I和引脚8开路时,带宽为300 kHz,输入阻抗为50 k,音频功率0.5Wt.尽管LM386的应用作常简单,但稍不注意,特别是器件上电、断电瞬间,甚至工作稳 定后,一些操作(如插拔音频插头、旋音量调节钮)都会带来的瞬态冲击,在输出喇叭上产 生噪声。所以在应用时应注意如下问题。(1)通过接在引脚I、引脚8间的电容(引脚I接电容正极)来改变增益,断开时烟 益为20dB。因此,用不到大的增益,就不要接电容。(2)设计PCB时,所有外围元件应尽可能靠近LM386;地线尽可能粗些;输入音频 信号通路尽可能平行走线,输出亦如此。这是死理,不用多说了吧。(3)选好调节音量的电位器。阻值不要太大,10k最合适。(4)尽可能采用双音频输入/输出。好处是:“ 十 ”、“一”输出端可以很好地抵消共模图1-8单片机芯片型号的选择三、建立源程序文件单击主菜单中的File选项,在弹出的下拉菜单中选择New选项,在弹出对话框的文件 编辑窗口中输入源程序,如图1-9所示。给该文件取名,取名时必须要加上扩展名“.asm”, 如“流水灯,asm”。图1-9愉入源程序信号,进而有效抑制共模噪声。(5)引脚7 (BYPASS)的旁路电容不可少。实际应用时,BYPASS端必须外接一个 电解电容到地,起灌除噪声的作用。工作稔定后,该管脚电压值约等电源电压的一半。增 大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制喙声。在器件上电、掉 电时的噪声就是由该偏置电压的瞬间跳变所致。(6)减少输出耦合电容。此电容的作用有二:隔直+耦合.隔断直流电压,直流电 压过大布可能会损坏喇叭线圈:耦合音频的交流信号。它与扬声器负载构成了 阶高通滤波 器。减小该电容值,可使噪声能量冲击的幅度变小,宽度变窄:太低还会使截止频率(fc = l/(2n*RL*Cout)提高。分别测试发现10uF/4.7uF最为合适。(7)电源的处理,也很关键。如果系统中有多组电源,由于电压不同、负载不同以及 并联的去耦电容不同,每组电源的上升、下降时间必有差异。可行的方法:将上电、掉电时 间短的电源放到+I2V处,选择上升相对较慢的电源作为LM386的匕,但不要低4 V。 二、程序设计对于程序的编写应事先做以卜约定,(1)低音(简谱中数字卜面有.个点的)1234567对应的为小写cdefgab。(2)中音(简谱中数字上下都没有点的)1234567对应的也为1234567o(3)高音(简谱中数字上面有一个点的)1234567对应的为大写CDEFGABo(4)对于降音符b或声音符#一律用# +合适的音名表示。例如,#5。(5) 一个音符木身为一拍,加下划线后为半拍,加等号为1/4拍。如65_4=则音6 为一拍,音5为半拍,音4为1/4拍。<6)下划线或等号连续书写则音长连续变短。<7)音符后加或表示延长。延长一拍延长半拍多加则延长连续增 加。由此可得出简易音响程序流程图如图4-8所示。初始化l/'gl开定酎制0中断图4-8简易音响程序流程图 由此编写简易音响程序如下。#include <AT89X52.h>#includc <ctypc.h> #pragma ot(0)#dcfine uin( unsigned int产所使用的晶振频率刃产所使用的晶振频率刃#define uchar unsigned char#define OSFREQ 60(X)0001 sbit P2_7 = P2A7;* 音符频率表 */uint code notefreqf= 523, 587, 659,698, 784, 880, 988,1047,1175.1319.1396.1568,1760.1976.2093.2349.2637.2793.3136.3520.3961;uchar code notename(=uchar code notename(=/*4拿*次右*号名*余音名*序拿*次含*次存*2余*次/V.'d','e'.'f.'g'.'a'/b', T,2,3;4',5,'6,7. 'C','D','EVF,'G','A',B',O);/* 半音频率表 */ uint code halfnotefreq(J=554,622.740.831.933.1109,1245,1480,1161,1865,2218.2489.2960.3322.3729):/* 音名 */ uchar code halfnotename= 'c'.'d'.'f/g'/a',C.'D'.'F.'G'.'A'.O!;uchar FrcqSandH.FrcqSandL; /*产生方波的定时器的初值*/uchar timer lent;/*定时器延时计数*/uchar tinier Icniilg;/*定时器定时完成标志 */void tiinerOint () interrupt 1定时器0中断用来产生方波(TH0=FreqSandH;TL0=FreqSandL:P2_7 = !P2_7;/ 改变 P2.7 的状态void delay(uchar time)延时函数uchar i;uintj;fbr(i=0:i<timc;i+)for(j=0:j<0x9(X);j+);void Sound(uint freq) uint tiinreg;timreg=65536l-(OSFREQ/(24l*fieq):FreqSandH=tinireg/256;FreqSandL=timreg&0x00ff;TRO=1;ET0=l;void SoundOff(void) 停止发声 TR0=0:ET0=O:P2 = P2| 0x80;uint Ge(rreq(ucharch.uchar llg) /依据音名取对应的频率uchar * pn,i=O;uint * pf;if(flg)(pn=halfnotcname; pf=halfnotcfrcq;else pn=notcnamc; pf=notcfrcq; whilc(l)if(pni=O) return 0; if(ch=pnlij) retuni i+;)void PORTnit(void)初始化 I/OP2= 0x00;void Play(char * str) 乐曲播放uchar i=O,ch,halftlg=O;uchar lasttime;uint freq;PORT.Init ();whilc(l)(ch=strli);六允许曲谱用空格符T符,换行回车等分隔以便阅读*/ if(ch=- ,)|(ch=T)|(ch'r')|(ch'n') i+;continue;) if(!ch) SoundOffO; return;/*乐曲结束则播放完毕if(ch='#') (halfflg=l; continue; /* 半音标志*/ if(isdigit(ch)|isalpha(ch) ( frcq=GetFrcq(ch.halfflg);/* 从音名获取频率*/lasttime=16;break:)else halfflg=O: continue:)i+;ch=strlil;产从下一个符号获取额外音长符号*/while(l) (if(!ch) break;if(isdigi(ch)|isalpha(ch) break;/*非音长符号则卜,次处理*/if(ch='-') lasttime+=8;额外延时一拍*/if(ch=-.') lasttime+=4;/*额外延时半拍*/if(ch='_') lasttime/=2; /*下划线相当于简谱中音名下面的下划线,延时减半”if(ch='=') las(lime/=4;产双下划线相当于简谱中音名下面的双下划线,延时减为"4*/ i+;ch=s(r|i; )if(freq!=O) Sound(freq);严发声*/else SoundOffO;delay(lasttime);/* 延时*/SoundOff();delay(l);/*两个引之间的间歇*/void inain(void)(TMOD=Ox11;ETO=1;EA=I;dclay(lO);Play("l_2_3_l_ l_2_3_l_ 3_4_5 3_4_55=6=5=4=3_1_ 5=6=5=4=3_12_g_12_g_r,);产两只老虎*/SoundOlT();whiled):以单个0.5寸共阳极数码管静态显示为例,将描述如何用单个共阴极数码管来进行静态 显示,具体操作过程如下: 一、准备元器件准备好之前章节所做的最小系统,除此之外再准备8个510欧姆1/4瓦的电阻、一个0.5 寸共阳极数码管、一个按键和一个4.7k的上拉电阻。二、电路连接如图5.5所示,为两位共阳极数码管静态显示的典型连接。图中没有用到P0端口,如 果要用到P0端口作为通过I/O端口使用,一定要在P0端口接上拉电阻,才能保证数据传输 的准确性。5102x85102x8o + 5V图5.5 位静态数码管电路三、程序实践1 .显示特定字符或数字按照图5.5所示进行电路连接后,通过赋值给PI,让数码管显示特定的字符或者数字。 具体程序如下:#includc<AT89X52.h> 包含头文件,头文件包含特殊功能寄存器的定义void main (void)(Pl=0xc0:二进制 为1100 0(X)0参考数码管排列,“可以得出0对应的段点亮,I对应的段熄灭,结果显示数字"0"while(l)2 .显示变化数字按照图5.5所示进行电路连接后,通过循环赋值给P1,让数码管显示变化的数字。 具体程序如下:#include<AT89X52.h>包含头文件,头文件包含特殊功能寄存器的定义unsigned char code table10=0xc0,0xf9,0xa4.0xb0,0x99.0x92,0x82,0xt'8,0x80,0x90);/显示数值表0-9void Delay(unsigned ini t);void main (void)unsigned char i;定义一个无符号字符型局部变量i取值范围0-255while (1) /主循环for(i=0;i<10;i+)(Pl= tablefi;Dciay(60000);加入for循环,表明for循环大括号中的程序循环执行10次循环调用表中的数值延时,方便观看数字变化Jvoid Delay(unsigned int t)(while(-t);)3 .模拟流水按照图5.5所示进行电路连接后,通过循环赋值给P1,让数码管显示特定流动样式。 具体程序如下:#includc<AT89X52.h>包含头文件,头文件包含特殊功能寄存器的定义void Dclay(unsigned int t); void main (void) (unsigned char i;定义一个无符号字符型局部变率i取值范围0255while (1)主循环(PI=0xfc;for(i=0;i<6;i+) 加入for循环,表明for循环大括号中的程序循环执行6次 (Delay。0000): Pl«=l;Pl 1=0x01; ) ) ) void Delay(unsigned int t) ( whilc(-t);4 .指示逻辑电平通过循环检测P3.2 LI电平输入值,然后用数码管输出”H" or "L",表示该端口现在连接 的是高电平还是低电平。具体程序如下:#include<AT89X52.h>包含头文件,头文件包含特殊功能寄存痣的定义sbit ION=P3"2; 定义IO信号输入端 void main (void) ( while (1)主循环 if(ION=l)如果端口检测到I表示高电平Pl =0x89;/"H"elsePl=0xc7;/"L"否则表示低电平,这里使用条件语句ifelseI ) 5.显示对应键值 现在在如何把P3端I的其余位都接上按犍,那么通过循环检测P3 按键输入值,就 可以用数码管输出,没有按键按下时原值不变。具体程序如卜.:#include<AT89X52.h>包含头文件,头文件包含特殊功能寄存器的定义unsigned char code table| l0=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9(),;H显示数值表0-9 void main (void) ( while (I)主循环switch(P3) P3 I作为独立按键输入端,检测端口电平并做如下判断 (case Oxfe:Pl= tablel;break;/Oxfe =1111 1110, 说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case Oxfd:PI= table2;break; 调用表中的第三个 元素0xa4下标0才表示数组中的第一个元素case Oxfb:PI= table(3;break:case 0xf7:PI= table|4:break;case Oxef:Pl= table ;break;case Oxdf:Pl= table :break;case Oxbf:P1= table(7;break;case Ox7f:P1= table(8:break;default:break; 如果都没按卜,直接跳出 )本任务用两个共阴极数码管来实现温度数据的显示,具体实施过程如下:一、电路连接如图6.11所示两个共阴极数码管以动态显示的方式连接在P0端口上,公共端分别连接 在P3.5和P2.7上,DSI8B20连接在P3.7端口上。VCCU3STC39c52RCU3STC39c52RCT24>IOT2E>W>1 IRST QCWP3 0 圾,P3 1 LKTOiP3 2 M1jP3 3T(VP34 TPP3 5 酮>3 6 RTXV3 7XTAL2 XTALIVSSVCC POtVACO PO l/ADl P0 2/AD2 P01TAD3 PO 4MM P0 5/AD5 P0 6/AD6 P0 7/A£7P27/A15 P2 aAM P2WA13 P24/AUP2VA11 P2 2/A10P2 I/A9 P2(VA8STCM51RC40470DSI88204P<b图6.11数据温度计电路连接二、程序实现include <AT89X52. H> ffinclude <intrins.h> sbit LED1 = P3"6: sbit LEDO = P2c7; sbit dq = P3-7;数据接口为单片机的P3.2 sfr WDT_CONTR=OXE1; 定义看门口bit init (void); 初始化温度传感器函数,返回18b20存在标志位 void writebyte(unsigned char):写温度传感器8位函数,需要传递一个无符号char参数 unsigned char readbyte(void);读温度传感器8位函数,无参数,需返回无符号char量void xianshi (unsigned char); 代表十位的数码管显示数字 void xianshi Kunsignod char); 代表个位的数码管显示数字 void delay(unsigned char); 延时函数 void delay(unsigned char w) (unsigned char k:for(k=w;k>0:k-); 延时时间计算=(参数T) *8+19 初始化函数 bit init(void) bit fig;dq=O: delay(60);dq=l:delay(6);i f(dq=0) flg=dq; else flg=l:delay(25); bit fig;dq=O: delay(60);dq=l:delay(6);i f(dq=0) flg=dq; else flg=l:delay(25);设置18b20存在标志位/将数据线清零延时,此处延时时间处在480us到960us之间释放总线等待dsl8b20将总线拉低产生应答延时,此处的延时时间必处在15us到60us之间判断dsl8b20是否处于低电平延时,此处的延时时间必处在60us到2-lOusreturn fig:)写8位的字节unsigned char i;for (i=8; i>0: i) dq = 0:_nop_();_nop_();dq = chardata & 0x01;可以改变总线的数据了,delay(8):dq = I;chardata »= 1;)读8位的字节unsigned char readbyte(void) unsigned char i=0;unsigned char dat = 0:for (i=8:i>0;i) dat »= 1;dq - 0;nop 0 ;nop ();循环8次dq清零延时,此处延时lus以上即可从传递过来的函数取最低位出来,发送出去延时释放总线数据移位循环8次移位清零延时lus以上void writobyte(unsigned char chardata)dq = 1; _nop

    注意事项

    本文(《单片机应用技术》实训任务书40.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开