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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(单片机原理与应用设计报告.doc)为本站会员(dzzj200808)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

单片机原理与应用设计报告.doc

1、单片机原理与应用课程设计报告书课题名称:基于 51 单片机的波形发生器 姓名:封秀振学号:201100190124班级:2011 级电自 5 班专业:电气工程及其自动化电网智能保护(继电保护)指导教师:杨志坚电气工程学院2014 年 6 月 4 日课题要求:题目:设计一个波形发生器,产生单极性、幅度可调、周期可调的方波、锯齿波、三角波、正弦波信号。要求:通过键盘设置要产生的波形符号、幅度及周期,且当产生波形时在 LED 显示这些信息;采用 8279 接口 4*8 键盘及 8 位 LED 显示器。说明:1、由课代表负责分设计小组(2 人/组),分组要做到水平高低搭配。2、鼓励创新,即在完成本课题

2、要求基础上,又添加新的功能者,将给予加分。3、考核方法:面试+课程设计报告+设计期间表现。目录:1、 系统总体设计方案规划与选定2、 硬件设计3、 软件设计.4、 调试.5、 新增功能及实现方法6、 总结与体会7、 参考文献8、 附录(源程序代码、电路图等)一. 系统总体设计方案规划与选定本次设计采用 AT89C51 单片机为核心,通过与 8279 芯片和 38 译码器、锁存器的配合实现对键盘状态的检测和 LED 显示的控制,通过 D/A 转换器和运算放大器以及示波器实现对波形的输出,并且在 8 位 LED 显示器上显示波形类型的代号、幅值、频率。键盘为 4*8 键盘,通过键盘摁键实现对波形种

3、类、幅值、频率等的调节。单片机LED 显示D/A 转换器示波器图 1. 总体方案结构框图二硬件设计硬件的选择对于功能的实现非常重要,我们要了解芯片的功能、性能,根据题目要求选择合适的芯片。(一)硬件介绍1.单片机选择 AT89C51。AT89C51 提供以下标准功能:4k 字节 Flash 闪速存储器,128 字节内部键盘运算放大器RAM,32 个 I/O 口线,两个 16 位定时/计数器,一个 5 向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51 可降至 0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM,

4、定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。AT89C51 具有优良的性能,符合题目的要求。图 2. AT89C51 引脚图引脚说明:P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P0 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,需要接上拉电阻。本次设计中 P0 口与 8279的 AD07连接,作为数据传输口。P1 口

5、:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1 口作为低八位地址接收。本次设计中 P1 口与 D/A 转换器的 D10D17 口相连。P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘

6、故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。本次设计中 P2.4 和 P2.7 分别连 8279 的 和 A0 相连。_CSP3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故

7、。P3 口也可作为 AT89C51 的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 / INT0(外部中断 0)P3.3 /INT1(外部中断 1)P3.4 T0(计时器 0 外部输入)P3.5 T1(计时器 1 外部输入)P3.6 / (外部数据存储器写选通)WRP3.7 / (外部数据存储器读选通)D本次设计中 、 分别与 8279 的 、 相连; 与 8279 的 IRQWRD1INT相连,作为中断源。RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。ALE:当访问外部存储器时,地址锁存允

8、许的输出电平用于锁存地址的低位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数

9、据存储器时,这两次有效的/PSEN 信号将不出现。/EA:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2. 82798279 是一款由单一+5V 电源供电的可编程键盘显示接口芯片。其功能是:对键盘进行管理和控制;对 LED 显示器进行控制、对显示数据和显示方式进行管理。图 3

10、. 8279 芯片引脚说明:AD07:双向数据总线。在 CPU 与 8279 间做数据与命令传送。CLK:8279 的系统时钟,100KHz 为最佳选择。RES:复位输入线。输入 HI 时可复位 8279。CS:芯片选择信号线。当这个输入引脚为低电平时,可将命令写入8279 或读取 8279 的数据。A0:缓冲器地址选择线。A0=0 时,读写一般数据;A0=1 时,读取状态标志位或写入命令。RD:读取控制线。RD=0 时,8279 输送数据到外部总线。WR:写入控制线。WR=0 时,8279 从外部总线接收数据。IRQ:中断请求。平常 IRQ 为 LO,在键盘模式下,每次读取FIFO/SENS

11、OR RAM 的数据时,IRQ 变为 HI,读取后转为 LO;在传感器模式下,只要传感器一有变化,就会使 IRQ 变为 HI,读取后转为 LO。SL0SL3:扫描按键开关或传感器矩阵及显示器,可以是编码模式(16对 1)或解码模式(4 对 1)。RL0RL7:键盘/传感器的返回线。无按键被按时,返回线为 HI;有按键被按时,该按键的返回线为 LO。在激发输入模式时,为 8 位的数据输入。SHIFT:在键盘扫描模式时,引脚的输入状态会与其它按键的状态一同储存(在 BIT6),内部有上拉电阻,未按时为 HI,按时为 LO。CNTL/STB:在键盘扫描模式时,引脚的输入状态会与 SHIFT 以及其它

12、按键的状态同一储存,内部有上拉电阻,未按时为 HI,按时为 LO。在激发输入模式时,作为返回线 8 位数据的使能引脚。OUTA0OUTA3:动态扫描显示的输出口(高 4 位)。OUTB0OUTB3:动态扫描显示的输出口(低 4 位)。BD:消隐输出线。3. DAC0832DAC0832 是 8 分辨率的 D/A 转换集成芯片。与微处理器完全兼容。这个 DA 芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A 转换器由 8 位输入锁存器、8 位 DAC 寄存器、8 位 D/A 转换电路及转换控制电路构成。图 4. DAC0832 芯片引脚介绍:(1)D10D

13、17:8 位数据输入线,TTL 电平,有效时间应大于 90ns(否则锁存器的数据会出错);(2) ILE:数据锁存允许控制信号输入线,高电平有效;(3) CS:片选信号输入线(选通数据锁存器),低电平有效;(4)WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于 500ns)有效。由 ILE、CS、WR1 的逻辑组合产生 LE1,当 LE1 为高电平时,数据锁存器状态随输入数据线变换,LE1 的负跳变时将输入数据锁存;(5)XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;(6) WR2:DAC 寄存器选通输入线,负脉冲(脉宽应大于 500ns)有效。由 WR2

14、、XFER 的逻辑组合产生 LE2,当 LE2 为高电平时,DAC 寄存器的输出随寄存器的输入而变化,LE2 的负跳变时将数据锁存器的内容打入 DAC 寄存器并开始 D/A 转换。(7) IOUT1:电流输出端 1,其值随 DAC 寄存器的内容线性变化;(8) IOUT2:电流输出端 2,其值与 IOUT1 值之和为一常数;(9) Rfb:反馈信号输入线,改变 Rfb 端外接电阻值可调整转换满量程精度;(10)Vcc:电源输入端,Vcc 的范围为+5V+15V;(11) VREF:基准电压输入线,VREF 的范围为-10V+10V;(12) AGND:模拟信号接地;(13)DGND:数字信号接

15、地。4. 38 译码器 74HC138图 5. 74HC13874HC138 是一款高速 CMOS 器件,74HC138 引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138 译码器可接受 3 位二进制加权地址输入(A0, A1 和 A2,即图中A,B,C),并当使能时,提供 8 个互斥的低有效输出(Y0 至 Y7)。74HC138特有 3 个使能输入端:两个低有效(E1 和 E2)和一个高有效(E3)。除非 E1和 E2 置低且 E3 置高,否则 74HC138 将保持所有输出为高。利用这种复合使能特性,仅需 4 片 74HC138 芯片和 1 个反相器,即可轻松实现并行扩展,组合成

16、为一个 1-32(5 线到 32 线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则 74HC138 亦可充当一个 8 输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138 作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在 高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。HC138 按照三位二进制输入码和赋能输入条件,从 8 个输出端中译

17、出一个 低电平输出。两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器,扩展成 24 线译码器不需外接门;扩展成 32 线译码器,只需要接一个外接倒相器。在解调器应用中,赋能输入端可用作数据输入端。图 6. 74HC138 真值表5.锁存器 74HC373373 为三态输出的八 D 透明锁存器图 7. 74HC373当三态允许控制端 OE 为低电平时,Q0Q7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,Q0Q7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,Q 随数据 D 而变。当

18、 LE 为低电平时,Q 被锁存在已建立的数据电平。6.键盘 键盘扫描原理:在扫描每一行时,读列线,若全为 1,说明此行无键按下;若某一列为 0,说明有键按下,且行号和列号已经确定。然后,用同样的方法,依次向列线扫描,读行线上的值。如果,两次所得的行号和列号分别相同,则确定闭合键的键码。7.运放与示波器运算放大器将电流信号转换为电压信号,在示波器上显示出来。(二)硬件连接图 8. 芯片连接图(仿真图)通过键盘的摁键控制波形类型、频率和幅值。38 译码器对键盘进行行扫描,8279 对键盘进行列扫描,扫描结果在通过 8279 传到单片机中。CPU 可通过查询、中断方式了解到 8279 所连键盘中是否

19、有健按下,并且确定是哪个键摁下,发出相应的指令,一方面在 LED 上显示相应的数字符号,一方面通过 D/A 转换器和运放在示波器上显示输出波形。其中中断是关键,中断的实现是通过 8279 内部的 FIFO 检测键盘的变化,如果有键摁下,IRQ 信号变为高电平,通过非门送到单片机的 ,向 CPU 申请中1INT断。三、软件设计本次设计采用 C 语言编程。与汇编语言相比,C 语言程序更加易于理解,在设计编起来较为容易,而且方便寻找错误。设计中,正弦波、锯齿波和三角波均采取查表法实现,这样就解决了函数法产生波形在调节频率时影响幅值大小的缺点。设计中需要注意对于每一个子函数都要定义。C 程序:#inc

20、lude #include #define uchar unsigned char#define uint unsigned int#define com8279 XBYTE0x7fff /adr1-com8279 /命令状态口#define data8279 XBYTE0x6fff / adr2-data8279 /数据口uchar code hello=0x6d,0x06,0x00,0x76,0x79,0x38,0x38,0x3f; /*液晶显示 51 hello 字符*/uchar duanma10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f

21、,0x6f; /顺序 0-9 显示字符uchar keyval,boxingfs,boxing,f=1,v=5,i,s; /参数初始化float code sintab256= /正弦波数据点阵0x80, 0x83, 0x86, 0x89, 0x8d, 0x90, 0x93, 0x96, 0x99, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xba, 0xbc, 0xbf, 0xc2, 0xc5, 0xc7, 0xca, 0xcc, 0xcf, 0xd1, 0xd4, 0xd6, 0xd8, 0xda, 0xdd,

22、 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xea, 0xec, 0xee, 0xef, 0xf1, 0xf2, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf2, 0xf1,

23、 0xef, 0xee, 0xec, 0xea, 0xe9, 0xe7, 0xe5, 0xe3, 0xe1, 0xde, 0xdd, 0xda, 0xd8, 0xd6, 0xd4, 0xd1, 0xcf, 0xcc, 0xca, 0xc7, 0xc5, 0xc2, 0xbf, 0xbc, 0xba, 0xb7, 0xb4, 0xb1, 0xac, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x93, 0x90, 0x8d, 0x89, 0x86, 0x83, 0x80, 0x80, 0x7c, 0x79, 0x76, 0x72, 0x6f,

24、 0x6c, 0x69, 0x66, 0x63, 0x60, 0x5d, 0x5a, 0x57, 0x55, 0x51, 0x4e, 0x4c, 0x48, 0x45, 0x43, 0x40, 0x3d, 0x3a, 0x38, 0x35, 0x33, 0x30, 0x2e, 0x2b, 0x29, 0x27, 0x25, 0x22, 0x20, 0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x15, 0x13, 0x11, 0x10, 0x0e, 0x0d, 0x0b, 0x0a , 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02

25、, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 , 0x0a, 0x0b, 0x0d, 0x0e, 0x10, 0x11, 0x13, 0x15, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x25, 0x27, 0x29, 0x2b, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3a, 0x

26、3d, 0x40, 0x43, 0x45, 0x48, 0x4c, 0x4e, 0x51, 0x55, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x72, 0x76, 0x79, 0x7c, 0x80, ;uchar code juchitab128=0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x

27、2e,0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e,0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x4e,0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e,0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,0x90, 0x92, 0x9

28、4, 0x96, 0x98, 0x9a, 0x9c, 0x9e,0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae,0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xf

29、a, 0xfc, 0xfe, /锯齿波数据点阵;uchar code sanjiaotab256=0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e,0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e,0x50, 0x52, 0x

30、54, 0x56, 0x58, 0x5a, 0x5c, 0x4e,0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e,0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae,0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0x

31、ba, 0xbc, 0xbe,0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,0xfe, 0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, 0

32、xde, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0,0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4, 0xc2, 0xc0,0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4, 0xa2, 0xa0,0x9e, 0x9c, 0x9a, 0x98, 0x96, 0x94, 0x92, 0x90,0x8e, 0x8c, 0x8a, 0x88, 0x86, 0x84, 0x82, 0x80,0x7e, 0x7c, 0x7a, 0

33、x78, 0x76, 0x74, 0x72, 0x70,0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x62, 0x60,0x5e, 0x5c, 0x5a, 0x58, 0x56, 0x54, 0x52, 0x50,0x4e, 0x4c, 0x4a, 0x48, 0x46, 0x44, 0x42, 0x40,0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x30,0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20,0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0

34、x12, 0x10,0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, /三角波数据点阵;void clrkey(); /清屏函数void init8279(); /初始化 8279void delay(int ms);/延时函数void sin(); /正弦波函数void square(); /方波函数void sanjiaobo(); /三角波函数void juchibo(); /锯齿波函数void dir(); /屏幕显示 hello 函数void main () /主函数 clrkey();init8279();dir(); EA=1;EX1

35、=1;IT1=1;while(1) switch(boxing)case 1:delay(4500*(10-f) ; P1=0x00; delay(4500*(10-f);P1=10*v; break;case 2:for (i=0;i0;Ms-) for(i=26;i0;i-);void init8279() /8279 初始化com8279=0xd1; /送清除命令do s=com8279;while(s/等待清除结束com8279=0x2a; /设定分频系数 10com8279=0x00; /8 个字符左端入口方式键盘显示扫描方式com8279=0x80; /写显示 RAM 命令,地址不

36、自动加 1void clrkey() /清显示屏uchar i;com8279=0xD1;i=com8279;iwhile(i=0x80)i=com8279;ivoid square(void) /* 方波发生函数 */ com8279=0xd1; /送清除命令com8279=0x90; /写显示 RAM 命令,地址自动加 1data8279=duanma1; /第一位显示数字“1“,data8279=0x40; /第二位显示“-“data8279=0x71; /f 段码 第三位显示 fdata8279=duanmaf; /第四位显示改变频率数字data8279=0x00; /第五位不显示da

37、ta8279=0x00; /第六位不显示data8279=0x3e; /u /第七位显示 Udata8279=duanmav; /第八位显示改变电压数字 void juchibo(void) /锯齿波函数发生器 com8279=0xd1; /送清除命令com8279=0x90; /写显示 RAM 命令,地址自动加 1data8279=duanma2; /第一位显示 2,表示锯齿波data8279=0x40; /第二位显示-data8279=0x71; /f 段码第三位显示 F,表示频率data8279=duanmaf; /400hz 第四位显示要改变的频率data8279=0x00; / 第五

38、位不显示data8279=0x00; /第六位不显示data8279=0x3e; /第七位显示 Udata8279=duanmav; /第八位显示要改变的电压void sanjiaobo(void) /三角波发生函数com8279=0xd1; /送清除命令com8279=0x90; /写显示 RAM 命令,自动加 1 data8279=duanma3; /第一位显示 3,表示三角波data8279=0x40; /第二位显示-data8279=0x71; /f 段码 第三位显示 F,表示频率data8279=duanmaf; / 第四位显示改变频率数字data8279=0x00; /200hz

39、第五位data8279=0x00; / 第六位不显示data8279=0x3e; / 第七位显示 U 表示电压data8279=duanmav; / 第八位显示改变电压数字void sin(void) /正弦波函数发生函数com8279=0xd1; /送清除命令com8279=0x90; /写显示 RAM 命令,地址自动加 1data8279=duanma4; /第一位显示 4 表示正弦波data8279=0x40; /第二位显示-data8279=0x71; /f 段码 第三位显示 Fdata8279=duanmaf; /第四位显示输入data8279=0x00; /第五位不显示data82

40、79=0x00; /第六位不显示data8279=0x3e; /第七位显示 Udata8279=duanmav; /第八位显示输入 int1() interrupt 2uchar keyval;com8279=0x40; /读 FIFO 命令地址自动加 1keyval=data8279; /读出键值switch(keyval) /键值判断程序case 0xdf:square();boxing=1;break; /方波case 0xd7:juchibo();boxing=2;break; /锯齿波case 0xcf:sanjiaobo();boxing=3;break; /三角波case 0xc

41、7:sin() ;boxing=4;break; /正弦波case 0xc9: ;break;case 0xca: ;break;case 0xde:f=f+1;com8279=0x90;data8279=0x71; /F data8279=0x00;data8279=0x00;data8279=duanmaf;if(f=10)f=0;break;case 0xdd:f=f-1;com8279=0x90;data8279=0x71;data8279=0x00;data8279=0x00;data8279=duanmaf;if(f=0)f=10;break;case 0xd6:v=v+1,com

42、8279=0x90;data8279=0x3e,data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=duanmav;if(v=10) v=0; ;break;case 0xd5:v=v-1,com8279=0x90;data8279=0x3e,data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=duanmav;if(v=0) v=

43、10; ;break;case 0xc5: com8279=0xd1;com8279=0x90;break;四、调试 用 keil 将 c 语言程序生成 hex 文件,导入仿真图的单片机中,运行仿真。通过键盘对波形控制,利用示波器进行观察。 1.初始显示 2.方波 (1)初始 “1”代表方波 (2)改变频率增大频率减小频率(3)改变幅值增大幅值减小幅值3.锯齿波4.三角波5.正弦波锯齿波、三角波、正弦波的幅值频率调节效果类似于方波,在此不作演示。五、新增功能与实现方法欲添加一个梯形波,由于找不到合适的实现梯形波的函数或点阵,没有实现;另外有想添加电压表实现对波形电压值的测量,但是没有什么实际意

44、义。在本次设计中不作其它附加功能的添加。六总结与体会首先,在我看来,单片机的课程设计是非常必要的。我们学了一个学期的单片机课程,但没有实际地去运用单片机,因此对单片机没有深入的理解。只有真正使用单片机去完成一个功能的实现,我们才会对单片机有一个本质的把握。课程设计给了我们这样一个机会,因此我们应该把握住这个机会,认认真真地去完成自己的课程设计。当看到“波形发生器”的课题时,感觉上是挺熟悉的。单片机波形发生器在单片机设计的课题中不算新的课题,实现起来难度也不会太大。但是老师在题目中明确给了要求,要采用 8279 接口 4*8 键盘及 8 位 LED 显示器。这其实是增加了设计的难度。一般的设计者

45、估计会用 LCD 显示波形数据,因为这样可以大大减少键盘的数量,减少芯片的使用和简化程序。对键盘的检测和控制是单片机设计中的一大重点和难点,我能体会到老师的用意。我和队友在刚开始设计的时候也是觉得有些困难。8279 和 38 译码器还好,因为在课本上有资料可考,对照课本上的连线图大致能解决。难点在于 D/A 转换器的连线。我们通过查阅资料,了解 D/A 转换器各引脚的功能,然后一步步完成了 D/A 转换器与单片机的接线。其实这个设计的最大好处在于,D/A 转换器转换器和 8279 是分开独立工作的,这样就使得设计大大简化了。再接上运放和示波器,输出部分很快就完成了。键盘的检测和控制部分比较明朗

46、,可以直接对照教材上的图加以改动完成。再完成与单片机的连接之后,硬件部分便完成了。最大的工作在于 C 程序的设计。因为要完成 4 种波形的设计,而且还要实现幅值、频率的调节。首先我们要确定大致的框架,然后再一步步完成每一个子程序。程序众多,难免发生错误和遗漏,我们就会一行一行地查找错误。终于程序可以运行的时候,我们又发现我们在调节频率的同时,幅值也会改变。经过认真查找,我们发现问题在于我们程序中实现波形的函数。方波没有问题,正弦波用的查表发也没有问题。锯齿和三角波使用的函数方法实现 y=i,这样在改变频率时幅值也受影响。我们决定用实现正弦波的方法来实现锯齿波和三角波,幸运的是锯齿波和三角波的点

47、阵我们可以直接查到,省去了很多工作。改用了查表法之后,波形幅值、频率的调节就完美的实现了。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。 其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:protues 制图、C 语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做

48、这次课程设计的又一收获。后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路。要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报