首页 方波发生器

方波发生器

举报
开通vip

方波发生器课程设计报告 课程名称:  基于单片机的方波信号发生器  院    部:      电  控  学  院        专业班级:        电气0601班          学生姓名:          程云鹏            指导教师:          郝兆明            完成时间:      2009年06月10日      报告成绩:_____  _____________________ 目录 一、概述    3 1.1、设计内容    3 1.2、设计的基本要求 ...

方波发生器
课程设计报告 课程名称:  基于单片机的方波信号发生器  院    部:      电  控  学  院        专业班级:        电气0601班          学生姓名:          程云鹏            指导教师:          郝兆明            完成时间:      2009年06月10日      报告成绩:_____  _____________________ 目录 一、概述    3 1.1、设计内容    3 1.2、设计的基本要求    3 二、方波发生器设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载     3 2.1、方案介绍    4 2.2、方波信号发生器的原理与功能    4 三、系统的硬件设计    5 3.1、单片机最小系统    5 3.2、小键盘接口电路    6 3.3、LED显示电路    7 四、系统的软件设计    8 4.1、主程序    8 4.2、系统初始化子程序    8 4.3、显示子程序    8 4.4、键盘扫描程序    9 4.5、定时器中断子程序    11 五、调试与性能 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析     12 5.1硬件调试    12 5.2软件调试    12 六、设计体会    12 参考文献    13 附录A:基于单片机方波信号发生器的原理图    14 附录B:基于单片机方波信号发生器的程序清单    15 附录C:仿真图 ——————————————————————————————21 方波信号发生器设计 一、概述 单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。 单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。 1.1、设计内容 本课程设计是设计一个方波发生器,用4位数码管显示方波的频率。 1.2、设计的基本要求 频率可调,用一个变阻器来调整波形的频率,频率调节范围为20Hz~2000Hz; 占空比可调,采用两个按键来实现增加、减小波形的占空比作用,占空比调节步长为1%,即每按键一次,占空比增加或减少1%。占空比用另外两位数码管显示。 系统上电时频率依变阻器的阻值设定,占空比设定为50%。 而我们在此设计的方波发生器与要求要设计的有点区别,所设计的频率调节范围为1Hz~15000Hz,以调节变阻器的阻值来实现频率的调节相对来说要麻烦些。因此,频率也使用按键来进行调节,不同的频率及占空比可以使用不同的按键来实现,而以键盘扫描来实现各键的不同功能;显示部分可以使用ZLG7290芯片及数码管来实现。由此即可构成一个最小单片机应用系统。 二、方波发生器设计方案 在电子技术领域中,实现方波发生器的方法有很多种,可以采用不同的原理及器件构成不同的电路,但可以实现相同的功能。在此次设计中,有些地方与课题原本的具体要求有点不同。如实现频率调节时,不是按要求利用调整变阻器的阻值来完成的,而是用按键来实现的。 2.1、方案介绍 微处理器模块AT89S52,频率与占空比信息显示模块,2×4矩阵键盘模块,74LS164移位寄存器显示驱动模块。本设计中用到两个定时器,定时器0和定时器1,其中定时器0工作在定时方式下,  决定方波的频率;定时器1同样工作在定时方式下,用于设定占空比。用LED显示器来显示频率与占空比,键盘的操作是通过外中断与单片机共同来控制的,键盘操作来完成按要求对频率与占空比进行调节。 2.2、方波发生器的原理与功能 方波发生器的原理方框图如图1所示 由于系统的要求不高,比较单一的,再加上我们是通过定时器来调节频率的,而非电阻,因此实现起来就相对简化了。仅用键盘、AT89S52及串行显示便可完成设计,达到所要求实现的功能。 方波发生器工作原理与功能: 简单的 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 为:主程序扫描键盘,将设置信息输入,处理后,输出到LED显示器显示。 单片机的晶振为11.0592MHz,用到了两个定时器,即定时器0与定时器1,分别进行频率与占空比的定时,两个定时器都是工作在方式1。根据计算定时器初值的公式: 计算出定时器0与定时器1所要装入的初值。 频率及占空比的显示电路由74LS164构成的驱动电路和LED数码显示管组成,利用八个数码管来显示,有五位是用来显示频率的,有两位是显示占空比的,在频率与占空比显示管中间有一个LED数码管是用来显示“——”的,用以区分频率显示与占空比显示的。 此电路的键盘是由一个状态键,四个功能键(调节频率与占空比的增减)组成,其特殊之处在于利用外部中断实现键盘扫描。状态键有三种状态,当其处于状态0时,则其它的键会处于无用状态,当其处于状态1时,可通过按四个调节键来调节频率,处于第三种状态时,按四个调节键中的前两个便可对占空比进行调节了。 三、系统的硬件设计 3.1、单片机最小系统 单片机各功能部件的运行都是以时钟频率为基准的,有条不紊地进行工作。因而时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路方式有两种:一种是内部时钟方式,一种是外部时钟方式,这里采用的是内部时钟方式,外接晶振。时钟电路由片外晶体、微调电容和单片机的内部电路组成。选取频率为11.0592MHz的晶振,微调电容是瓷片电容。 89S52单片机的P0.7口作为波形输出口,若接示波器,则可通过示波器来观察波形,是一个矩形波。 此单元电路包括时钟电路、复位电路,具体电路如图2所示: 3.2、小键盘接口电路 小键盘如图3所示。它包括8个键,系统中用到的键只有5个,分别为0号、1号、2号、3号、4号键。其中0号键是状态键,采用外部中断控制,用它来确定其它几个键的按键功能,具体作用在前述的系统功能中已做介绍了;另外4个键为功能键,调节频率与占空比的。小键盘中引出的6根线依次分别接单片机的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口。 图3 小键盘接口电路 3.3、LED显示电路 采用静态显示来实现显示功能,如图4所示。移位寄存器74LS164,实现串行输入,并行输出。串行数据由RXD输出,从74LS164的A、B端口输入寄存器,移位时钟由TXD提供。在移位时钟作用下,存放显示器段码的串行发送缓冲器数据逐位由A、B端移入到74LS164中,再由Q0到Q7并行输出到显示数码管相应的LED上。8片74LS164首尾相串,而时钟端则接在一起。这部分的最终功能是显示频率与占空比。 显示部分具体电路如图4所示: 图4 LED显示电路 四、系统的软件设计 方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、显示子程序、键盘扫描程序、定时器中断子程序。其中主程序用来控制整个程序的执行,它与各子程序紧密相联,共同实现方波发生器各种功能的执行。 4.1、主程序 主程序包括系统初始化及显示程序,是一个死循环系统。其 流程图 破产流程图 免费下载数据库流程图下载数据库流程图下载研究框架流程图下载流程图下载word 如图5所示: 4.2、系统初始化子程序 在此程序中,给所有变量赋初值,有键盘扫描口、选择串行口工作方式SCON、状态标志位flag、初始频率与占空比及其定时、定时器0与定时器1的工作方式等。初始化时启动了定时器0与定时器1。 4.3、显示子程序 利用分离频率的各位数值,将各位数值分别显示出来。在程序中利用了频率显示的高位灭零的方法以致最高位为0时就不显示,以致显示效果美观化。一共有五位是显示频率的,若频率小于10000时,则万位不显示;若频率小于1000时,则万位与千位都不显示,依次类推。 占空比的显示规律与频率的一样。 显示子程序流程图如图6所示: 4.4、键盘扫描程序 键盘扫描用外中断0实现,采用的是线反法,键盘扫描码采用逐行扫描的方法。 关于键盘扫描程序的说明: 频率可调时,占空比保持原状不变,反之亦然,只能进行单一变量的调节,状态标志flag的初始值为0。 (1)频率调节: i==0时,按键为状态键,此时flag加1,即flag==1,此时进行频率的调节。可以进行加1Hz、减1Hz、加100Hz、减100Hz操作,分别由1号键、2号键、3号键、4号键控制。如果按住某个键不放,便会执行连续加值或减值操作。这里的频率的最大值为15000Hz,当频率增至最大值时,还按增值键,此时频率会自动跳到1Hz开始继续增加。同理,频率的最小值为1Hz,当减频率减至最小值时,再按减频率键,则频率会跳到15000Hz。 (2)占空比调节: 当状态值flag==2时,此时频率保持不变,进行占空比调节。只可进行加1与减1操作,分别由1号键、2号键控制。 要注意的是占空比的初值是50%,我们定义的ZKB为50(百分比的分子部分,为一整数),故调节占空比时,ZKB会进行加1,减1操作。ZKB的最大值为99,当增到最大值时,便会返回到值1,如此循环。 (3)为了减轻单片机的工作量,在软件设计中采取了这样的措施,在修改参数确定后才进行定时器初值TC0、TC1的计算。 键盘中断处理子程序流程图与键处理流程图分别如图7、图8所示: 4.5、定时器中断子程序 定时器中断子程序中有定时器0与定时器1中断,频率定时器0中断流程图与占空比定时器1流程图分别如图9、图10所示。 (1)定时器0遇中断执行的操作有复位,启动自身进行频率定时,同时启动定时器1,进行占空比定时,输出高电平。 (2)定时器1遇中断,停止自身的计时,输出低电平。 五、调试与性能分析 5.1硬件调试 硬件的测试首先是检查电路的逻辑线路是否正确,如果正确再检查原理图的线路连接是否正确,电路的布局安排是否合理等等。软件的测试只要是检查程序的语法是否正确,数据结构安排是否妥当,时序是否正确,整体流程安排是否合理。上面两部检查妥当后,就到了系统调试最关键的一步,软硬件的协同调试,问题往往在此才能被发现。 5.2软件调试 在软硬件协同调试时,硬件问题比较少,主要体现在上拉电阻的使用,滤波电容的使用等,极少发生逻辑上的错误。硬件的问题往往是致命的问题,其不易察觉,发现之后电路更改也不容易。这就需要我们不断的实验,在实战中摸索出规律,吸取经验教训,在以后的电路设计中能设计出稳定的抗干扰能力强的电路。软件问题是调试中遇到问题最多的,此系统中出现过的问题有以下几处: 1、键盘中断处理程序中中断入口后,没有关掉外部中断,出现键值读取不正确,不能正确操作键盘。解决方法,在中断入口处关掉外中断,并在出口时再开外中断; 2、键盘扫描前没有软件延时消抖,出现键值读取不准确。解决方法,在键盘中断入口后在键值扫描前软件延时5ms,消去键盘抖动所带来的误操作; 3、程序中有个别地方将“=”与“==”混淆,造成结果不准确,解决办法,仔细查找,将混淆出更正。 再把到计时设定时子程序加进来,看是否能通过菜单正确调用,返回。能否修改到计时。整个调试完毕。 六、设计体会 在单片机课程设计中,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。 但是,由于平时对单片机知识学习得不够扎实,理解得不够透彻、一知半解,致使在运用是不能贯通,导致在设计过程中困难重重,往往无从下手,但是通过和同组的同学一起探讨,最后还是一步一步的把所有的问题给一一解决了。在这次设计过程中,我也对word、protel、画图板等软件有了更进一步的了解,这使我在以后的学习中更加熟练。 总之,本次单片机课程设计让我悟出了许多东西:第一,就是对资料的搜索、整理、归类、总结、保存的能力是一个至关重要的个人能力。如果没有这种能力,在大学学习阶段,那么我们的学习将会是一种负担;今后我们走出校门,甚至在整个人生阶段,也将会碌禄无为;第二,我们要学会坚持不懈,不轻易言弃,这对于我们非常的重要。如果我们没有这种精神,一旦我们遇到一点挫折,我们也许就会被打败,以后进入社会就会没有我们的立足之地。因此,我们要珍惜大学时光,循序渐进的培养这些能力,这样才不会被瞬息万变的时代所淘汰。 参考文献 [1] 何立民.MCS51单片机应用系统设计[M].北京:北京航空航天大学出版社,2003. [2] 徐君毅.单片微型机原理与应用[M].上海:上海科技出版社,1995 [3] 公茂法.单片机人机接口实例集[M].北京:航空航天大学出版社,1998. [4] 沈红卫.基于单片机的智能系统设计与实现[M].北京:电子工业出版社, 2005. [5] 李广弟,朱月秀等.单片机基础[M].北京:北京航空航天大学出版社,  2003. 附录A:基于单片机方波信号发生器的原理图 附录B:基于单片机方波信号发生器的程序清单 #include #include #define uchar unsigned char #define uint  unsigned int #define KEY_PORT P1          //P1口为键盘扫描口 sbit OutPut=P0^7;          //矩形波输出口 /* 设全局变量 */ float fosc=11059200;  //系统时钟频率 float length=65536;    //方式1计数长度 uchar flag;              //状态键标志 uchar ZKB;              //占空比 uint  PL;              //频率 uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定时器0和1的定时初值 uchar code tabl[12]= {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00};      //LED共阴极代码 uchar code tabl2[18]= {0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};    //键值表 /***************************************** 延时子程序 *****************************************/ void delay1ms(uchar n)                //延时n ms { uchar j; while(n--)            for(j=0;j<122;j++) { ; }              } /***************************************** 系统初始化 *****************************************/ void system_init(void )  { KEY_PORT=0x0f; SCON=0x00; flag=0; PL=1000; ZKB=50; TL0=0x66;                  //初始频率1KHz定时1ms TH0=0xfc; TL1=0x33;                  //初始占空比50定时0.5ms TH1=0xfe; TMOD=0x11;              //定时器1和定时器0工作在方式1,的定时模式 IT0=0;                  //选择INT0为低电平触发方式 EX0=1;                  //外部中断0允许 ET0=1;                  //定时器1和定时器0中断允许 ET1=1; EA=1;                    //系统中断允许 TR0=1;                  //定时器1和定时器0开始定时 TR1=1; } /***************************************** 发送数据 *****************************************/ void send(uchar d) { SBUF=d; while(!TI); TI=0; } /***************************************** 显示子程序 *****************************************/ void display(uint PL,uchar ZKB) { uchar a,b,c,d,e,m,n; a=PL/10000;          //分离频率的各位数值 b=PL/1000; b=b%10; c=PL/100; c=c%10; d=PL%100; d=d/10; e=PL%10; if(a==0)              //频率显示的高位灭零 { a=10; if(b==0) { b=10; if(c==0) { c=10; if(d==0) {d=10; if(e==0)e=10; } } } } m=ZKB/10;              //分离占空比各位数值 n=ZKB%10; if(m==0) {m=10;              //占空比显示的高位灭零 if(n==0)n=10; } send(tabl[a]); send(tabl[b]); send(tabl[c]); send(tabl[d]); send(tabl[e]); send(0x02);          //频率和占空比中间加一横线“-”以示区别 send(tabl[m]); send(tabl[n]); delay1ms(200); delay1ms(200);        //延时开键盘中断,处理好(避免又利用)连击问题 } /***************************************** 键盘扫描(线反法) *****************************************/ void Key_Scan()  interrupt 0          //键盘扫描用外中断0 {  uchar scancode,keycode,i; float TC0,TC1; EX0=0;                              //关中断 delay1ms(5); scancode=0xef;                    //键盘扫描码,采用逐行扫描的方法 while(scancode!=0xff) { KEY_PORT=scancode;                //输入扫描码,扫描P1.4对应的行 keycode=KEY_PORT;                  //读出数据,看是否在此行上的某列键盘被按下  if((keycode&0x0f)!=0x0f)  break;  //扫描到按下的键,则退出  scancode=(keycode<<1)|0x0f;        //否则,更新扫描码继续扫描  }  keycode=~keycode; for(i=0;i<8;i++) if(tabl2[i]==keycode)break;      //取得键号 if(i==0) flag++; if(flag==1)                          //状态1下对频率进行调整 { if(i==1)                          //按键为1号,频率加1 {PL++; if(PL>15000) PL=15; } if(i==2)                          //按键为2号,频率减1 {PL--; if(PL<15) PL=15000; } if(i==3)                          //按键为3号,频率加100 {PL+=100; if(PL>15000) PL=15; } if(i==4)                          //按键为4号,频率减100 {PL=PL-100; if(PL<15) PL=15000; } } if(flag==2)                          //状态2下对占空比进行调整 { if(i==1)                          //按键为1号,占空比加1 {ZKB++; if(ZKB>99) ZKB=1; } if(i==2)                          //按键为2号,占空比减1 {ZKB--; if(ZKB<1) ZKB=99; } } if(flag==3)                            //状态返回,正常工作 { flag=0;                                    //清状态标志 TC0=(length-fosc/(12*PL)+0.5);            //频率定时初值 TC1=(length-(fosc*ZKB)/(12*100*PL)+0.5); //占空比定时初值 TIMER0_L=(uint)TC0/256;            //计算定时器0和定时器1的初值    TIMER0_H=(uint)TC0%256;            TIMER1_L=(uint)TC1/256; TIMER1_H=(uint)TC1%256;    }                  display(PL,ZKB); KEY_PORT=0x0f;        //给键盘扫描口赋初值,以便下次按键正确读入 EX0=1;                //开中断 } /***************************************** 定时器中断子程序 *****************************************/ void Timer0_PL()  interrupt 1        //频率定时器0中断 { TR1=1;                                //启动定时器1,占空比定时 TL0=TIMER0_L; TH0=TIMER0_H; OutPut=1;                             //输出高电平 } void Timer1_PL()  interrupt 3        //占空比定时器1中断 { TR1=0;                                //定时器1停止 TL1=TIMER1_L; TH1=TIMER1_H; OutPut=0;                            //输出高电平 } /***************************************** 主函数 *****************************************/ void main() { uint PL0=0; uchar ZKB0=0; system_init();                          //系统初始化 while(1)                            //死循环,显示频率和占空比 { if(flag==0)                      //状态0时,正常显示频率和占空比 display(PL,ZKB); if(flag==1)                      //状态1时,频率调整状态,频率闪烁 { display(PL0,ZKB); display(PL,ZKB); } if(flag==2)                      //状态2时,占空比调整状态,占空比闪烁 { display(PL,ZKB0); display(PL,ZKB); } } } 附录C:仿真图
本文档为【方波发生器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_833902
暂无简介~
格式:doc
大小:68KB
软件:Word
页数:30
分类:互联网
上传时间:2019-05-07
浏览量:6