六位数显频率计数器的设计_第1页
六位数显频率计数器的设计_第2页
六位数显频率计数器的设计_第3页
六位数显频率计数器的设计_第4页
六位数显频率计数器的设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、标签: 无标签6位数显频率计数器1 实验任务 利用at89s51单片机的t0、t1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0250khz的信号频率进行准确计数,计数误差不超过1hz。2 电路原理图 图4.31.1 3 系统板上硬件连线 (1) 把“单片机系统”区域中的p0.0p0.7与“动态数码显示”区域中的abcdefgh端口用8芯排线连接。(2) 把“单片机系统”区域中的p2.0p2.7与“动态数码显示”区域中的s1s2s3s4s5s6s7s8端口用8芯排线连接。(3) 把“单片机系统”区域中的p3.4(t0)端子用导线连接到“

2、频率产生器”区域中的wave端子上。4 程序设计内容 (1) 定时/计数器t0和t1的工作方式设置,由图可知,t0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的t0,最大计数值为fosc/24,由于fosc12mhz,因此:t0的最大计数频率为250khz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以t1工作在定时状态下,每定时1秒中到,就停止t0的计数,而从t0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。(2) t1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。5

3、 c语言源程序 #include unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40; unsigned char dispbuf8=0,0,0,0,0,0,10,10; unsigned char temp8; unsigned char dispcount; unsigned char t0count; unsigned char

4、timecount; bit flag; unsigned long x; void main(void) unsigned char i; tmod=0x15; th0=0; tl0=0; th1=(65536-4000)/256; tl1=(65536-4000)%256; tr1=1; tr0=1; et0=1; et1=1; ea=1; while(1) if(flag=1) flag=0; x=t0count*65536+th0*256+tl0; for(i=0;i8;i+) tempi=0; i=0; while(x/10) tempi=x%10; x=x/10; i+; temp

5、i=x; for(i=0;i6;i+) dispbufi=tempi; timecount=0; t0count=0; th0=0; tl0=0; tr0=1; void t0(void) interrupt 1 using 0 t0count+; void t1(void) interrupt 3 using 0 th1=(65536-4000)/256; tl1=(65536-4000)%256; timecount+; if(timecount=250) tr0=0; timecount=0; flag=1; p0=dispcodedispbufdispcount; p2=dispbit

6、dispcount; dispcount+; if(dispcount=8) dispcount=0; 6位led显示单片机控制电子钟/计数器这是我们设计的单片机电子钟/计时器学习板,它采用6位led数码管显示时、分、秒,以24小时计时方式。可以通过按键实现时分调整、秒表时钟功能转换、省电(关闭显示)等功能。我们能提供的完整的汇编语言源程序清单及电路原理设计图有助于学习者进行分析和进行实验验证6位led显示单片机控制电子钟/计数器成品板 成品每套84元51单片机做的电子钟在很多地方都有介绍, 对于单片机学习者来说这个程序基本上是一道门槛,掌握了电子钟程序, 基本上可以说51单片机就掌握了80%

7、。常见的电子钟程序由显示部分、计算部分、时钟调整部分构成,本产品硬件上完全支持倒计时器,客户只要自己修改程序就能实现倒计时功能。 为了实现led显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些。考虑时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定采用动态扫描法实现led的显示。单片机采用易购的at89s51系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能,硬件系统的总体构成如下图所示: 该板采用at89s51单片机,最小化应用设计,采用共阳七段led显示器,p0口输出段码数据,p2.0p2.5做列扫描输出,p1.0,p1.1,

8、p1.2,接三个按键开关,用以调时及功能设置。为了提高共阳数码管的驱动电压,用9012做电源驱动输出。采用12m晶振,有利于提高秒计时的精度。 本设计中,计时采用定时器t0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。其主程序执行流程图见下左图: 数码管显示的数据存放在内存单元70h75h中。其中70h71h存放秒数据,72h73h存放分数据,74h75h存放时数据,每一地址单元内均为十进制bcd码。由于采用软件动态扫描实现数据显示功能,显示用十进制bcd码数据的对应段码存放在rom表中。显示时,先取出70h75h某一地址中的数据,然后查得对应的显示用段码,并从p0

9、口输出,p2口将对应的数码管选中供电,就能显示该地址单元的数据值。 定时器t0用于时间计时。定时溢出中断周期可分别设为50mst和10ms。中断进入后,先判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。时钟计数单元地址分别在70h71h(秒)、76h77h(分)和78h79h(时),最大计时值为23时59分59秒。而秒表计数单元地址也在70h71h(0.01毫秒)、76h77h(秒)和78h79h(分),最大计时值为99分59.99秒。7ah单元内存放“熄灭符”数据(#0ah)。在计数单元中采用十进制bcd码计数,满60

10、(秒表功能时有100)进位,t0中断服务程序执行流程见上图右 t1中断服务程序用于指示调整单元数字的亮闪。在时间调整状态下,每过0.3s将对应单元的显示数据换成“熄灭符”数据(#0ah)。这样在调整时间时,对应调整单元的显示数据会间隔闪亮。调时功能程序的设计方法是:按下p1.0口按键,若按下时间短于1 s则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。当再按下按钮时,若按下时间短于0.5s,则时间加1分;若按下时间长于0.5s,则进入小时调整状态。在小时调整状态下,当按键按下的时间长于0.5s时,退出调整状态,时钟继续走动。p1.1口按键在调时状态下可实

11、现减1功能。在正常状态下,若按下p1.1 口按键,则进行时钟/秒表功能的转换,转换后计时从零开始。当按下p1.2口的按键时,可实现清0、计时启动、暂停功能。使用方法:按下s6按键,如果按下时间小于1秒,就会进入省电模式,这时数码管熄灭但是时钟仍然运行。如果按下s6按键时间大于1秒,就会进入调分状态,此时计时器停止走动等待操作,这时中间的两位00会闪烁,这时当按下s6按键时间小于0.5秒时,时间信息就会加1(单位分钟);若时间大于0.5秒,这时左边的两位00会闪烁,进入小时调整,在小时调整状态下按下s6按键时间小于0.5秒时,时间信息就会加1(单位小时),如果按下按键时间大于0.5s时,就会退出

12、调整状态,时钟继续走动。如果按下s7按键,就会进入1/100秒精确计时模式,如果按一下s8时间就会暂停,再按s8就会清零,再按s8又会进入精确计时模式,在精确时模式,如果按一下s7就会返回正常计时模式。以下是部分汇编源程序,购买我们产品后我们可以通过电子邮件将完整的单片机汇编源程序和烧写文件发送给客户。硬件参数板上资源:isp下载接口(预留)、51mcu、6位led显示、3位按键电源部分自带整流、滤波、稳压电路,输入宽范围(ac7-15v或者dc9-16v),交流直流都能正常使用,不用区分极性。; at89s51时钟程序 ;(该程序不全,不要直接使用。购买产品后提供全部程序和图纸); 定时器t

13、0、t1溢出周期为50ms,t0为秒计数用, t1为调整时闪烁用,; p1.0、p1.1、p1.2为调整按钮,p0口 为字符输出口,采用共阳显示管。; 中断入口程序 ;org 0000h ;程序执行开始地址ljmp start ;跳到标号start执行org 0003h ;外中断0中断程序入口reti ;外中断0中断返回org 000bh ;定时器t0中断程序入口ljmp intt0 ;跳至intto执行org 0013h ;外中断1中断程序入口reti ;外中断1中断返回org 001bh ;定时器t1中断程序入口ljmp intt1 ;跳至intt1执行org 0023h ;串行中断程序入

14、口地址reti ;串行中断程序返回 ; 主 程 序 ;start: lcall st ;上电显示年月日及班级学号mov r0,#70h ;清70h-7ah共11个内存单元mov r7,#0bh ;cleardisp: mov r0,#00h ;inc r0 ;djnz r7,cleardisp ;mov 20h,#00h ;清20h(标志用)mov 7ah,#0ah ;放入熄灭符数据mov tmod,#11h ;设t0、t1为16位定时器mov tl0,#0b0h ;50ms定时初值(t0计时用)mov th0,#3ch ;50ms定时初值mov tl1,#0b0h ;50ms定时初值(t1闪

15、烁定时用)mov th1,#3ch ;50ms定时初值setb ea ;总中断开放setb et0 ;允许t0中断setb tr0 ;开启t0定时器mov r4,#14h ;1秒定时用初值(50ms20)start1: lcall display ;调用显示子程序jnb p1.0,setmm1 ;p1.0口为0时转时间调整程序jnb p1.1,funss ; 秒表功能,p1.1按键调时时作减1加能jnb p1.2,funpt ;stop,puse,clrsjmp start1 ;p1.0口为1时跳回start1setmm1: ljmp setmm ;转到时间调整程序setmmfunss: lc

16、all ds20msjb p1.1,start1wait11: jnb p1.1,wait11cpl 03hmov 70h,#00hmov 71h,#00hmov 76h,#00hmov 77h,#00hmov 78h,#00hmov 79h,#00hajmp start1funpt: lcall ds20msjb p1.2,start1wait22: jnb p1.2,wait21clr et0clr tr0wait33: jb p1.2,wait31lcall ds20msjb p1.2,wait33wait66: jnb p1.2,wait61mov r0,#70h ;清70h-79h共

17、10个内存单元mov r7,#0ah ;clearp: mov r0,#00h ;inc r0 ;djnz r7,clearp ;wait44: jb p1.2,wait41lcall ds20msjb p1.2,wait44wait55: jnb p1.2,wait51setb et0setb tr0ajmp start1wait21: lcall displayajmp wait22wait31: lcall displayajmp wait33wait41: lcall displayajmp wait44wait51: lcall displayajmp wait55wait61: l

18、call displayajmp wait66 ; 1秒计时程序 ;t0中断服务程序intt0: push acc ;累加器入栈保护push psw ;状态字入栈保护clr et0 ;关t0中断允许clr tr0 ;关闭定时器t0jb 03h,fssmov a,#0b7h ;中断响应时间同步修正add a,tl0 ;低8位初值修正mov tl0,a ;重装初值(低8位修正值)mov a,#3ch ;高8位初值修正addc a,th0 ;mov th0,a ;重装初值(高8位修正值)setb tr0 ;开启定时器t0djnz r4, outt0 ;20次中断未到中断退出addss: mov r4

19、,#14h ;20次中断到(1秒)重赋初值mov r0,#71h ;指向秒计时单元(71h-72h)acall add1 ;调用加1程序(加1秒操作)mov a,r3 ;秒数据放入a(r3为2位十进制数组合)clr c ;清进位标志cjne a,#60h,addmm ;addmm: jc outt0 ;小于60秒时中断退出acall clr0 ;大于或等于60秒时对秒计时单元清0mov r0,#77h ;指向分计时单元(76h-77h)acall add1 ;分计时单元加1分钟mov a,r3 ;分数据放入aclr c ;清进位标志cjne a,#60h,addhh ;addhh: jc ou

20、tt0 ;小于60分时中断退出acall clr0 ;大于或等于60分时分计时单元清0mov r0,#79h ;指向小时计时单元(78h-79h)acall add1 ;小时计时单元加1小时mov a,r3 ;时数据放入aclr c ;清进位标志jb 03h,outt0 ;秒表时最大数为99cjne a,#24h,hour ;hour: jc outt0 ;小于24小时中断退出acall clr0 ;大于或等于24小时小时计时单元清0outt0: mov 72h,76h ;中断退出时将分、时计时单元数据移mov 73h,77h ;入对应显示单元mov 74h,78h ;mov 75h,79h ;pop psw ;恢复状态字(出栈)pop acc ;恢复累加器setb et0 ;开放t0中断reti ;中断返回;秒表计时程序(10ms加1),低2位为0.1、0.01秒,中间2位为秒,最高位为分。;最大计数值为99fss: mov a,#0f7h ;中断响应时间同步修正,重装初值(10ms)add a,tl0 ;低8位初值修正mov tl0,a ;重装初值(低8位修正值)mov a,#0d8h ;高8位初值修正addc a,th0 ;mov th0,a ;重装初

温馨提示

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

评论

0/150

提交评论