收藏 分销(赏)

51单片机1602LCD显示数字频率计.docx

上传人:精*** 文档编号:10154124 上传时间:2025-04-23 格式:DOCX 页数:8 大小:26.76KB 下载积分:6 金币
下载 相关 举报
51单片机1602LCD显示数字频率计.docx_第1页
第1页 / 共8页
51单片机1602LCD显示数字频率计.docx_第2页
第2页 / 共8页


点击查看更多>>
资源描述
;硬件连接:1602lcd 显示 hz 短接 p1.4--p3.则显示 010hz ;LCD1602显示在不增加外部计数硬件的情况下,本试验软件可测最高频率达到460KHz ;工作原理: ;1S钟内对输入脉冲所计数的次数则为频率值。 ;16位二进制加法计数器的最大计数值为65535。 ;设置定时器0工作在定时方式1,定时1S。 ;设置定时器1工作在计数方式1,对输入脉冲进行计数,溢出产生中断。 ;将定时器1中断定义为优先。在中断处理程序里对中断次数进行计数°1S到后, ;将中断次数和计数器里的计数值取出进行综合数据处理,处理后的数据送LCD1602显示? ;信号来源: ;1、软件里对P1.4定时取反,形成输出脉冲,接到P3.5可自测。 ;显示结果:P1.4 - P3.5 显示: 10(Hz) ;如果有条件的话,可使用专用设备(信号发生器和频率计)进行校正。 ;频率计的程序 ;包含:外部中断设置,中断服务程序,定时程序,定时服务程序 ;以及数据处理,显示,包括三位十进制数转化为四位BCD码, ; INT_G EQU 35H INT_H EQU 34H INT_L EQU 33H ;中断计数缓冲单元高地址 ;中断计数缓冲单元中地址 ;中断计数缓冲单元低地址 BEEP LCD_RS BIT P3.7 BIT P2.0 LCD_RW BIT P2.1 LCD_EN BIT P2.2 LCD_X EQU 3FH;LCD地址变量 TIMER_H EQU 30H;定时器高位字节单元 TIMER_L EQU 31H;定时器低位字节单元 TIMCOUNT 'EQU 32H;时间中断数 T_S EQU 36H ;数据显示低位 T_M EQU 37H ;数据显示中位 T_H EQU 38H ;数据显示高位 T_G EQU 39H ;数据显示最高位 ; ORG H JMP MAIN;主程序开始 ORG 0BH JMP TIMER_INT;定时器T0中断服务程序 ORG 1BH;定时器T1中断服务程序 JMP TIMER1 ORG 30H MAIN: MOV SP,#60H;设置 SP 指针 LCALL PRO_SET;初始化 CALL SET_LCD LCALL TIM_T0 ; ;LCD1602是慢速显示器件,故1MS显示一次。 ; MAIN1: MOV R5,40 MAIN2: ACALL DELAY1;3ms DJNZ R5,MAIN2 ACALL SBIN_SBCD CALL CONV JMP MAIN1 ; ;T1计数器中断服务子程序 ;计T1计数器溢出次数 ; TIMER1: INC 2AH RETI ; ;初始化程序 ; PRO_SET: MOV A,#H MOV B,#H MOV 2AH,A MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV INT_H,#H MOV INT_L,#H MOV INT_G,#H MOV T_S,#H MOV T_H,#H MOV T_M,#H MOV T_G,#H MOV TIMCOUNT,#H MOV TIMER_H,#04CH;定时 50 MS MOV TIMER_L,#10H ; CLR BEEP SETB P3.5;P3.5端 置输入状态 RET;T1(TIMER1的外部输入脚) ; ;LCD初始化设置 ; SET_LCD: - CLR LCD_EN CALL INIT_LCD ;初始化LCD CALL DELAY1 MOV DPTR,#INFO1 ;指针指到显示信息1 MOV A,#1 ;显示在第一行 CALL LCD_SHOW MOV DPTR,#INFO2 ';指针指到显示信息2 MOV A,#2 ;显示在第二行 CALL LCD_SHOW RET ; INFO1: DB " CYMOMETER ",0 ;LCD第一行显示信息 INFO2: DB "FREQ:HZ ",0 ;LCD 第二行显示信息 ; ;LCD接初始化 ;8位I/O控制 ; INIT_LCD: MOV A,#38H ;双列显示,字形5*7点阵 CALL WCOM CALL DELAY1 MOV A,#38H ;双列显示,字形5*7点阵 CALL WCOM CALL DELAY1 MOV A,#38H ;双列显示,字形5*7点阵 CALL WCOM CALL DELAY1 MOV A,#0CH ;开显示,关光标, CALL WCOM CALL DELAY1 MOV A,#01H ;清除LCD显示屏 CALL WCOM CALL DELAY1 RET ; LCD_SHOW: ;在LCD的第一行或第二行显示信息字符 CJNE A,#1,LINE2 ;判断是否为第一行 LINE1: MOV A,#80H;设置LCD的第一行地址 CALL WCOM;写入命令 CALL CLR_LINE;清除该行字符数据 MOV A,#80H;设置 LCD 的第一行地址 CALL WCOM;写入命令 JMP FILL LINE2: MOV A,#0C0H;设置 LCD 的第二行地址 CALL WCOM;写入命令 CALL CLR_LINE;清除该行字符数据 MOV A,#0C0H;设置 LCD 的第二行地址 CALL WCOM FILL: CLR A ;填入字符 MOVC A,@A+DPTR ;由消息区取出字符 CJNE A,#0,LC1;判断是否为结束码 RET LC1:CALL WDATA;写入数据 INC DPTR;指针加1 JMP FILL;继续填入字符 RET , CLR_LINE: ;清除该行 LCD 的字符 MOV R0,#24 CL1: MOV A,#’ ’ CALL WDATA DJNZ R0,CL1 RET , ;写指令、数据使能子程序 ; ENABLE: ;写指令使能 CLR LCD_RS;RS=L,LCD_RW=L,D0-D7指*令码,E=高脉冲 CLR LCD_RW SETB LCD_EN CALL DELAY0 CLR LCD_EN RET ENABLE1: ;写数据使能 SETB LCD_RS;RS=H,RW=L,D0-D7=S据,E=高脉冲 CLR LCD_RW SETB LCD_EN CALL DELAY0 CLR LCD_EN RET DELAY0: MOV DJNZ RET R7,#250 R7,$ ;延时5微秒 ; ;写入命令子程序 ; WCOM: MOV CALL RET P0,A ENABLE ;以8位控制方式将命令写至LCD ;写入命令 ; ;写入数据子程序 ; WDATA: MOV CALL RET P0,A ENABLE1 ;以8位控制方式将数据写至LCD ;写入数据 ; ;在LCD第二行显示字符 ;A=ASC DATA, B=LINE X POS ; LCDP2: PUSH MOV ADD CALL POP CALL RET - ;在LCD的第二行显示字符 ACC A,B A,#0C0H WCOM ACC WDATA ; ;设置显示地址 ;设置LCD的第二行地址 ;写入命令 ;由堆栈取出A ;写入数据 ; ;ASCII转换并在第二行显示数字子程序 ; CONV: ; MOV A,T_G MOV LCD_X,#6 ;设置位置 ; CALL ,SHOW_DIG2 MOV A,T_H ;INC LCD_X ;加载小时数据 CALL SHOW_DIG2 ;显示数据 MOV A,T_M ;加载分钟数据 INC LCD_X ;设置位置 CALL MOV INC CALL RET SHOW_DIG2 A,T_S LCD_X SHOW_DIG2 ;显示数据 ;加载秒数数据 ;设置位置 ;显示数据 ; SHOW_DIG2: MOV DIV ADD PUSH MOV CALL POP MOV ADD INC MOV CALL RET B,#16 AB A, #30H B B, LCD_X LCDP2 B A,B A, #30H LCD_X B, LCD_X LCDP2 - ; DELAY1: D2: MOV R6,#15 MOV R7,#1 DJNZ R7,$ DJNZ R6,D2 RET - ;延时3MS ;/-- - -旧出 ;设置定时器0工作在定时方式1,定时器1工作在计数方式1 ; TIM_T0: MOV TMOD,#0D1H MOV TH0,TIMER_H MOV TL0,TIMER_L MOV TH1,#H MOV TL1,#H MOV IE,#8AH SETB PT1 SETB TR1 SETB TR0 RET ;设置定时初值高位 ;设置定时初值低位 ;清计数器 ;开中断总允许,允许T0溢出中断 ;定时器开始工作 ; 淀时器0中断服务程序 ; TIMER_INT: CLR TR0 ;关闭定时器 MOV TL0,TIMER_L ;重新赋初值 MOV TH0,TIMER_H ; INC TIMCOUNT ;定时1S,时间单位 MOV A,TIMCOUNT ;查看数量值 CPL P1.4 ;产生自测信号 CJNE ;A,#20,T_END ;如果没有到1S返回 CLR TR1 ;关闭计数器T1 MOV TIMCOUNT,#H ;到1S则清零 MOV INT_L,TL1 ;取出计数值低位 MOV INT_H,TH1 ;取出计数值高位 MOV INT_G,2AH ;取出溢出计数值位 MOV TH1,#H MOV TL1,#H MOV 2AH,#H SETB TR1 T_END: SETB TR0 ;重新开始定时操作 RETI ; ;三字节二进制整数转换成四字节BCD码子程序 ;二进制数从低位到高位分别存放在INT_L int_h、int_g单元中 ;BCD码从低位到高位分别存放在T_S、T_M、T_H、T_G单元中 ; SBIN_SBCD: PUSH PSW SETB PSW.3;设置当前寄存器 CLR PSW.4 CLR A;清累加器 MOV T_G,A MOV T_H,A;清除出单元,准备转换 MOV T_M,A MOV T_S,A MOV R5,INT_G MOV R7,INT_L;设置二进制数起始地址 MOV R6,INT_H MOV R2,#24 CLR C HH1: MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 RLC A MOV R5,A MOV A,T_S ;得到低位数据 ADDC A,T_S ;累加 DA A ;十进制调整 MOV T_S,A ;保存数据 MOV A,T_M ;得到第二位数据 ADDC A,T_M ;累加 DA A ;十进制调整 MOV T_M,A ;保存结果 MOV A,T_H ;得到第三位 ADDC A,T_H DA A ;累加 MOV T_H,A ;保存 MOV A,T_G ;得到第四位 ADDC A,T_G ;DA A MOV T_G,A ;累加 DJNZ R2,HH1 POP PSW RET END ;告诉编译器本程序到此结束。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服