《单片微型计算机与接口技术》课程设计说明书设计并实现频率相位表_第1页
《单片微型计算机与接口技术》课程设计说明书设计并实现频率相位表_第2页
《单片微型计算机与接口技术》课程设计说明书设计并实现频率相位表_第3页
《单片微型计算机与接口技术》课程设计说明书设计并实现频率相位表_第4页
《单片微型计算机与接口技术》课程设计说明书设计并实现频率相位表_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉理工大学单片微型计算机与接口技术课程设计说明书目录1 设计题目12 设计原理12.1 设计原理12.2 设计原理13 系统的硬件设计23.1 系统的硬件电路图23.2 系统的硬件资源34 系统的软件设计 64.1设计源程序 64.2程序流程图165 电路仿真 176 仿真测试分析 197 心得体会 218 参考文献 221设计题目设计并实现频率/相位表要求:输入两路方波信号,测量信号的频率和两信号的相位差,能显示频率值和相位差,精度:0.1hz,0.10。在满足精度的前提下分析和证实系统的测量范围。2设计原理2.1 设计原理利用单片机实现频率和相位表的方法我了解的有两种:第一、利用输入信号

2、的下降沿产生中断,对信号进行计数,然后根据计数的结果,乘以计数的周期,就是输入信号的周期了,然后求倒数,并输出值就是频率了。而相位则是利用相似的方法,既是第一个输入信号的下降沿触发外中断int0,t0和t1开始计数,第二个信号输入到int1,下降沿触发,并输出计数的值,然后将计数的值与之前的计算频率的值进行计算,就可以计算出相位的值。这种方法比较适合测量频率的值比较低的时候。第二、可以利用计数器进行计时,在计时的时间里面统计有多少个下降沿,然后就可以通过对计数的时间和下降沿的值计算出输入信号的周期。计算出周期之后就可以得到频率的值。至于相位也是这样,通过统计下降沿的值,然后与之间的方式一样,就

3、可以得到相位的值了。这种方法比较适合测量高频的时候。在这次的单片机的课程设计中我采用的是第一种方法,所以在测量时的频率范围很小,而且能满足要求的测量准确的频率也比较低。至于相位满足要求的频率范围就更加的小了,而且也不是特别的准确。2.2 系统框图设计的频率/相位表的系统框图如下图1所示。图13 系统的硬件设计3.1 系统的硬件电路图系统的硬件电路图如下所示:图23.2 系统的硬件资源(1)89c52单片机如图所示为89c52单片机的引脚图图3p0口:p0口为一个8位漏极开路双向i/o口,没脚可吸收8ttl门电路,当p1口的电路第一次写时,被定义为高阻输入。p0能够用于外部数据存储器,它被定义数

4、据/地址的第八位在flash编程时,p0口作为原码输入口,当flash进行校验时,p0口输出原码,此时p0口外部必须拉高。p2口在设计中,p2.0设置为lcd的寄存器rs控制端,p2.1设置为lcd的rw控制端,p2.2设置为lcd的使能e控制端。p3口管脚 备选功能p3.2 /int0(外部中断0)p3.3 /int1(外部中断1)p3.4 t0(计时器0外部输入)p3.5 t1(计时器1外部输入)p3.6 /wr(外部数据存储器写通道)p3.7 /rd(外部数据存储器读通道)(2)1602lcd显示器如图所示为1602显示器的引脚图图41602lcd通常有14条引脚线或16条引脚线的lcd

5、,多出来的2条线是背光电源线。 表1 1602lcd引脚说明表引脚符号功能说明1vss一般接地2vdd接电源(+5v)3v0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。4rsrs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5r/wr/w为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6ee(或en)端为使能(enable)端,下降沿使能。7db0低4位三态、 双向数据总线 0位(最低位)8db1低4位三态、 双向数据总线 1位9db2低4位三态、 双向数据总

6、线 2位10db3低4位三态、 双向数据总线 3位11db4高4位三态、 双向数据总线 4位12db5高4位三态、 双向数据总线 5位13db6高4位三态、 双向数据总线 6位14db7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15bla背光电源正极16blk背光 电源负极表2 寄存器选择控制表rsr/w操作说明00写入指令寄存器(清除屏等)01读busy flag(db7),以及读取位址计数器(db0db6)值10写入数据寄存器(显示各字型等)12从数据寄存器读取数据(3)异或门异或门管脚图如下所示;图5其真值表如下:表3 异或门真值表4 系统的软件设计4.1设计源

7、程序#include#include#define uchar unsigned char#define uint unsigned int/*/sbit pin_rs = p20;sbit pin_rw = p21;sbit pin_e = p22;#define pin_data p0/*/char m=0,n=0;char u,v;float t0,t1,f,p;uint a=48,48,48,48,48,46,48,48; /频率数据结果保存uint b=48,48,48,46,48,48; /相位数据结果保存uint i,j;uint x,y;uint c,d;void lcd_re

8、set();void display(uint x, uint y, uint data1);void shortdelay(uchar i);void longdelay(uint i);void set_rs(bit i);void set_rw(bit i);void set_e(bit i);void sc_p0(bit i);void write_instruc(uintinstruc);void write_data(uint data1);void display(uint x, uint y, uint data1);uint read_bf_ac(void);uint rea

9、d_data(void);bit lcd_busy();#define clearscreen()write_instruc(0x01)#define cursorreturn()write_instruc(0x02)#define inputmode(temp)write_instruc(temp)#define dispcontrol(temp)write_instruc(temp)#define functionset(temp)write_instruc(temp)#define dispshift(temp)write_instruc(temp)#define setcgram_ad

10、d(address)write_instruc(0x40 | address)#define setddram_add(address)write_instruc(0x80 | address)/* lcd初始化 */void lcd_init()lcd_reset();inputmode(0x06); /增量方式,不移位dispcontrol(0x0c);/显示开,光标关,闪烁关functionset(0x38);/8位,2行,57/定时计数器初始化void ct_init()tmod=0x99; /gate=1,t1、t0工作在方式1,定时方式th0=0; /定时计数器初值清零tl0=0;

11、th1=0;tl1=0;tr0=1; /tr0,tr1置位,此时定时计数器的启动有int0,int1引脚电平决定tr1=1;et0=1; /开中断et1=1;/外部中断0服务程序void itc0() interrupt 0 u=m; /读定时计数器0溢出次数m=0; /溢出次数清零x=th0*256+tl0; /读定时计数器0当前值th0=0; /定时计数器0清零tl0=0;/定时计数器0溢出中断void time0() interrupt 1 m+; /溢出次数加1/外部中断1服务程序void itc1() interrupt 2 v=n; /读定时计数器1溢出次数n=0; /溢出次数清零

12、y=th1*256+tl1; /读定时计数器1当前值th1=0; /定时计数器1清零tl1=0;/定时计数器1溢出中断void time1() interrupt 3 n+; /溢出次数加1/* 主函数 */ void main()lcd_init(); /液晶显示初始化ct_init(); /定时计数器初始化ea=1; /开总中断ex0=1; /允许外部中断ex1=1;it0=1; /设置外部中断方式为下降沿触发it1=1;p3=0xff;while(1)t0=u*65536+x; /计算脉冲时间宽度f=1000000/(2*t0); /计算频率c=f*100; /计算结果逐位保存a7=c%

13、10+48;a6=(c/10)%10+48;c=f;a4=c%10+48;a3=(c/10)%10+48;a2=(c/100)%10+48;a1=(c/1000)%10+48;a0=(c/10000)%10+48;display(0,1,f); /将显示单元数据送液晶屏显示display(0,3,=);for(i=0,j=5;i=7;i+,j+)display(0,j,ai);display(0,14,h);display(0,15,z);t1=v*65536+y; /计算脉冲宽度p=(t1/(2*t0)*360; /计算相位差d=p*100; /将计算结果逐位保存b5=d%10+48;b4=

14、(d/10)%10+48;d=p;b2=d%10+48;b1=(d/10)%10+48;b0=(d/100)%10+48;display(1,1,p); /将显示数据送液晶屏显示display(1,3,=);for(i=0,j=5;i0;i-) ;/长延时函数:longdelay()void longdelay(uint i)uint j;for(;i0;i-) for(j=1000;j0;j-);/寄存器选择信号:set_rs()void set_rs(bit i)if(i=1) pin_rs = 1;else pin_rs = 0;/读写操作控制信号:set_rw()void set_rw

15、(bit i)if(i=1) pin_rw = 1;else pin_rw = 0;/使能信号:set_e()void set_e(bit i)if(i=1) pin_e = 1;else pin_e = 0;/io输入输出控制void sc_p0(bit i) if(i=1) p0 = 0xff;else p0 = 0x00; /写指令函数:write_instruc()void write_instruc(uintinstruc)while(lcd_busy();sc_p0(0);set_rs(0);set_rw(0);/shortdelay(1);set_e(0);pin_data =

16、instruc;/shortdelay(1);set_e(1);shortdelay(10);set_e(0);/shortdelay(1);set_rw(1);set_rs(1);/读bf以及ac的值函数:read_bf_ac()uint read_bf_ac()uint temp;sc_p0(1);set_rs(0);set_rw(1);/shortdelay(1);set_e(0);/shortdelay(1);set_e(1);shortdelay(1);temp = pin_data;shortdelay(10);set_e(0);/shortdelay(1);set_rw(0);s

17、et_rs(1);return(temp);/写数据到ram函数:write_data()void write_data(uint data1)sc_p0(0);set_rs(1);set_rw(0);/shortdelay(1);set_e(0);pin_data = data1;/shortdelay(1);set_e(1);shortdelay(10);set_e(0);/shortdelay(1);set_rw(1);set_rs(0);/从ram读数据函数:read_data()uint read_data(void)uint temp;sc_p0(1);set_rs(1);set_

18、rw(1);/shortdelay(1);set_e(0);/shortdelay(1);set_e(1);shortdelay(1);temp = pin_data;shortdelay(10);set_e(0);/shortdelay(1);set_rw(0);set_rs(0);return(temp);/检测lcd控制器状态函数:lcd_busy()/返回一bit数:1 忙;0 闲bit lcd_busy()return(bit)(read_bf_ac() & 0x80);/在指定位置显示字符函数: display()/ x为行号,y为列号,/ data为显示字符的码字数据void d

19、isplay(uint x, uint y, uint data1)uint temp; while(lcd_busy(); /若lcd控制器忙,则等待temp = y & 0x0f;x&= 0x01;if(x) temp |= 0x40;setddram_add(temp); /设置显示位置write_data(data1);/lcd复位函数:lcd_reset()void lcd_reset()clearscreen();cursorreturn();4.2程序流程图图65 电路仿真仿真电路总图:图7电路输入方波信号:图8分别输入两路的方波的信号,通过异或门控制相位差。单片机中断控制:图9

20、int0和int1分别输入两路的方波的信号,有相位差lcd显示:图10利用p0口输出数据,而p2.0、p2.1、p2.2控制lcd显示器,从而得到频率及相位差的显示结果。6仿真测试分析仿真测试分析:(1) 输入信号频率:图11仿真时输入信号频率可调,并可通过数码管测试得到输入信号的频率,通过异或门控制两个输入信号的相位差。(2) 输入信号波形两个输入信号的波形及相位差如图所示。图12(3) 输出信号频率及相位差图13当两个输入信号同频率为220hz时,lcd输出所示。其中,f为频率,p为相位差。性能分析:这是利用单片机的内部的计数器t0和t1对频率和相位进行计算。首先通过输入信号的下降沿触发中

21、断int0和int1,对信号进行计数,然后根据计数的结果,乘以计数的周期,就是输入信号的周期了,然后求倒数,并输出值就是频率了。而相位则是通过第一个输入信号的下降沿触发外中断int0,t0和t1开始计数,第二个信号输入到int1,下降沿触发中断int1,并输出计数的值,然后将计数的值与之前的计算频率的值进行计算,就可以计算出相位的值。只是在实物测试时发现,输入信号频率在比较低的时候,lcd的显示比较稳定,随着输入信号的频率的增加,误差慢慢增大,达到7khz左右时,误差较大,而且lcd显示开始不稳定了。7心得体会为期一周的单片机课程设计就要结束了,在这一周内,我遇到了很多问题,也学到了很多东西。

22、课程设计开始时,由于没有经验,不知如何下手,所以就去图书管找了一些书看,尽管有许多的设计方案,可是总感觉自己还是有许多的东西弄不太清楚,于是就请教同学。他常做一些设计,有一些经验。大概知道设计的方向后,就自己上网查资料,到图书馆借阅一些相关书籍,然后自己就开始编写程序进行设计了。开始编写程序的时候,最主要的就是要头脑清醒,并且要对大概程序的布局,和每个功能的实现方法要有个逻辑。这样在遇到没有办法实现的功能的时候,才能快速的解决问题。我设计的是频率/相位表,设计要求:输入两路方波信号,测量信号的频率和两信号的相位差,能显示频率值和相位差,精度:0.1hz,0.10。在满足精度的前提下分析和证实系

23、统的测量范围。编程设计思想为:利用输入信号的下降沿产生中断,对信号进行计数,然后根据计数的结果,乘以计数的周期,就是输入信号的周期了,然后求倒数,并输出值就是频率值了。而相位则是利用相似的方法,既是第一个输入信号的下降沿触发外中断int0,t0和t1开始计数,第二个信号输入到int1,下降沿触发,并输出计数的值,然后将计数的值与之前的计算频率的值进行计算,就可以计算出相位的值。只是这种方法比较适合测量频率的值比较低的时候。我根据这编程思想慢慢完成编程并实现了频率/相位表功能。编程结束后,我进行了protues电路仿真。仿真结束后,和同学一起进行了实物测试,虽然最终结果还是有些误差,但还是完成实

24、现了频率/相位表功能。每一次课程设计都是一个很好的学习过程,并且是一个很好的学会自学的过程。在这个过程中,我们能学会遇到一些问题,先自己想办法解决,如果自己实在解决不了的,可以查阅资料和帮助性文档。遇到问题解决不了的,不是一味的逃避和完全依靠他人,我们要学会独立的思考。在自己的努力下,课程设计最终完成了。尽管经历了不少的艰辛,但给我积累了一点设计的经验,最后也有点小小的成就感。后面的路还很长,我还的努力! 8 参考文献1 李群芳、 张士军,单片微型计算机与接口技术, 电子工业出版社,20082 张毅刚、彭喜元、董继成,单片机原理及应用,高等教育出版社,20043 赵晓安,mcs-51单片机原理

25、及应用,天津大学出版社,20014 何立民mcs-51系列应用系统设计北京:北京航空航天大学出版社,19935barry b brey. the intel microprocessors. 5th ed. pearson education,2001ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij

26、5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zpfzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06d

27、h2sm8hltgpkicskrgopdpuhbj1lmpk7lydvc6nnmwl3fwhzftfvyaary7lhssxj10v3ph3y19bxyr77ib7cpzsu2tijqe3hkqkkau9kskcphkxuikvvyjzpg2yijrkqfbggovyqkuxnwi9omnjtt6qilzxtyrf7d20fbmabcfiixrqkusvnxbppfuxyq1fjskfsubkgs2duvqc9sz4jkbgn4qqv66pyoarjurnfj3txyfclzieeptwfjthpheipdfnqnr2hjqkv2dzwtmpdjqkbcxmovdsjqctjagjmdlskpgad2s0h0vmzgaht36gyuez7umank1ndreubeqdgrx0venqgnsyib2ilq3siqrnl4m56t7z8y8da5k0kupn5nzg4jvjdtffhyt82aogqkxo4vblmleiy2p7hthbho07rcfttxodydppdtqso7wxd0j6fkklgm4wodzplhtrr2xgqn13hqy59zu1gegdyqnihntavsieuefqcyfucjwd3vk5i7ykmhundmiz ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh

温馨提示

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

评论

0/150

提交评论