C51单片机定时器及数码管控制试验报告_第1页
C51单片机定时器及数码管控制试验报告_第2页
C51单片机定时器及数码管控制试验报告_第3页
C51单片机定时器及数码管控制试验报告_第4页
C51单片机定时器及数码管控制试验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

昆明理工大学信息工程与自动化学院学生实验报告(201—201学年第1学期)课程名称:单片机技术年月日开课实验室:年月日年级、专业、班 学号 姓名 成绩实验项目名称 定时器及数码管控制实验 指导教师B.基本了解口B.中等口B.基本达到口B.B.基本了解口B.中等口B.基本达到口B.基本规范口B.一般口C.不了解口C.差口C.未达到口C.不规范口C.没有口该同学的实验是否达到要求:A.达到口实验报告是否规范: A.规范口实验过程是否详细记录: A.详细口注:5个A为优4个A为良3个A为及格其余为不及格。教师签名:年月日一、实验目的.掌握定时器TO、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。.掌握LED数码管动态显示程序设计方法。二、实验原理.89C51单片机有五个中断源(89C52有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0溢出中断请求、定时器/计数器0溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器ICON和SCON中。当中断源请求中断时,相应标志分别由TCON和SCON的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在同一优先级别中,靠内部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。中断的控制用四个特殊功能寄存器IE、IP、TCON(用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制;2)中断服务程序用于完成中断源所要求的中断处理的各种操作。C51的中断函数必须通过interruptm进行修饰。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。在该修饰符中,m的取值为31,对应的中断情况如下:0——外部中断01一一定时/计数器T02——外部中断13一一定时/计数器T14——串行口中断5——定时/计数器T2其它值预留。89C51单片机内设置了两个可编程的16位定时器TO和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。.定时器TO由特殊功能寄存器TLO和THO构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器TO的中断入口地址为OOOBH,T1的中断入口地址为OOIBHo定时器的编程包括:1)置工作方式。2)置计数初值。3)中断设置。4)启动定时器。定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。.单片机的拉电流比较小(IOOQOOuA),灌电流比较大(最大是25mA,一般不能超过10mA),不能直接驱动数码管,需要扩流电路。可以用三级管来驱动,但是51单片机只有32个I/O口,可能需要外接多种器件,I/O口是不够用的。故可选用74HC573锁存器来解决这个问题,开发板上数码管的硬件设计电路图,如图1所示。TX-1C实验开发板用两个74HC573锁存器(输出电流较大,接口简单),通过P0口控制六个数码管的段选及位选,其中P2.6控制锁存器UI(DULA),P2.7控制锁存器U2(WELA)。单片机控制锁存器的锁存端,进而控制锁存器的输出,这种分时控制的方法可方便地控制任意数码管显示任意数字。图1LED数码管电路原理图三、实验内容利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO"。到此保持住。计算初值公式定时模式1thO=(216-定时时间)/256tlO=(216-定时时间)%256四、实验步骤1、按实验要求在KeilC中创建项目,编辑、编译程序。2、将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中。3、在实验板中运行程序,观察实验运行结果并记录。五、实验结果开始时数码管的数字是765432,随后是765429,流水灯显示的是第一个灯,实验结果如下图所示:当数码管显示765406时,流水灯显示是第六个灯,实现现象如下图所示:当数码管显示765398时,流水灯显示的是第七个灯,由于LED灯变化快,难以捕捉到此时刻,以下图片是随后LED闪烁,数码管保持765398的现象:最后流水灯全部关闭,数码管显示HELLO字样的现象:六、心得体会通过这次实验,巩固了流水灯的操作,在此之上,加深了八段数码管的动态显示的理解,对定时器中断的理解和运用,虽然在实验的的过程中遇到了各种各样的问题,但是在老师和同学们的帮助下,我失算顺利的完成了这次实验,为后续的学习打下了坚实的基础。七、思考.若用定时器1方式2,程序如何修?答:对定时器/计数器的工作方式进行修改,即:TMOD=0x21;〃0010'0001.若显示从“99”开始递减,程序如何修改?答:只需选择第一个和第二个数码管即可,当递减到。时停止,或者继改回数字99,程序的其他部分基本不变。八、源代码#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitledl=P1AO;sbitdula=P2A6;sbitwela=P2A7;ucharcodetable[]={〃建一张table数组,元素是0~F字样0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7(,0x6t0x77,0x76,0x39,0x56,0x79,0x71};ucharcodeHello[]={〃建一张HELLO数组,元素是H,E,L,L,0字样0x76,0x79,0x38,0x38,0x3f};voidinit();〃main()函数初始化的函数的声名voiddelayms(uint);〃延时函数声名voiddisplay(uchar,uchar,uchar);〃数码管显示函数声名voiddisHellof);//HELLO显示函数声名ucharnuml/num2,bai/shi/ge; 〃定义全局变量intcount,temp;voidmain()(while(l)(if(numl==10)〃定时器每次计时50ms,当计满500ms时,LED灯流动{numl=0;Pl=_crol_(Pl,l);〃循环左移)if(num2==2)〃当计满0.1s时,数码管的值减1num2=0;count-;if(count==398)〃当数码管减到765398时,保持该数,8个LED灯闪〃烁{TR1=0;TR0=0;bai=count/100;〃获得398的个、十、百位shi=count/10%10;ge=count%10;display(bai,shi,ge);〃显示数码管的六位数Pl=0x00;/出个LED闪烁的初始状态numl=0;〃重新启动定时器T0时,numl重新初始化为0TRO=1;while(l){if(numl%10==0)//8个LED每隔500ms闪烁P1=~P1;//LED灯取反if(numl==60)〃当计满3s时,关闭LED灯,在数码管上显〃示HELLO(TRO=0;〃关闭定时器TOPl=Oxff;〃关闭LED灯disHello();〃显示HELLO)elsedisplay(bai,shizge);〃当没计满3s时,继续显示之前的6位数))bai=count/100;shi=count/10%10;ge=count%10;)display(bai,shi,ge);))voidinit() 〃main()函数的初始化(TMOD=0x11;〃定时器TO,T1的工作方式都是1TH0=(65536-45872)/256;//TO计数寄存器的初始化TLO=(65536-45872)%256;TH1=(65536-45872)/256;//Tl计数寄存器的初始化TL1=(65536-45872)%256;Pl=Oxfe;//LED的初始化count=432; 〃计数器的初始化,因为只有后三位变化EA=1; 〃打开总中断ETO=1; 〃打开计时器T0TRO=1; 〃打开计时器T1ET1=1; 〃开启计时器TOTRI=1;〃开启计时器T1)voiddisHello()//HELLO显示程序(wela=1;PO=Oxfe;wela=0;P0=Oxff;dula=1;P0=Hello[0];dula=0;delayms(5);wela=1;P0=Oxfd;wela=0;P0=Oxff;dula=1;P0=Hello[l];dula=0;delayms(5);wela=1;PO=Oxfb;wela=0;PO=Oxff;dula=1;P0=Hello[2];dula=0;delayms(5);wela=1;PO=0xf7;wela=0;PO=Oxff;dula=1;P0=Hello[3];dula=0;delayms(5);wela=1;PO=Oxef;wela=0;PO=Oxff;dula=1;P0=Hello[4];dula=0;delayms(5);)voiddisplay(ucharbai,ucharshi.ucharge)〃数码管显示程序来源于网络wela=1;PO=Oxfe;wela=0;PO=Oxff;dula=1;PO=table[7];dula=0;delayms(5);wela=1;PO=Oxfd;wela=0;PO=Oxff;dula=1;PO=table[6];dula=0;delayms(5);wela=1;PO=Oxfb;wela=0;PO=Oxff;dula=1;PO=table[5];dula=0;delayms(5);wela=1;PO=Oxf7;wela=0;PO=Oxff;dula=1;PO=table[bai];dula=0;delayms(5);wela=1;PO=Oxef;wela=0;PO=Oxff;dula=1;PO=table[shi];dula=0;delayms(5);wela=1;PO=Oxdf;wela=0;PO=Oxff;dula=1;PO=table[ge];dula=0;delayms(5);)voi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论