ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:243.77KB ,
资源ID:8227304      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8227304.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(方波发生器单片机课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

方波发生器单片机课程设计.docx

1、方波发生器 单片机课程设计摘 要本次课程设计以AT89S51单片机为核心器件,外围采用按键作为控制和LCD1602 作为显示器所设计的方波发生器。该方波发生器能实现0-1kHz频率范围、占空比可调的方波输出。其核心技术为单片机并行端口的应用、单片机定时器为中断应用和数字分离的ASCII码液晶显示技术。采用8个独立的按键组成控制模块,操作方便,按键控制模式可以通过程序进行设定;显示模块则由液晶屏1602构成,能显示出实时输出方波的频率及占空比,直观明了。设计过程中遇到的问题是输出方波的频率、占空比与液晶显示数据存在误差,通过不断调试程序,合理编写中断服务程序来修正误差提高精确度,达到设计要求。该

2、方波发生器具有线路简单、结构紧凑、价格低廉、性能优越等优点。关键词:方波发生器;AT89S51 单片机;键盘;LCD1602ABSTRACTThe course design AT89S51 microcontroller as the core device, the external use of buttons as a control and LCD1602 displays are designed as a square wave generator. The square wave generator to achieve 0-1kHz frequency range, adju

3、stable duty cycle square wave output. The core technology for the application of single chip parallel port, SCM applications and digital timer interrupt ASCII code separate liquid crystal display technology. 8-independent component control module buttons, easy to operate key control mode can be set

4、through the program; display module constituted by the LCD1602, can show real-time output frequency and duty cycle square wave, intuitive and clear. Problems encountered in the design process is the output square wave frequency, duty cycle and LCD display data errors exist, through continuous commis

5、sioning process, a reasonable write interrupt service routine to correct the error to improve accuracy, to meet the design requirements. The square wave generator has a simple circuit, compact, low cost, superior performance advantages.Key words: Square wave generator; AT89S51 microcontroller; keybo

6、ard; liquid crystal 16025.4 键盘扫描程序.95.5定时器中断子程序.11第1章 前言单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的

7、程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。第2章 方波发生器方案设计在电子技术领域中,实现方波发生器的方法有很多种,可以采用不同的原理及器件构成不同的电路,但可以实现相同的功能。在此次设计中,有些地方与课题原本的具体要求有点不同。如实现频率调节时,不是按要求利用调整变阻器的阻值来完成的,而是用按键来实现的。 2.1 设计内容本课程设计是设计一个方波发生器,用4位数码管显示方波的频率。2.2 设计的基本要求频率可调,用一个变阻器来调整波形的频率,频率调节范围为20Hz2000Hz;占空比可调,采用两

8、个按键来实现增加、减小波形的占空比作用,占空比调节步长为1%,即每按键一次,占空比增加或减少1%。占空比用另外两位数码管显示。系统上电时频率依变阻器的阻值设定,占空比设定为50%。而我们在此设计的方波发生器与要求要设计的有点区别,所设计的频率调节范围为1Hz15000Hz,以调节变阻器的阻值来实现频率的调节相对来说要麻烦些。因此,频率也使用按键来进行调节,不同的频率及占空比可以使用不同的按键来实现,而以键盘扫描来实现各键的不同功能;显示部分可以使用ZLG7290芯片及数码管来实现。由此即可构成一个最小单片机应用系统。2.3 方波发生器设计方案微处理器模块AT89S52,频率与占空比信息显示模块

9、,24矩阵键盘模块,74LS164移位寄存器显示驱动模块。本设计中用到两个定时器,定时器0和定时器1,其中定时器0工作在定时方式下,决定方波的频率;定时器1同样工作在定时方式下,用于设定占空比。用LED显示器来显示频率与占空比,键盘的操作是通过外中断与单片机共同来控制的,键盘操作来完成按要求对频率与占空比进行调节。2.4 总体功能框图方波发生器的原理方框图如图1所示: 第3章 方波发生器的原理由于系统的要求不高,比较单一的,再加上我们是通过定时器来调节频率的,而非电阻,因此实现起来就相对简化了。仅用键盘、AT89S52及串行显示便可完成设计,达到所要求实现的功能。方波发生器工作原理与功能:简单

10、的流程为:主程序扫描键盘,将设置信息输入,处理后,输出到LED显示器显示。单片机的晶振为11.0592MHz,用到了两个定时器,即定时器0与定时器1,分别进行频率与占空比的定时,两个定时器都是工作在方式1。根据计算定时器初值的公式: 计算出定时器0与定时器1所要装入的初值。频率及占空比的显示电路由74LS164构成的驱动电路和LED数码显示管组成,利用八个数码管来显示,有五位是用来显示频率的,有两位是显示占空比的,在频率与占空比显示管中间有一个LED数码管是用来显示“”的,用以区分频率显示与占空比显示的。此电路的键盘是由一个状态键,四个功能键(调节频率与占空比的增减)组成,其特殊之处在于利用外

11、部中断实现键盘扫描。状态键有三种状态,当其处于状态0时,则其它的键会处于无用状态,当其处于状态1时,可通过按四个调节键来调节频率,处于第三种状态时,按四个调节键中的前两个便可对占空比进行调节了。第4章 硬件电路设计4.1 单片机最小系统单片机各功能部件的运行都是以时钟频率为基准的,有条不紊地进行工作。因而时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路方式有两种:一种是内部时钟方式,一种是外部时钟方式,这里采用的是内部时钟方式,外接晶振。时钟电路由片外晶体、微调电容和单片机的内部电路组成。选取频率为11.0592MHz的晶振,微调电容是瓷片电容。89S5

12、2单片机的P0.7口作为波形输出口,若接示波器,则可通过示波器来观察波形,是一个矩形波。此单元电路包括时钟电路、复位电路,具体电路如图2所示:4.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 小键盘接口电路4.3 LED显示电路采用静态显示来实现显示功能,如图4所示。移位寄存器

13、74LS164,实现串行输入,并行输出。串行数据由RXD输出,从74LS164的A、B端口输入寄存器,移位时钟由TXD提供。在移位时钟作用下,存放显示器段码的串行发送缓冲器数据逐位由A、B端移入到74LS164中,再由Q0到Q7并行输出到显示数码管相应的LED上。8片74LS164首尾相串,而时钟端则接在一起。这部分的最终功能是显示频率与占空比。显示部分具体电路如图4所示: 图4 LED显示电路第5章 系统的软件设计方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、显示子程序、键盘扫描程序、定时器中断子程序。其中主程序用来控制整个程序的执行,它与各子程序紧密相联,共同实现方波发生器各

14、种功能的执行。5.1 主程序主程序包括系统初始化及显示程序,是一个死循环系统。其流程图如图5所示:5.2 系统初始化子程序在此程序中,给所有变量赋初值,有键盘扫描口、选择串行口工作方式SCON、状态标志位flag、初始频率与占空比及其定时、定时器0与定时器1的工作方式等。初始化时启动了定时器0与定时器1。5.3 显示子程序利用分离频率的各位数值,将各位数值分别显示出来。在程序中利用了频率显示的高位灭零的方法以致最高位为0时就不显示,以致显示效果美观化。一共有五位是显示频率的,若频率小于10000时,则万位不显示;若频率小于1000时,则万位与千位都不显示,依次类推。占空比的显示规律与频率的一样

15、。显示子程序流程图如图6所示:5.4 键盘扫描程序键盘扫描用外中断0实现,采用的是线反法,键盘扫描码采用逐行扫描的方法。关于键盘扫描程序的说明:(1)频率调节:i=0时,按键为状态键,此时flag加1,即flag=1,此时进行频率的调节。可以进行加1Hz、减1Hz、加100Hz、减100Hz操作,分别由1号键、2号键、3号键、4号键控制。如果按住某个键不放,便会执行连续加值或减值操作。这里的频率的最大值为15000Hz,当频率增至最大值时,还按增值键,此时频率会自动跳到1Hz开始继续增加。同理,频率的最小值为1Hz,当减频率减至最小值时,再按减频率键,则频率会跳到15000Hz。(2)占空比调

16、节:当状态值flag=2时,此时频率保持不变,进行占空比调节。只可进行加1与减1操作,分别由1号键、2号键控制。要注意的是占空比的初值是50,我们定义的ZKB为50(百分比的分子部分,为一整数),故调节占空比时,ZKB会进行加1,减1操作。ZKB的最大值为99,当增到最大值时,便会返回到值1,如此循环。(3)为了减轻单片机的工作量,在软件设计中采取了这样的措施,在修改参数确定后才进行定时器初值TC0、TC1的计算。键盘中断处理子程序流程图与键处理流程图分别如图7、图8所示:图7 键盘中断处理子程序流5.5 定时器中断子程序定时器中断子程序中有定时器0与定时器1中断,频率定时器0中断流程图与占空

17、比定时器1流程图分别如图9、图10所示。(1)定时器0遇中断执行的操作有复位,启动自身进行频率定时,同时启动定时器1,进行占空比定时,输出高电平。(2)定时器1遇中断,停止自身的计时,输出低电平。 第六章 程序分析与设计6.1 基于单片机方波发生器的程序清单#include#include#define uchar unsigned char #define uint unsigned int #define KEY_PORT P1 /P1口为键盘扫描口sbit OutPut=P07; /矩形波输出口/* 设全局变量 */float fosc=11059200; /系统时钟频率float le

18、ngth=65536; /方式1计数长度uchar flag; /状态键标志uchar ZKB; /占空比uint PL; /频率uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; /定时器0和1的定时初值uchar code tabl12=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00; /LED共阴极代码uchar code tabl218=0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x8

19、8; /键值表/* 延时子程序*/void delay1ms(uchar n) /延时n ms uchar j; while(n-) for(j=0;j122;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为低电平触发方式 E

20、X0=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) /频

21、率显示的高位灭零 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(tabla); send(tablb); send(tablc); send(tabld); send(table); send(0x02); /频率和占空比中间加一横线“-”以示区别 send(tablm); send(tabln); delay1ms(200); delay1ms(200); /延时开键盘

22、中断,处理好(避免又利用)连击问题/* 键盘扫描(线反法)*/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; /扫

23、描到按下的键,则退出 scancode=(keycode1)|0x0f; /否则,更新扫描码继续扫描 keycode=keycode; for(i=0;i15000) PL=15; if(i=2) /按键为2号,频率减1 PL-; if(PL15000) PL=15; if(i=4) /按键为4号,频率减100 PL=PL-100; if(PL99) ZKB=1; if(i=2) /按键为2号,占空比减1 ZKB-; if(ZKB1) ZKB=99; if(flag=3) /状态返回,正常工作 flag=0; /清状态标志 TC0=(length-fosc/(12*PL)+0.5); /频率定

24、时初值 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,占空

25、比定时 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时,

26、频率调整状态,频率闪烁 display(PL0,ZKB); display(PL,ZKB); if(flag=2) /状态2时,占空比调整状态,占空比闪烁 display(PL,ZKB0); display(PL,ZKB); 第7 章 调试与性能分析7.1 硬件调试硬件的测试首先是检查电路的逻辑线路是否正确,如果正确再检查原理图的线路连接是否正确,电路的布局安排是否合理等等。软件的测试只要是检查程序的语法是否正确,数据结构安排是否妥当,时序是否正确,整体流程安排是否合理。上面两部检查妥当后,就到了系统调试最关键的一步,软硬件的协同调试,问题往往在此才能被发现。7.2 软件调试在软硬件协同调试时,硬件问题比较少,主要体现在上拉电阻的使用,滤波电容的使用等,极少发生逻辑上的错误。硬件的问题往往是致命的问题,其不易察觉,发现之后电路更改也不容易。这就需要我们不断的实验,在实战中摸索出规律,吸取经验教训,在以后的电路设计中能设计出稳定的抗干扰能力强的电路。软件问题是调试中遇到问题最多的,此系统中出现过的问题有以下几处:1、键盘中断处理程序中中断入口后,没有关掉外部中断,出现键值读取不正确,不能正确操作键盘。解决方法,在中断入口处关掉外中断,并在出口时再开外中断;2、键盘扫描前没有软件延时消抖,出现键值读

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1