毕业设计基于单片机的频率计设计 下载本文

常州信息职业技术学院电子与电气工程学院 毕业设计论文

表6-1 LED十进制字形显示代码表

0 --------------------------- FC 1 --------------------------- 60 2 --------------------------- DA 3 -------------------------- F2 4 --------------------------- 66 5 -------------------------- B6 6 --------------------------- BE 7 --------------------------- E0 8 --------------------------- FE 9 --------------------------- E6

将十进制数转换为相应的LED显示的代码,最容易实现的编程方法就是查表,因数码管最多只需要显示六位,只需要查六次表就可以了,图6-4是将十进制数对应的LED显示代码存入以60H为首单元的流程图。

R0=#50HR1=#5FHR2=#6DPTR=#TAB开始

@R0→A@A+DPTR→ANR0+1→R0R1+1→R1A→@R1R2-1=0?Y结束图6-3 十进制数转换为显示代码流程图

19

常州信息职业技术学院电子与电气工程学院 毕业设计论文

MOV @R1,A ;把即将数码管显示的数据送入以60H为首的单元 DJNZ R2,NEXT3

TAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H

得到十进制数的LED显示代码以后,就可以把这些代码送入数码管显示了,方法是50单片机先通过I2C通信的方式把显示代码发送给数码管管理芯片ZLG7290相应的显示区域,就可以通过数码管显示频率了。51单片机通过I2C通信传送数据的过程如图6-5所示。

发送发送控制字并检查应答位发送地址并检查应答位多字节发送并检查应答位发送停止位

起始位

图6-4 I2C通信过程框图

20

常州信息职业技术学院电子与电气工程学院 毕业设计论文

第7章 频率计系统总体程序

各单元子程序已经设计完毕,将各子程序通过适当的指令链接起来,总程序的第一部分为T0、T1初始化,第二部分为1s定时,第三部分为计数,第四部分为采集频率,第五福分为进制转化,第六部分为数码显示,这几各部分构成的频率计系统总体程序如下所示:

;ydg于2001年,第1秒显示012345

;T0用于产生秒信号

;T1用于计数,溢出送5FH,1秒后取出,5FH-62H,TH1-61H,TL1-60H ;1MHZ频率计

P_B1 EQU P3.7 P_B2 EQU P3.1 P_B3 EQU P3.0 P_B4 EQU P3.2 P_B5 EQU P3.3 P_B6 EQU P3.4

ORG 000H ;

AJMP MAIN ;转主程序 ORG 00BH

AJMP T0_ ;转中断T0程序 ORG 01BH ;

AJMP T1_ ;转中断T1程序 ORG 30H ;

MAIN: MOV SP,#20H ; MOV P1,#000H ; MOV P3,#0FFH ;

MOV R0,#30H ;首地址 MOV R1,#006 ;字节数 MOV A,#000H ;首字节 KN: MOV @R0,A ; INC R0 ; INC A ; DJNZ R1,KN ;

ACALL T0_0 ;中断初始化 XS1: CLR A ;装显示第一位 MOV R0,#30H ;

MOV A,@R0 ; ACALL OUT ; CLR P_B1 ;

21

常州信息职业技术学院电子与电气工程学院 毕业设计论文

ACALL KL0 ;1位显示(高) SETB P_B1 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B2 ;

ACALL KL0 ;2位显示 SETB P_B2 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ;

CLR P_B3 ; ACALL KL0 ;3 SETB P_B3 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B4 ;

ACALL KL0 ;4 SETB P_B4 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B5 ;

ACALL KL0 ;5 SETB P_B5 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ;

CLR P_B6 ; ACALL KL0 ;6 SETB P_B6 ;

MOV P1,#00H ; AJMP XS1 ;

T0_: DJNZ 3AH,END_ ; NOP ;1000,000US CLR TR1 ;

打开此位 位显示 关闭此位 位显示 位显示 打开此位 位显示(低) 关闭此位 关显示器 中断最高位减一,不为零转结束 时基修终正细调 时间为1秒,关闭T1计数

22

常州信息职业技术学院电子与电气工程学院 毕业设计论文

MOV 61H,TH1 ;读T1高位 MOV 62H,TL1 ;读T1低位

MOV P1,#000H ;关闭显示 ; MOV P3,#0FFH ;

ACALL T0_0 ;中断初始化

ACALL BINBCD ;二进制转十进制数

NOP ;(60H,61H,62H)(70H,71H,72H,73H)(77H) ACALL BCD8H ;双字节转单字节

NOP ;73H74H75H = 30H31H,32H33H,34H35H ACALL H_0 ;高位无效0消隐 END_: RETI

T1_: INC 60H ;溢出次数加1= 65535,最高字节 RETI ;中断结束

T0_0: MOV 5FH,60H

MOV 60H,#00H ;计数最高位 NOP

MOV 3AH,#01FH ;中断最高位

MOV TMOD,#51H ;T0T1初始化T0置模式1,16位定时,T1置模式1,16位计数

MOV TH0,#07BH ;T0高位置初值 H

MOV TL0,#094H ;T0低位置初值 L 时基修终正粗调 MOV TH1,#00H ;T1高位置初值 H MOV TL1,#00H ;T1低位置初值 L SETB TR0 ;启动T0计数 SETB ET0 ;允许T0中断 SETB TR1 ;启动T1计数 SETB ET1 ;允许T1中断 SETB EA ;CPU开放中断 RET ;

OUT: MOV P1,#00H

MOV DPTR,#TAB ; MOVC A,@A+DPTR ;

MOV P1,A ;输出 RET

;程序用途:3字节数转换为BCD码

;入口:(60H,61H,62H)为3字节24位二进制数 从高到低

;出口:(70H,71H,72H,73H)为转换的BCD码(压缩的BCD码),字节在数77H 从高到低

BINBCD: CLR A ;A 清零 MOV 70H,A ;70H清零 MOV 71H,A ;71H清零

23