单片机时间显示模块设计说明书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单元4时间显示模块设计回顾1,8051单片机最小系统的组成?2,单片机运行以什么单位计算时间?3,单片机如何驱动LED?本单元任务任务1数码管显示设计任务2定时器应用设计任务3DS1302时钟设计任务4按键计数设计任务1数码管显示设计任务描述:任务分析:LED数码管显示器作为嵌入式单片机应用产品中常用的廉价输出设备,更是单片机系统设计经常使用的显示设备。本任务要求设计时间显示模块,模拟24小时制时间运行,时间初始为10点整。模拟24小时运行,需用6位LED数码管(小时、分钟、秒各需2位)进行显示。先将LED数码管安装在单片机I/O上,程序设计初始时间为10:00:00,每隔一定时间,单位秒加1,并进行秒、分钟、小时的正确进位即可。1,七段LED数码管工作原理七段LED数码管是由发光二级管排列构成.由(a—g7段)和1个圆点(dp)组成。LED数码管的的连接方式有共阳极和共阴极两种。共阴极:把各段发光二极管的阴极连接在一起,然后通过接地或低电平,如下图示,根据要求需点亮发光二极管的阳极输入高电平,不需点亮的发光二极管的阳极输入低电平。共阳极:把各段发光二极管的阳极连接在一起,然后通过接电源或高电平,如下图示,根据要求需点亮发光二极管的阴极输入低电平,不需点亮的发光二极管的阴极输入高电平。通过控制7段发光二极不同组合的亮灭,显示出不同的数字与字母。例如你要用单片机控制数码管显示3的数字,那就要分别点亮发光二极管的a,b,c,d,g段,如下图示(共阳极).七段码LED显示器字形编码:请同学们理解每个字符的编码由来显示字符共阳极共阴极显示字符共阳极共阴极00xC00x3FC0xC60x3910xF90x06D0xA10x5E20xA40x5BE0x860x7930xB00x4FF0x8E0x7140x990x66P0x8C0x7350x920x6DU0xC10x3E60x820x7DR0xCE0x3170xF80x07Y0x910x6E80x800x7F亮0x000xFF90x900x6F灭0xFF0x00A0x880x77H0x890x76B0x830x7CL0xC70x38【例4-1】试设计驱动1位数码管显示8个流水灯点亮的序号。设计分析:流水LED灯和P1口相连,1位数码管的段选线和P2相连,位选线直接和电源(高电平)相连,使得数码管处于一直工作状态而无需编程选中,如图4-5所示。当第一个LED点亮时,编程驱动数码管显示“1”,当第二个LED点亮时,编程驱动数码管显示“2”……即数码管的显示内容跟随着被点亮LED的序号而改变。voidmain(){unsignedchari=0;while(1){P1=led_light[i];//点亮对应的LEDP2=seg7_light[i];//LED显示相应的数字delay();i++;//i自加1if(i==8)i=0;//判断是否点亮最后一个LED,是则重新点亮}}2,数码管显示方式静态显示方式每位数码管的段选线和位选线是独立的,所以同一时刻可以显示不同的字符,编程简单。但是这样很浪费单片机的I/O口资源,N位静态数码管就要求有N×8根I/O接口线,所以适合数码管较少的场合。动态显示方式:动态显示方式的接口电路的连接是将所有数码管的段选线(a~dp)同名并联,如所有a段并联,所有b段并联……,然后有一个8位的I/O接口来控制各个段。而每位数码管的位选线由相应的I/O接口控制,每一瞬间只有一位数码管的位选线被选中,所以每一瞬间只能显示一位数码管,同样,下一瞬间只选中另一位数码管的位选线,所以下一瞬间也只能显示下一位数码管。等所有数码管都扫描完毕后,又再进行下一轮的循环扫描。由于扫描时间很短,人眼的视觉残留效应,所以看到的是所有数码管一起显示。【例4-2】试设计驱动2位数码管动态显示“28”。设计分析:2位数码管与单片机连接如图4-10所示,其中段选线和P0口相连,位选线则分别由P2.6、P2.7控制。根据数码管动态显示—每次只选中1位数码管工作的扫描原理,程序设计上先扫描显示第1位数码管(只需位选第1位数码管P2=0xbf,“2”的编码赋值给段选线P0=0xa4),接着扫描显示第2位数码管(只需位选第2位数码管P2=0x7f,“8”的编码赋值给段选线P0=0x80)。voidmain(){while(1){P2=0xbf;//位选数码管,即选中第一位数码管P0=0xa4;//段选数码管,“2”的编码赋值给P0display_delay();//显示延时P0=0xff;//关闭显示P2=0x7f;//位选数码管,即选中第二位数码管P0=0x80;//段选数码管,“8”的编码赋值给P0display_delay();//显示延时P0=0xff;//关闭显示}}1.Proteus电路设计2.KeilC51程序设计3.Proteus-Keil联合调试仿真任务实施硬件电路图(1)程序流程初始时间为10点整。主程序循环扫描6个数码管动态显示,由于扫描速度很快,因此在程序设计上,考虑6个数码管动态扫描多次(100)后,再进行显示加1。同时注意秒、分钟、小时的进制进位。驱动点亮数码管模拟时间显示i=100?Ysecond2=6?YNN开始second1=10?NY初始时间变量为10点整初始循环扫描变量i为0变量second1加1变量i加1变量i清0变量second1清0变量second2加1min1=10?N变量second2清0变量min1加1min2=6?N变量min1清0变量min2加1hour1=10?N变量min2清0变量hour1加1hour2=2&&hour1=4N变量hour1清0变量hour2加1YYhour1、hour2清0YY运行Proteus-Keil联合调试仿真任务2定时器应用设计任务描述:任务分析:任务1仿24小时制运行,其精度无法达到实用价值,本任务要求设计实用的时钟,驱动六个数码管按24小时制显示运行。嵌入式程序设计中经常定义函数实现延时,这对于要求不高、无需精确的的情况下,尚无大碍。然而在某些场合对时间的精度要求比较高,比如时钟设计,如果仍然采用延时程序进行秒、分钟、小时的延时设计,随着运行时间的增加,其累积误差就会很大,甚至导致项目设计的失败。另一方面由于单片机系统一般是多任务系统,延时程序运行的同时将使单片机CPU无法快速执行其他代码,从而不符合设计要求。本任务学习单片机定时/计数器部件,其定时功能满足对时间有严格要求的场合。1.定时/计数器结构2.定时器如何计算时间在“内部计时器”功能下,每个机器周期定时器的值增1。因此,可以说此时的定时器是在计数机器周期。一个机器周期由12个晶振周期组成。当晶振频率为12MHz时:12,000,000/12=1,000,000就是每秒钟有1,000,000个机器周期,即每个机器周期的时间是1μs。定时器的值是在每个机器周期下(1us)增1;课堂思考:(1)当晶振频率为6MHz时,定时器的值多长时间加1?(2)12MHz晶振频率下,要求一次溢出定时时间为10us,请问定时寄存器THx/TLx计数多少次产生溢出?如果将晶振频率改为6MHz呢?定时器工作模式需要在定时器模式寄存器TMOD(TimerModeControlRegister)中进行编程设定。定时器模式寄存器TMOD不可以位寻址。位符号功能说明7GATE定时器1门控制位(Timer1GatingControlBit)当TCON中的TR0设定为1,并且GATE=1,定时器1(Time1)只在INT1引脚为高电平时计时(或计数)当GATE=0时,定时器1(Time1)只在TCON中的TR0设定为1时计时(或计数)6C/T定时器1定时、计数功能选择位(Timer1Counter/TimerSelectBit)C/T=0时,定时器1(Time1)工作于计时方式C/T=1时,定时器1(Time1)工作于计数方式5M1定时器1工作模式选择位(Timer1ModeSelectBit)4M0定时器1工作模式选择位(Timer1ModeSelectBit)3GATE定时器0门控制位(Timer0GatingControlBit)当TCON中的TR0设定为1,并且GATE=1,定时器0(Time0)只在INT0引脚为高电平时计时(或计数)当GATE=0时,定时器0(Time0)只在TCON中的TR0设定为1时计时(或计数)2C/T定时、计数功能选择位(Timer0Counter/TimerSelectBit)C/T=0时,定时器0(Time0)工作于计时方式C/T=1时,定时器0(Time0)工作于计数方式1M1定时器0工作模式选择位(Timer0ModeSelectBits)0M0定时器0工作模式选择位(Timer0ModeSelectBits)3.定时器专用寄存器MODEM1M0模式说明00013位定时器10116位定时器2108位定时器;自动加载311TL0为8位计时(或计数)器,由T0控制;TH0为另一计时(或计数)器,由T1控制;TL1、TH1此时不使用。特殊功能寄存器TCOD也称为定时器控制寄存器。定时寄存器(TimerRegister)定时器由两个8位寄存器组成,分别是高字节寄存器(HighByteRegister)和低字节寄存器(LowByteRegister)。对于定时器0分别对应TH0寄存器(TH0Register)和TL0寄存器(TL0Register),对于定时器1则分别对应TH1寄存器和TL1寄存器。这两个寄存器在模式0、模式1时组合成字数据寄存器使用,在模式2时分别使用,定时器0模式3分别使用,定时器1模式3不使用。TR0:定时器0运行控制位(Timer0RunControlBit)由软件置1或清0。置1时定时器0启动,清0时定时器0停止ET0:定时器0中断控制位(Timer0interruptControlBit)由软件置1或清0。置1时允许定时器0中断,清0时关闭定时器0中断4.定时器工作方式通过设置TMOD寄存器的M1、M0位,可以构成定时器的4种工作方式。(1)方式0(2)方式1(3)方式2(4)方式35.定时器的设置与控制初始设置8051单片机内部的定时器/计数器是可编程的,其工作方式和工作过程均可通过程序进行设定和控制,需要初始设置的内容如下:先给定时器方式寄存器TMOD送一个方式控制字,设定使用哪个定时器及相应的工作方式;给定时寄存器(THx,TLx)送定时初值,确定需要定时的时间;根据需要给中断允许寄存器IE送中断控制字,给中断优先级寄存器IP送优先级控制字,以开放相应中断和设定中断优先级;给定时器控制寄存器TCON送命令字,启/停定时器运行。【例4-4】晶振频率为12Mhz,选择T0定时1ms,在只依靠软件控制定时器计数开关的情况下,请设置正确的T0的相关寄存器?分析:选择定时器T0,即需设置T0相关寄存器TMOD、TH0、TL0、TCON。(1)晶振频率12Mhz情况下,每个机器周期是1μs,定时1ms即是1000us。而方式2、3为8位计数器,一次溢出最长时间为256us,需要多次溢出才能达到1ms的定时要求,这样将增加编程复杂性。如果采用方式0、方式1,它们一次溢出最长时间分别为8193us、65536us,即一次溢出范围内即可实现定时1000us。因此可设置采用T0方式1进行定时,由于只依靠软件控制定时启/停,即GATE应为0。TMOD的高4位用来控制T1,可全部清“0”,只需设置TMOD低4位TMOD用字节指令赋值为:TMOD=0x01;(2)由于12MHz晶振频率下的机器周器为1us,因此周期定时1ms需要计数1,000个机器周期,也就是定时寄存器TH0/TL0数值累计增加1,000即可。为了方便掌握定时时间结束的时间点,将定时寄存器设置为刚好经过1,000累加就溢出。下面是设置定时寄存器的初始值过程:65536-1000=64536;将645

1 / 74
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功