基于51单片机的波形发生器设计_第1页
基于51单片机的波形发生器设计_第2页
基于51单片机的波形发生器设计_第3页
基于51单片机的波形发生器设计_第4页
基于51单片机的波形发生器设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、基于51单片机的波形发生器设计课题要求:题目:设计一个波形发生器,产生单极性、幅度可调、周期可调的方 波、锯齿波、三角波、正弦波信号。要求:通过键盘设置要产生的波形符号、幅度及周期,且当产生波形时在LED显示这些信息;采用8279接口 4*8键盘及8位LED显示器说明:1、由课代表负责分设计小组(2人/组),分组要做到水平高低搭配2、鼓励创新,即在完成本课题要求基础上,又添加新的功能者,将 给予加分。3、考核方法:面试+课程设计报告+设计期间表现。目录:1、 系统总体设计方案规划与选定2、 硬件设计3、 软件设计4、 调试5、 新增功能及实现方法6、 总结与体会7、 参考文献8、 附录(源程序

2、代码、电路图等)一.系统总体设计方案规划与选定本次设计采用AT89C51单片机为核心,通过与8279芯片和38译码器、锁 存器的配合实现对键盘状态的检测和 LED显示的控制,通过D/A转换器和运算 放大器以及示波器实现对波形的输出, 并且在8位LED显示器上显示波形类型 的代号、幅值、频率。键盘为4*8键盘,通过键盘撼键实现对波形种类、 幅值、 频率等的调节。r >LED显示图1.总体方案结构框图二.硬件设计硬件的选择对于功能的实现非常重要,我们要了解芯片的功能、 性能,根据题目要求选择合适的芯片(一)硬件介绍1 .单片机选择AT89C51AT89C51提供以下标准功能:4k字节Flas

3、h闪速存储器,128字节内部 RAM 32个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一 个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C5何降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU勺工作,但允许RAM定时/计数器,串行通信口及中断系统继续工作。 掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位 AT89C51具有优良的性能,符合题目的要求。图2. AT89C51引脚图引脚说明:P0 口: P0 口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL门电流。当P0 口的管脚第一次写1时,被定

4、义为高阻输入。P0能够用于外部程序数据存 储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输 入口,当FIASH进行校验时,需要接上拉电阻。本次设计中P0 口与8279的AD0.7 连接,作为数据传输口。P1 口: P1 口是一个内部提供上拉电阻的 8位双向I/O 口,P1 口缓冲器能接 收输出4TTL门电流。P1 口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为低八位地址接收。本次设计中P1 口与D/A转换器的D10 一D17 口相连。P2 口: P2 口为一个

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

6、带内部上拉电阻的双向I/O 口,可接收输出4个TTL 门电流。当P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输 入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。P3 口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD (串行输入口)P3.1 TXD (用行输出口)P3.2 / INTO (外部中断0)P3.3 /INT1 (外部中断1)P3.4 T0 (计时器0外部输入)P3.5 T1 (计时器1外部输入)P3.6 / WR (外部数据存储器写选通)P3.7 / RD (外部数据存储器读选通)本次设计中 WR、RD分

7、别与8279的WR、RD相连;INT 1与8279的IRQ 相连,作为中断源。RST复位输入。当振荡器复位器件时,要保持 RST脚两个机器周期的高电 平时间。ALE当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位 字节。在FLASH®程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳 过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH6址上置0。此时,ALE只 有在执行MOVXMOVCf令是ALE才起作用。另外,该引脚被略

8、微拉高。如果微 处理器在外部执行状态ALE禁止,置位无效。/PSEN外部程序存储器的选通信号。在由外部程序存储器取指期间,每个 机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的 /PSEN信 号将不出现。/EA:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH , 不管是否有内部程序存储器。注意加密方式 1时,/EA将内部锁定为RESET当 /EA端保持高电平时,此间内部程序存储器。在 FLASHS程期间,此引脚也用于 施加12V编程电源(VPP 。XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2来自反向振荡器的输出。2. 827982

9、79是一款由单一 +5V电源供电的可编程键盘显示接口芯片。 其功能是:对键 盘进行管理和控制;对LED显示器进行控制、对显示数据和显示方式进行管理。图3. 8279芯片引脚说明:<1>AD0.7:双向数据总线。在CPUt 8279间做数据与命令传送。<2>CLK 8279的系统时钟,100KHz为最佳选择。<3>RES复位输入线。输入 HI时可复位8279。<4>CS芯片选择信号线。当这个输入引脚为低电平时,可将命令写入 8279 或读取8279的数据。<5>AQ缓冲器地址选择线。A0=0时,读写一般数据;A0=1时,读取状态标 志位

10、或写入命令。<6>RD读取控制线。RD=0M, 8279输送数据到外部总线。<7>WR写入控制线。WR=0寸,8279从外部总线接收数据。<8>IRQ中断请求。平常IRQ为LO,在键盘模式下,每次读取 FIFO/SENSO RAM勺数据时,IRQ变为HI,读取后转为LQ在传感器模式下,只要传感器一有 变化,就会使IRQ变为HI,读取后转为LQ<9>SL0SL3扫描按键开关或传感器矩阵及显示器,可以是编码模式 (16对 1)或解码模式(4对1)。<10>RL0RL7键盘/传感器的返回线。无按键被按时,返回线为 HI;有按 键被按时,该按

11、键的返回线为LQ在激发输入模式时,为8位的数据输入。<11>SHIFT在键盘扫描模式时,引脚的输入状态会与其它按键的状态一同储存(在BIT6),内部有上拉电阻,未按时为 HI,按时为LQ<12>CNTL/STB在键盘扫描模式时,引脚的输入状态会与 SHIFT以及其它按 键的状态同一储存,内部有上拉电阻,未按时为 HI,按时为LQ在激发输入模 式时,作为返回线8位数据的使能引脚。<13>OUTA0OUTA动态扫描显示的输出口(高4位)。<14>OUTB0OUTB动态扫描显示的输出口(低4位)。<15>BD消隐输出线。3. DAC0832

12、DAC0832t 8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广 泛的应用。D/A转换器由8位输入锁存器、8位DACJ存器、8位D/A转换电路 及转换控制电路构成。图4. DAC0832芯片引脚介绍:(1) D10-D17: 8位数据输入线,TTL电平,有效时间应大于90ns(否则锁 存器的数据会出错);(2) ILE :数据锁存允许控制信号输入线,高电平有效;(3) CS:片选信号输入线(选通数据锁存器),低电平有效;(4) WR1数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS W

13、R酌逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随 输入数据线变换,LE1的负跳变时将输入数据锁存;(5) XFER数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于 500ns)有效;(6) WR2 DACJ存器选通输入线,负脉冲(脉宽应大于 500ns)有效。由 WR2 XFER勺逻辑组合产生LE2,当LE2为高电平时,DACJ存器的输出随寄存 器的输入而变化,LE2的负跳变时将数据锁存器的内容打入 DACJ存器并开始D/A 转换。(7) IOUT1:电流输出端1,其值随DACJ存器的内容线性变化;(8) IOUT2:电流输出端2,其值与IOUT1值之和为一常数;(9) Rf

14、b :反馈信号输入线,改变 Rfb端外接电阻值可调整转换满量程精 度;(10) Vcc:电源输入端,Vcc的范围为+5W +15Y(11) VREF:基准电压输入线,VREF勺范围为-10V+10V;(12) AGND模拟信号接地;(13) DGND数字信号接地。4. 38 译码器 74HC13874HC13呢一款高速CMO器件,74HC13%|脚兼容低功耗肖特基 TTL LSTTD 系列。74HC13邮码器可接受3位二进制加权地址输入(A0, A1和A2,即图中A, B, C),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC13附有3 个使能输入端:两个低有效(E1和E2)和一

15、个高有效(E3)。除非E1和E2置 低且E3置高,否则74HC138等保持所有输出为高。利用这种复合使能特性,仅 需4片74HC13配片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32 (5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC13吩可充当一个8输出多路分配器,未使用 的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系 统,在 高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋 能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时

16、间通常小于存贮 器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟 可以忽略不计。HC138按照三位二进制输入码和赋能输入条件,从8个输出端中 译出一个低电平输出。两个低电平有效的赋能输入端和一个高电平有效的赋能 输入端减少了扩展所需要的外接门或倒相器,扩展成24线译码器不需外接门; 扩展成32线译码器,只需要接一个外接倒相器。在解调器应用中,赋能输入端可 用作数据输入端。74HC138集成译码器功能表输入输出匕E2E1AhAiAoYOY1Y2Y3Y4Y5V(5Y7XHXXXXHHHHHHHHXXHXXXHHHHHHHHLXXXXXHHHHHHHHHLLL工LLHHHHHE

17、IHHL工LLIIETLHHHnirHLLLHLHHHHHLHHHHHHHHHHHLLLH1HLLHLLHHHHLHHHHL1HLHHHHHElLHHIILLHirLHIIHHHHLII11L工HILIIELHHHHHHL*11-高电平 lM电平X-任意电平E斗五、ET 为输入使靛端A2. A1. A)为二进制数据输入端而-”为3个镯出信写 字母上面的“ 一”号说明谈输人或输出是低电平有效图6. 74HC138真值表5.锁存器74HC373373为三态输出的八 D透明锁存器01234567 QQQ QQQQQ01234587DDDDDDDD3-4-7140ELE74HC373图 7. 74HC

18、373当三态允许控制端OE为低电平时,Q0Q7为正常逻辑状态,可用来驱动负 载或总线。当OE为高电平时,Q0Q7呈高阻态,即不驱动总线,也不为总线的负载, 但锁存器内部的逻辑操作不受影响。当锁存允许端LE为高电平时,Q随数据D而变。当LE为低电平时,Q被 锁存在已建立的数据电平。6 .键盘键盘扫描原理:在扫描每一行时,读列线,若全为 1,说明此行无键按下;若某一列为0,说明有键按下,且行号和列号已经确定。然后,用同样的方法,依次向列线扫描,读行线上的值。如果,两次所得的行号和列号分别相同,则确 定闭合键的键码。7 .运放与示波器运算放大器将电流信号转换为电压信号,在示波器上显示出来。(二)硬件

19、连接'HU-! 粒”和 以。 *U7i3如, +36>tt-Z.l*5 UNE rzjAii UMP rJTA-Q FT i'HiFZJTJl。rjtnvr 13tT-1 rizn FSTfflFP3iP1CllcT tnriUJSlZ?RIPJI,I10I*CffTvur_ia *UT.il -JT_P:*UTv13IL Cl frUT Alin>>7*UTJL3zr xfca >aa1J 0- -igJ Or 0 0 ji, 七加皿4小电E I J-j_-rH *4I/: Icrri. *i-n*图8.芯片连接图(仿真图)通过键盘的撼键控制波形类型、

20、频率和幅值。38译码器对键盘进行行扫描,8279对键盘进行列扫描,扫描结果在通过8279传到单片机中。CPUfi!过查询、中 断方式了解到8279所连键盘中是否有健按下,并且确定是哪个键撼下,发出相应的 指令,一方面在LED上显示相应的数字符号,一方面通过 D/A转换器和运放在示波 器上显示输出波形。其中中断是关键,中断的实现是通过8279内部的FIFO检测键盘的变化,如 果有键撼下,IRQ信号变为高电平,通过非门送到单片机的 棺,向CPU申请中断。三、软件设计本次设计米用C语言编程。与汇编语言相比,C语言程序更加易于理解,在设 计编起来较为容易,而且方便寻找错误。设计中,正弦波、锯齿波和三角

21、波均采取查表法实现,这样就解决了函数法产生 波形在调节频率时影响幅值大小的缺点。设计中需要注意对于每一个子函数都要定义。C 程序:#include <reg51.h>#include <absacc.h>#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,0

22、x79,0x38,0x38,0x3f;/*液晶显示51 hello 字符*/ ucharduanma10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,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, 0xb

23、7, 0xba, 0xbc, 0xbf, 0xd1, 0xd4, 0xd6, 0xd8,0xda, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5 0xf1,0xf2, 0xf4, 0xf5,0xf6,0x亿0xf8,0xf9,0xfa,0xfb,0xff, 0xff, 0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf9, 0xf8, 0x亿 0xf6,0xf5, 0xf4, 0xf2,0xe1, 0xde, 0xdd,0xd8, 0xd6, 0xd4,0xba, 0xb7, 0xb4,0xac, 0xab, 0xa8,0x89, 0x86,

24、0x83,0x80, 0x7c, 0x79,0x5a, 0x57, 0x55,0x4e, 0x4c, 0x48,0x2e, 0x2b, 0x29,0x25, 0x22, 0x20,0x0e, 0x0d, 0x0b,0x09, 0x08, 0x07,0x00, 0x00, 0x00,0x00, 0x00, 0x00,0x06, 0x07, 0x08,0x0a, 0x0b, 0x0d,0x1e, 0x20, 0x22,0x27, 0x29, 0x2b,0x45, 0x48, 0x4c,0x51, 0x55, 0x57,0x76, 0x79, 0x7c, ;0xf1, 0xef, 0xee, 0xd

25、a,0xd1, 0xcf, 0xcc,0xb1,0xa5, 0xa2, 0x9f,0x80,0x76, 0x72, 0x6f,0x51,0x45, 0x43, 0x40,0x27,0x1e, 0x1c, 0x1a,0x0a ,0x06, 0x05, 0x04, 0x00 ,0x00, 0x00, 0x00, 0x09 ,0x0e, 0x10, 0x11,0x25,0x2e, 0x30, 0x33,0x4e,0x5a, 0x5d, 0x60, 0x80,0xc2, 0xc5, 0xc7,0xe7, 0xe9, 0xea,0xfc, 0xfd, 0xfd,0xfe, 0xfd, 0xfd,0xec

26、, 0xea, 0xe9,0xca, 0xc7, 0xc5,0x9c, 0x99, 0x96,0x6c, 0x69, 0x66,0x3d, 0x3a, 0x38,0x18, 0x16, 0x15,0x03, 0x02, 0x02,0x01, 0x02, 0x02,0x13, 0x15, 0x16,0x35, 0x38, 0x3a,0x63, 0x66, 0x69,0xca, 0xcc, 0xcf,0xec, 0xee, 0xef,0xfe, 0xff, 0xff,0xfc, 0xfb, 0xfa,0xe7, 0xe5, 0xe3,0xc2, 0xbf, 0xbc,0x93, 0x90, 0x8

27、d,0x63, 0x60, 0x5d,0x35, 0x33, 0x30,0x13, 0x11, 0x10,0x01, 0x00, 0x00,0x03, 0x04, 0x05,0x18, 0x1a, 0x1c,0x3d, 0x40, 0x43,0x6c, 0x6f, 0x72,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, 0x2

28、e,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

29、, 0x92, 0x94, 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

30、, 0xf6, 0xf8, 0xfa, 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, 0x

31、50, 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, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0x

32、b4, 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, 0xfa, 0xfc, 0xfe, 0xfe, 0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0,0xee, 0xec, 0xea, 0xe8, 0xe

33、6, 0xe4, 0xe2, 0xe0, 0xde, 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

34、, 0x80, 0x7e, 0x7c, 0x7a, 0x78, 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

35、, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00, 点阵;void clrkey();void init8279();void delay(int ms);/延时函数void sin();void square();void sanjiaobo();void juchibo();void dir();void main ()clrkey();init8279();dir();EA=1;EX1=1;IT1=1;while(1)switch(boxing)case 1

36、:delay(4500*(10-f);/ 三角波数据/清屏函数/初始化8279/正弦波函数/方波函数/三角波函数/锯齿波函数/屏幕显示hello函数/主函数P1=0x00;delay(4500*(10-f);P1=10*v; break;case 2:for (i=0;i<255;i+) delay(10-f);P1=0.1*v*juchitabi; break;case 3:for(i=0;i<255;i+)delay(10-f);P1=0.1*v*sanjiaotabi;break;case 4:for(i=0;i<255;i+)delay(10-f);P1=0.1*v*

37、sintabi; break;void dir()/ 显示 hellouint i,j;com8279=0x90;/1001 0000 写显示用 RAMfor(i=0;i<8;i+)data8279=helloi;return;延时 Ms*10usvoid delay(uchar Ms) / uchar data i;for(;Ms>0;Ms-) for(i=26;i>0;i-);void init8279()8279初始化com8279=0xd1;/送清除命令do s=com8279;while(s&0x80=1);/ 等待清除结束com8279=0x2a; /设定

38、分频系数10com8279=0x00; /8个字符左端入口方式键盘显示扫描方式com8279=0x80; / 写显示RAMfir令,地址不自动加1/清显示屏 void clrkey()uchar i;com8279=0xD1;i=com8279;i&=0x80;while(i=0x80)i=com8279;i&=0x8279;void square(void) /* 方波发生函数*/com8279=0xd1; com8279=0x90; / data8279=duanma1; data8279=0x40;data8279=0x71; /f data8279=duanmaf;da

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

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

41、279=0x40;data8279=0x71; /f data8279=duanmaf;data8279=0x00;data8279=0x00;data8279=0x3e;/三角波发生函数第二位显本F,表木频率第四位显示改变频率数字第五位第六位不显示data8279=duanmav; /第八位显示改变电压数字void sin(void)com8279=0xd1;com8279=0x90;/正弦波函数发生函数/送清除命令/写显示RA嘛令,地址自动加1data8279=duanma4; data8279=0x40;data8279=0x71; /f data8279=duanmaf; data82

42、79=0x00;data8279=0x00;data8279=0x3e; data8279=duanmav;/第一位显示4表示正弦波/第二位显示-段码第三位显示F/第四位显示输入第五位不显示/第六位不显示/第七位显示U/第八位显示输入int1() interrupt 2uchar keyval;com8279=0x40; / keyval=data8279; / switch(keyval)读FIFO命令地址自动加读出键值/键值判断程序case 0xdf:square();boxing=1;break;case 0xd7:juchibo();boxing=2;break;case 0xcf:s

43、anjiaobo();boxing=3;break;case 0xc7:sin() ;boxing=4;break;case 0xc9: ;break;case 0xca: ;break;case 0xde:/方波锯齿波三角波正弦波f=f+1;com8279=0x90;data8279=0x71; /Fdata8279=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=duanm

44、af;if(f=0)f=10;break;case0xd6:v=v+1,com8279=0x90;data8279=0x3e,data8279=0x00;data8279=0x 00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=0x00;data8279=duanmav;if(v=10)v=0; ;break;case0xd5:v=v-1,com8279=0x90;data8279=0x3e,data8279=0x00;data8279=0x 00;data8279=0x00;data8279=0x00;data8279=0x00;da

45、ta8279=0x00;data8279=duanmav;if(v=0) v=10; ;break;case 0xc5: com8279=0xd1;com8279=0x90;break;四、调试用keil将c语言程序生成hex文件,导入仿真图的单片机中,运行仿真。通过键 盘对波形控制,利用示波器进行观察。1.初始显示2.方波(2)改变频率减小频率(3)改变幅值增大幅值Fnt c J 1A D J 1S<ajT3 n u 0GUIWP皿 Bet减小幅值3.锯齿波4.三角波3-FS U5. i!D gitall C-sci loscc-peUhimelD-M0 C BI 5.正弦波H-F 5

46、 U5锯齿波、三角波、正弦波的幅值频率调节效果类似于方波,在此不作演示五、新增功能与实现方法欲添加一个梯形波,由于找不到合适的实现梯形波的函数或点阵, 没有实现; 另外有想添加电压表实现对波形电压值的测量, 但是没有什么实际意义。在本次 设计中不作其它附加功能的添加。六.总结与体会首先,在我看来,单片机的课程设计是非常必要的。我们学了一个学期的 单片机课程,但没有实际地去运用单片机,因此对单片机没有深入的理解。只有 真正使用单片机去完成一个功能的实现,我们才会对单片机有一个本质的把握。 课程设计给了我们这样一个机会,因此我们应该把握住这个机会,认认真真地去 完成自己的课程设计。当看到“波形发生

47、器”的课题时,感觉上是挺熟悉的。单片机波形发生器在 单片机设计的课题中不算新的课题,实现起来难度也不会太大。但是老师在题目 中明确给了要求,要采用8279接口 4*8键盘及8位LED显示器。这其实是增加 了设计的难度。一般的设计者估计会用LCD显示波形数据,因为这样可以大大减 少键盘的数量,减少芯片的使用和简化程序。对键盘的检测和控制是单片机设计 中的一大重点和难点,我能体会到老师的用意。我和队友在刚开始设计的时候也是觉得有些困难。8279和38译码器还好,因为在课本上有资料可考,对照课本上的连线图大致能解决。难点在于D/A转换 器的连线。我们通过查阅资料,了解D/A转换器各引脚的功能,然后一

48、步步完成 了 D/A转换器与单片机的接线。其实这个设计的最大好处在于,D/A转换器转换器和8279是分开独立工作的,这样就使得设计大大简化了。再接上运放和示波 器,输出部分很快就完成了。键盘的检测和控制部分比较明朗, 可以直接对照教 材上的图加以改动完成。再完成与单片机的连接之后,硬件部分便完成了。最大的工作在于C程序的设计。因为要完成4种波形的设计,而且还要实 现幅值、频率的调节。首先我们要确定大致的框架,然后再一步步完成每一个子 程序。程序众多,难免发生错误和遗漏,我们就会一行一行地查找错误。终于程 序可以运行的时候,我们又发现我们在调节频率的同时, 幅值也会改变。经过认 真查找,我们发现问题在于我们程序中实现波形的函数。 方波没有问题,正弦波 用的查表发也没有问题。锯齿和三角波使用的函数方法实现y=i ,这样在改变频率时幅值也受影响。我们决定用实现正弦波

温馨提示

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

评论

0/150

提交评论