《基于单片机的窄带脉冲宽度检测数字钟频率计电子琴程序.doc》由会员分享,可在线阅读,更多相关《基于单片机的窄带脉冲宽度检测数字钟频率计电子琴程序.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 单片机原理与应用课程设计 学院名称: 班 级: 姓 名: 学 号: 指导老师: 基于单片机(AT89C51)的频率计设计1.3 技术指标设计要求的技术指标有:输入脉冲幅度:0-5v周期量测量范围:0.1ms50ms测量精度1%显示方式:四位数字显示ORG 0000H ;程序复位入口地址AJMP MAIN ORG 001BH ;计时器T1的中断入口AJMP PTF0 ;跳转到中断程序中ORG 0033H ;主程序入口地址MAIN:MOV SP, #60H MOV TH1, #0FAH MOV TL1,#60H
2、;定时4mS SETB EA ;开放CPU中断 SETB ET1 ;开放定时器中断 MOV TH0,#00H MOV TL0,#00H ;给计数器T0赋初值0 MOV TMOD,#15H ;计时器T1工作在方式1定时模式,计数器T0工作在方式1 计数模式 MOV 30H,#0FAH ;循环250次,共定时1S MOV 40H,#0 ;用于判断显示数码管哪一位 SETB TR0 ;启动计数器0 SETB TR1 ;启动定时器1 LOOP1:ACALL ZHUANH ;将二进制数转换为压缩BCD码 ACALL CHAIF ;将压缩BCD码转换为非压缩BCD码 AJMP LOOP1 ; 循环处理计数
3、器T0采集得到的数据 PTF0:MOV TH1, #0F0H MOV TL1,#60H ;给定时器T1重新赋值 INC 40H ;数码管判断位加1 MOV A,50H CJNE A,#00H,DAY ;判断50H单元是否为零,若为0继续往下执行,若不为0,则跳转到子程序DAY中 MOV A,40H ;每4ms显示一位,从最高位开始,到最低位时,返回高位 CJNE A,#1,LOP1 ACALL QIANW AJMP TIAO LOP1:CJNE A,#2,LOP2 ACALL BAIW AJMP TIAO LOP2:CJNE A,#3,LOP3 ACALL SHIW AJMP TIAO LOP
4、3:ACALL GEW MOV 40H,#0 AJMP TIAO DAY: MOV A,40H CJNE A,#1,LP1 ACALL QIANW1 AJMP TIAO LP1:CJNE A,#2,LP2 ACALL BAIW1 AJMP TIAO LP2:CJNE A,#3,LP3 ACALL SHIW1 AJMP TIAO LP3:ACALL GEW1 MOV 40H,#0 TIAO:DJNZ 30H,PTFR ;判断是否到1S MOV 20H,TH0 MOV 21H,TL0 ;将计数器T0中的数转移到20H,21H中 MOV TH0,#0 MOV TL0,#0 ;将计数器T0重新赋0 M
5、OV 30H,#0FAHPTFR:RETIZHUANH:MOV R2,20H ;将计数得到的值存入R2和R3中 MOV R3,21H CLR A MOV R4 ,A ;将R4、R5、R6清零 MOV R5 ,A MOV R6,A MOV R7,#16 LOOP:CLR C ; 将16位二进制数逐位左移一位 ,移得的数据放入进位C中 MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ;(R4R5R6)+(R4R5R6)+C=(R4R5R6)*2+C ADDC A,R6 DA A MOV R6,A MOV A,R5 ADDC A,R5
6、 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LOOP RET CHAIF:MOV A,R5 ;将压缩BCD码R4R5R6转换为非压缩BCD码 ,从高到低依次放于50H、51H、52H、53H、54H ANL A,#0F0H SWAP A MOV 52H,A MOV A,R5 ANL A,#0FH MOV 51H,A MOV A,R6 ANL A,#0F0H SWAP A MOV 53H,A MOV A,R6 ANL A,#0FH MOV 54H,A MOV 50H,R4 RET QIANW: MOV A,52H ;频率不超过1
7、0KHZ时,以HZ为单位,四位显示,最高位为千位,以此类推 MOV DPTR,#TAB ;千位上显示51H单元中的内容 MOVC A,A+DPTR MOV P0,A MOV P2,#0F7H RET BAIW:MOV A,51H ;百位上显示52H单元中的内容 MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A MOV P2,#0FBH RET SHIW:MOV A,53H ;十位上显示53H单元中的内容 MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A MOV P2,#0FDH RET GEW:MOV A,54H ;个位上显示54H单元中的内容
8、MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A MOV P2,#0FEH RET QIANW1:MOV A,50H ;频率大于10KHZ时,小数点放千位,以KHZ为单位,省去个位,以四位显示 MOV DPTR,#TAB ;千位上显示50H单元中的内容 MOVC A,A+DPTR MOV P0,A MOV P2,#0F7H RET BAIW1:MOV A,52H ;百位上显示51H单元中的内容和显示小数点 MOV DPTR,#TAB1 MOVC A,A+DPTR MOV P0,A MOV P2,#0FBH RET SHIW1: MOV A,51H ;十位上显示52H单元
9、中的内容 MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A MOV P2,#0FDH RET GEW1:MOV A,53H ;个位上显示53H单元中的内容 MOV DPTR,#TAB MOVC A,A+DPTR MOV P0,A MOV P2,#0FEH RET TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH TAB1:DB 0F7H,0C1H,0BBH,0EBH,0CDH,0EEH,0FEH,0C3H,0FFH,0EFH NOP END基于单片机的数字钟设计1.3 技术指标设计要求的技术指标有:输入脉冲幅度:0-5v周期量
10、测量范围:0.1ms50ms测量精度1%显示方式:四位数字显示 ORG 0000H AJMP MAIN ORG 000BH AJMP PTF0 ORG 0033H TAB: DB 7EH,48H,3DH,6DH,4BH,67H,77H,4CH,7FH,6FH ;不带小数点TAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点TAB2: DB 01H,02H,04H,08H,10H,20H,40H,80H,00H ;自检a-h PTF0: PUSH PSW ;保护现场PSW,ACC进栈 PUSH ACC ;选工作寄存器1区 M
11、OV TH0,#0ECH ;T0初始化 MOV TL0,#78H DJNZ 36H,PTFOR MOV 36H,#92 ;判断中断次数计数单元减1是否为0 XRL 33H,#0FFH DJNZ 37H,PTFOR ;中断次数计数单元36H,37H MOV 37H,#2 MOV A,32H ; 秒单元32H加1 ADD A,#1 DA A ;十进制调整 MOV 32H,A CJNE A,#60H,PTFOR ;判断单元是否计数到60 MOV 32H,#0 MOV A,31H ;分单元31H加1 ADD A,#1 DA A MOV 31H ,A CJNE A,#60H,PTFOR MOV 31H
12、,#0 MOV 32H ,#0 MOV A,30H ;时单元30H加1 ADD A,#1 DA A MOV 30H,A CJNE A,#24H,PTFOR ;判断计数单元是否到24 MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 PTFOR: POP ACC ;恢复现场,ACC,PSW退栈 POP PSW RETI MAIN: MOV P2,#0FH ;数码管自检 MOV DPTR,#TAB2 SS: MOV R2,#00H SST: MOV A,R2 MOVC A,A+DPTR JZ SS MOV P0,A INC R2 ACALL DEL3 MOV A,P0 CJNE A
13、,#80H,SST MOV 30H,#00H ;状态数初始化 MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MOV 36H,#92 MOV 37H,#2 MOV SP,#0EFH ;栈指针初始化 MOV TH0,#0ECH MOV TL0,#78H MOV TMOD,#1 MOV IP,#2 MOV IE,#82H ;中断初始化 SETB TR0 ;允许T0计数LOOP: ACALL LOP0 JB P1.0,XX ;校时按键按下但未松开(低电平)转移到校时模块 ACALL JS1XX: JB P1.1,YY ;校分按键按下但未松开(低电平)转移到校分模块 AC
14、ALL JF1 ACALL LOP0YY: AJMP LOOP JS1: LCALL DEL JS2: JB P1.0, JS3 ;校时按键松开(高电平)校时 ACALL LOP0 AJMP JS2 JS3: MOV A,30H ADD A,#1 DA A MOV 30H,A CJNE A,#24H,RT ;校时到24时,采用24进制计时 MOV 30H,#0 JF1: LCALL DEL JF2: JB P1.1,JF3 ;校分按键松开(高电平)校分 ACALL LOP0 AJMP JF2JF3: MOV A,31H ADD A,#1 DA A MOV 31H,A CJNE A,#60H,R
15、T ;分为60进制计时 MOV 31H,#0 MOV A,30H INC A, MOV 30H,A ;分校时到60时 ,时自加一RT: RET LOP0: MOV R6,33H CJNE R6,#00H,ZZ ;保证秒的闪烁,采用小数点的闪烁 MOV DPTR,#TAB1 LJMP LOP1ZZ: MOV DPTR,#TAB LOP1: MOV A,31H ANL A,#0FH ;利用与 0F从中取出分个位,显示分个位 MOVC A,A+DPTR MOV P0,A MOV P2,#0FFH MOV P2,#0EFH ;保证数码管的显示不变,原理来源于任务5 ACALL DEL MOV A,31
16、H ANL A,#0F0H ;利用与F0相与 取出分十位,显示分十位 SWAP A ;交换高低半字节 MOVC A,A+DPTR MOV P0,A MOV P2,#0FFH MOV P2,#0DFH ACALL DEL MOV A,30H ;时个位的显示 (原理与分同) ANL A,#00FH MOVC A,A+DPTR MOV P0,A MOV P2,#0FFH MOV P2,#0BFH ACALL DEL MOV A,30H ;时十位的显示 ANL A,#0F0H SWAP A MOVC A,A+DPTR MOV P0,A MOV P2,#0FFH MOV P2,#7FH ACALL DE
17、L RET DEL: MOV R4,#20 ;延时程序1DEL1: MOV R5,#40DEL2: DJNZ R5,DEL2 DJNZ R4,DEL1 RETDEL3: MOV R7,#0FFH ;延时程序2DEL4: MOV R6,#0FFHDEL5: DJNZ R6,DEL5 DJNZ R7,DEL4 RET END 21基于单片机的窄带脉冲宽度检测第1节 引 言一般单片机能够检测较宽的脉冲,但很难检测窄带脉冲,该系统只要是用于检测窄带脉冲,并显示其宽度的功能。11 系统概述本系统使用AT89C2051单片机,利用定时器T1门控GATE的功能,测量引脚 上 出现的正脉冲宽度,并用LED数码
18、管显示出来。12 设计任务设计要完成的任务有硬件设计和软件设计。硬件方面,AT89C2051单片机的P3.3口测试外部脉冲。P1口可以接LED数码管。软件方面,利用单片机的定时完成正脉冲宽度的读取,然后用到P1口使LED数码管显示。第2节 系统硬件设计硬件电路关系到软件的编程,也要有利用系统的实际应用。21 系统的硬件构成及功能本系统有以下几个部件组成:单片机AT89C2051,CD4511芯片电源,LED数码管等。单片机即单片微型计算机,是集CPU,ROM,RAM,I/O口,内部总线及中断系统于一体的微控制器,它体积小,重量轻,功能强,广泛应用于智能产品及工业自动控制上,而51单片机是各单片
19、机最为典型和最有代表性的一种。电源提供单片机正常工作,单片机只需+5V的电压,可以通过220V的市电通过变压、整流稳压来得到,维持系统的正常工作。LED数码管用于显示所检测外部输入脉冲的宽度,直观22 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去
20、了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051单片机是一个有20个引脚的芯片,引脚配置如图1所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。图1 AT89C2051引脚配置AT89C2051芯片的20个引脚功能为:VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P1口 8位双向I/O口。引脚P1
21、.2P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。P3口 引脚P3.0P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功
22、能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。23 CD4511芯片说明CD4511是BCD锁存段码译码共阴LED驱动集成电路,其引脚如图2所示,各引脚功能如下:图2 CD4511各引脚配置VCC:接正电源;VSS:接地;A, B, C, D:BCD码输入脚(A为最低位,D为最高位);QaQg:段码输出脚,高电平有效,最大可输出25mA电流;BI:熄灭,接低电平则QaQg全部输出低电平;LT:点亮测试,接低电平则QaQg全部输出高电平;LE:锁存允许,接高电平锁存,则输出不会随BCD码输入改变24 LED数码管显示说明由于系统要显示的内容比较简单,显示量不多,所以选用数码管既
23、方便又经济。LED有共阴极和共阳极两种。如图所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)ag,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。LED数码管结构原理图:g f com a b f eddpcbage d com c dp 符号和引脚 共阴极 高电平驱动 共阳极 低电平驱动LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本
24、系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的轮换。从LED数码管结构原理图可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表:各段码位的对应关系段码位D7 D6 D5 D4 D3 D2 D1 D0显示段dpgfedcba 当用数据口连接LED数码管adp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,D
25、7位与dp段连接,如上表所示,LED数码管显示的十六制数和空白字符与P的显示段码。LED显示段码字型共阳极段共阴极段字型共阳极段共阴极段0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H在该系统中,根据由于硬件连线的不同,各段码的关系如下:段码位D7D6D5D4D3D2D1D0显示段dpbafgcde因此在该系统中所出现的LED数码管显示的十六进制数和空白字符与P的显示段码也要根据此修改。根据
26、AT89C2051单片机灌电流能力强,拉电流能力弱的特点,选用共阳数码管。将AT89C2051的P1.0P1.7分别与共阳数码管的ag及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当P0口输出的段码为11000000,数码管显示的字符为0。数码管显示器有两种工作方式,即静态显示方式和动态扫描显示方式。为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需要解决多位LED数码管的“段控”和“位控”问题,本电路的通过P1口实现:而每一位的公共端,即LED数码管的“位控”,则由P3
27、口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开头”状态。25 硬件电路单片机的P3.3引脚接外部的脉冲源,通过内部的定时器控制计算脉冲个数,这与单片机的晶振频率有关。通过2片CD4511芯片输出2个4位BCD码,再输出到LED数码管显示。其具体的系统电路图参见图3所示。AT89C2051RST
28、VCC P1.7 P1.6 P1.5 P1.4P3.3 P1.3 P1.2 P1.1 P1.0GND+5VDVcc LT QaC CD4511 .B .A . Vss LE Qg+5VDVcc LT QaC CD4511 .B .A . Vss LE Qg+5V图3 系统电路图第3节 系统的软件设计本系统的软件设计主要是通过定时器计脉冲个数,然后显示在LED数码管上。31 系统主程序设计通过外部脉冲输入到P3.3口。当 引脚上出现高电平时,定时器T1即开始对12分频时钟周期计数,直到 引脚变低电平为止,然后读出T1计数器的值并显示。图4 脉冲源假设我们使用的脉冲源如图4所示。32 系统源程序设
29、计ORG 0000HAJMP STARTORG 1000HSTART:MOV TMOD,#90H;对定时器初始化MOV TL1,#00HMOV TH1,#00HWAIT1:JB P3.3,WAIT1;等待 变低SETB TR1;启动T1计数WAIT2:JNB P3.3,WAIT2;等待 升高WAIT3:JB P3.3,WAIT3;等待 变低CLR TR1;停止T1计数MOV A,TL1;读出TL1的计数值CLR CSUBB A,#30HSWAP AMOV 40H,A;暂存A的内容MOV A,TH1CLR CSUBB A,#30HANL A,40HMOV DPTR,#TABMOV A,A+DPTRMOV P1,A;输出数字MOV R7, #200 DLY1: MOV R6, #123 ;延时程序 DLY2: DJNZ R6, DLY2 DLY2: NOP DJNZ R7,