基于单片机的简易波形发生器计算机控制实践设计_第1页
基于单片机的简易波形发生器计算机控制实践设计_第2页
基于单片机的简易波形发生器计算机控制实践设计_第3页
基于单片机的简易波形发生器计算机控制实践设计_第4页
基于单片机的简易波形发生器计算机控制实践设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、 HEFEI UNIVERSITY计算机控制系统综合实践设计报告题 目: 简易波形发生器的设计 系 别: 电子信息与电气工程系 专业(班级): 10自动化(2)班 姓名(学号): 导师姓名: 完成时间: 计算机控制系统综合实践设计任务书设计题目简易波形发生器的设计设计类型工程设计类导师姓名储忠刘伟主要内容及目标设计一个简易波形发生器,要求:1、 系统能通过开关或按钮由选择性地输出正弦波、方波、阶梯波等三形。2、 四种波形的频率均可通过电位器在一定范围内调节。3、扩展功能:用LCD显示波形及对应的频率。具 有的设计条件PC机一台,AT89S52最小系统版等计 划学生数及任务学生数:3人(1):明

2、确课题对程序功能。(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。提交设计报告书(应包括设计思想、硬件设计电路图、软件设计流程、设计心得,并附设计软件)计划设计进程(按课程设计周计算)第一周设计任务:(1):明确课题对程序功能,运算精度等方面的要求及硬件条件 (2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。第二周设计任务:(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程

3、序运行结果正确为止。参考文献1李玉梅 基于MCS51系列单片机原理的应用设计 国防工业出版社2顾栤 赵伟军 王泰 单片机计算机原理开发应用 高等教育出版社3张洪润 蓝清华 单片机应用技术教程 清华大学出版社4于海生 计算机控制技术 机械工业出版社目 录摘要- 1 -一 引言- 2 -1.1单片机的介绍- 2 -1.2课程设计的要求- 2 -二设计方案- 3 -2.1 总体方案的选择- 3 -2.2 显示电路的选择- 3 -2.3硬件的设计- 4 -2.31 AT89C52单片机- 4 -2.32 DAC0832- 5 -2.33 74LS22- 7 -2.4软件的设计- 7 -2.41信号频率

4、数据采集- 7 -2.42正弦波产生程序- 7 -2.43 三角波产生程序- 8 -2.44方波产生程序- 8 -2.45 锯齿波产生程序- 9 -三系统测试- 10 -3.1波形发生器的调试与测试- 10 -3.2测试分析- 12 -总结- 12 -参考文献- 12 -计算机控制系统综合实践设计摘要波形发生器也称函数信号发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿、正弦、方波、三角等波形。本次我们设计的课题是利用单片机AT89S52采用程序设计方法产生正弦波,锯齿波,三角波,方波四种

5、波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生1Hz3kHz的波形并且可调。系统通过按键来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分, 达到了用单片机控制产生三四种波形并且显示的功能目的。关键词:AT89S52 DAC0832 示波器 液晶显示一 引言1.1单片机的介绍单片机是一种集成在电路芯片,采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能

6、还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的。1.2课程设计的要求本次课程设计是做基于单片机的简易波形发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放

7、大器处理后,从信号发生器的输出端口输出。二设计方案2.1 总体方案的选择方案一:采用函数信号发生器ICL8038集成模拟芯片。ICL8038是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。方案二:采用分立元件实现非稳态的多谐振振荡器,然后根据需要加入积分电路等构成正弦、矩形、三角等波形发生器。这种信号发生器输出频率范围窄,而且电路参数设定较繁琐,其频率大小的测量往往需要通过硬件电路的切换来实现,操作不方便。 方案三:采用单片机和DAC0832数模转换器生成波形,由于是软件滤波,所

8、以不会有寄生的高次谐波分量,生成的波形比较纯净。它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。经比较,方案三既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比较高,所以采用该方案。2.2 显示电路的选择方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼就感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。 方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控

9、制,可以显示字母。以上两种方案综合考虑,选择方案二。系统的总体框图如下图2-1所示:键盘显示控制器显示模块键盘模块波形输出模块电 源源主控器AT89C52图2-1系统设计总体框图2.3硬件的设计2.31 AT89C52单片机用芯片AT89S52作为系统的主控核心。单片机具有体积小,使用灵活的,易于人机对话和良好的数据处理,有较强的指令寻址和运算功能等优点。且单片机功耗低,价格低廉的优点。89S52单片机有44个引脚PLCC和TQFP方形封装形式,40个引脚的双列直插式封装形式,最常用的40个引脚封装形式及其配置如图2-1所示 图2-1 单片机89S52引脚图VCC:AT89S52电源正端输入,

10、接+5V。 VSS:电源地端。 XTAL1:单芯片系统时钟的反相放大器输入端。 XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体,系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。 RESET:AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。EA/Vpp:“EA”为英文“Ex

11、ternal Access”的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。ALE/PROG:表示地址锁存器启用信号。PSEN:此为"Program Store Enable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。PORT0(P0.0P0.7):端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。端口2是

12、具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。PORT1(P1.0P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。PORT3(P3.0P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。2.32 DAC0832DAC0832是双列直插式8位D/A转

13、换器。能完成数字量输入到模拟量(电流)输出的转换。图2-3为DAC0832的引脚图。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为±1LSB,参考电压(+10/span>-10)V,供电电源为(+5+15)V,逻辑电平输入与TTL兼容。从图2-2中可见,在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。图2-2 DAC0832的引脚图图2-2中,当ILE为高电平,片选信号 /CS 和写信号 /WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的

14、输出随输入而变化。此后,当 /WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。对第二级锁存来说,传送控制信号 /XFER 和写信号 /WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当 /WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。图2-2中其余各引脚的功能定义如下:(1) DI7DI0 :8位的数据输入端,DI7为最高位。(2) IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全

15、为0时,输出电流为0。(3) IOUT2 :模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1IOUT2常数。(4) RFB :反馈电阻引出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。(5) VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10-10)V。VREF端与D/A内部T形电阻网络相连。(6) VCC :芯片供电电压,范围为(+5 15)V。(7) AGND :模拟量地,即模

16、拟电路接地端。(8) DGND :数字量地。P3口:8位准双向I/O口,双功能复用口。2.33 74LS22图2-3 74LS22引脚图74LS22为四输入双与门:A1,B1,C1,D1为第一个与门的输入,Y1为第一个与门的输出。A2,B2,C2,D2为第一个与门的输入,Y2为第一个与门的输出。在此系统中用来给单片机提供中断信号。2.4软件的设计2.41信号频率数据采集本程序通过外部中断,接收减频或加频按键,单片机内部对接受的值经过运算得出波形的输出延时,从而产生频率的改变。电路较为简单,成本较低。2.42正弦波产生程序输入正弦波的采样点,计算出256个(一个周期内)正弦波信号值。然后通过输出

17、的两点间的延时来实现调频。依次循环输出,可得出正弦波。采点值放在table2中,程序如下:void sin()/正弦波unsigned int i;for(i=0;i<256;i+)DAC0832=table2i;delay(pinlv/256);2.43 三角波产生程序设个自变量i让它不断地自加1,直到加到255时,t=i,对t进行不断地自减1直到减到t=0,然后再不断地重复上述过程产生三角波。程序如下:void tran()/三角波unsigned char i;for(i=0;i<255;i+)DAC0832=i;delay(pinlv/64);for(i=255;i>

18、0;i-)DAC0832=i;delay(pinlv/64);2.44方波产生程序设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后再重复上述过程。程序如下:void fang()/方波DAC0832=0;delay(pinlv/2);DAC0832=0xff;delay(pinlv/2);2.45 锯齿波产生程序锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同的周期锯齿波。锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用

19、延时法,来产生锯齿波,设个自变量i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程。程序如下:void jvchi()/锯齿波unsigned char i;for(i=0;i<255;i+)DAC0832=i;delay(pinlv/256);三系统测试3.1波形发生器的调试与测试本系统是在protues下仿真,使用Keil C51编程,从而实现其设计及仿真的测试。测试工具是示波器。对于键盘模块,我们应当首先确定每个按键的作用,只有当我们确定键之后,才可以对我们所要设置的按键的功能通过真正做到使软硬件相结合在一起,实现我们的目标功能。在确定以后将

20、各部分的程序及各子程序编好,使用keilC51进行编译,根据提示的错误对程序进行修改。除了语法差错和逻辑差错外,当确认程序没问题时,通过直接加载到protues软件电路中进行仿真。当按键第一次按下时,波形为三角波,同时LCD1602显示为train。仿真图如图3-1所示。图3-1 三角波仿真图当按键第2次按下时,波形为矩形波,同时LCD1602显示为squrae。仿真图如图3-2所示。图3-2 矩形波仿真图当按键第3次拨下时,波行为锯齿波,同时LCD1602显示为squrae。仿真图如图3-3所示。图3-3 锯齿波仿真图当按键第四次按下时,波形为正弦波,同时LCD1602显示为sine。仿真图

21、如图3-4所示。图3-4 正弦波仿真图3.2测试分析在对系统进行波形仿真时可以在示波器上观察到三角波、正弦波和方波的波形。其中三角波以及正弦波的输出误差较大,方波波形较为理想。这一方面与电路设置的参数有关,另一方面也与使用的仿真软件有关。对于上述问题的解决办法是:改变仿真电路的参数或着换用版本较高的仿真软件。当然一般产生这种情况的原因多由于电路的参数设计不合理所制。当仿真时,由于存在一定的系统误差,波形效果不是很好。在进行试验过程中,只用一个DA转换器时,图形只有一点点失真。这说明也和增加了D/A转换器有关。总结两个星期的课程设计很快就这样过去了,经过此课程设计我们已经了解了DAC0832的基

22、本的功能的实现和开关的操作。在这次的软件设计中,程序设计采用的是汇编语言。汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。在这次的硬件设计中,我们也遇到了一些问题,当我们把电路搭建好以后,用PROTEUS去仿真,可是无法输出波形,不然就是出来的波形很混乱。后来于是我们就只用一片D/A去仿真,问题就消失了,我又试着用两片D/A问题再次出现了。经过再三检查发现是第二片D/A接运放时,没有接地造成的。就这样整整花了4的时间才解决了这个问题。此次设计可以说是理论知识与动手能力的一次综合演练,它要求我们不但要掌握其设计原理,能编出相应的源程序,还要求我们有一定的硬件知识,能

23、动手设计线路并搭建好。最后,在这里再一次感谢刘伟老师和储忠老师的悉心指导和同学们的热心帮助。参考文献1 李玉梅 基于MCS51系列单片机原理的应用设计 国防工业出版社2 顾栤 赵伟军 王泰 单片机计算机原理开发应用 高等教育出版社3 张洪润 蓝清华 单片机应用技术教程 清华大学出版社4 于海生 计算机控制技术 机械工业出版社附录1 软件清单:#include<reg52.h>#define uchar unsigned char#define uint unsigned int/#define Fosc 24000000/12000000 /12分频后的频率#define DAda

24、ta P0/DA数据端口sbit DA_S1= P20; / 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit DA_S2= P21; / 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit key= P32;uchar wavecount; /'抽点'计数uchar THtemp,TLtemp;/传递频率的中间变量/uint T_temp;uchar judge=1; /在方波输出函数中用于简单判别作用uchar waveform; /当其为0、1、2时,分别代

25、表三种波uchar code freq_unit4=10,50,200,10; /三种波的频率单位 sawtoothuchar idata wavefreq4=1,1,1,1; /给每种波定义一个数组单元,用于存放单位频率的个数uchar code lcd_hang1="Sine Wave " "Triangle Wave " "Square Wave " "sawtooth Wave ""Select Wave: " "press No.1 key! "uchar idat

26、a lcd_hang216="f= Hz "/*uchar code wave_freq_adjust= /频率调整中间值 0xff,0xb8,0x76,0x56,0x43,0x37,0x2e,0x26,0x20,0x1c, /正弦波频率调整中间值0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e,/三角波频率调整中间值0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e; uint code wave_freq_adjust= /频率调整中间值 380,184,118,86,67

27、,55,46,28,38,32,295,142, 90,65,50,40,32,27,23,14,295,142, 90,65,50,40,32,27,23,14; */*uchar code waveTH= 0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;uchar code waveTL= 0xf2,0x78,0xfb,0x3c,0x63,0

28、x7d,0x8f,0x9d,0xa8,0xb1,0x17,0x0b,0xb2,0x05,0x37,0x58,0x70,0x82,0x90,0x9b, 0x4d,0xa7,0xc4,0xd3,0xdc,0xe2,0xe6,0xea,0xec,0xee;*/*这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求*/uchar code waveTH= 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9

29、,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe;uchar code waveTL= 0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, /正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde,/三角波频率调整中间值0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c; /*/uchar code triangle_tab= /每隔数字8,采取一次0x00,0x08,0x10,0x18,0x20,0x28,0x

30、30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff,0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80,0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x00;uchar c

31、ode sine_tab256=/输出电压从0到最大值(正弦波1/4部分)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,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xf

32、a,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,/输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0x

33、ba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,/输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,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,

34、0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/输出电压从最小值到0(正弦波1/4部分)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,0

35、x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80; uchar code sawtooth_tab=0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,

36、0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,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

37、,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;void delay(uchar z) uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void triangle_out()/

38、三角波输出 DAdata=triangle_tabwavecount+;if(wavecount>64) wavecount=0;DA_S1=0; /打开8位输入寄存器DA_S1=1; /关闭8位输入寄存器void sine_out() /正弦波输出 DAdata=sine_tabwavecount+;DA_S1=0; /打开8位输入寄存器DA_S1=1; /关闭8位输入寄存器void square_out() /方波输出 judge=judge; if(judge=1) DAdata=0xff;else DAdata=0x00;DA_S1=0; /打开8位输入寄存器DA_S1=1; /

39、关闭8位输入寄存器void sawtooth_out() /锯齿波输出DAdata=sawtooth_tabwavecount+;if(wavecount>71) wavecount=0;DA_S1=0; /打开8位输入寄存器DA_S1=1; /关闭8位输入寄存器/*1602液晶的相关函数*/#define lcd_ports P1sbit rs=P22;sbit rw=P23;sbit lcden=P24;void write_com(uchar com)rs=0;/置零,表示写指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcde

40、n=0;void write_date(uchar date)rs=1;/置1,表示写数据(在指令所指的地方写数据)lcden=0;lcd_ports=date;delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1)uchar num;write_com(addr);delay(1); /延时一会儿?for(num=0;num<16;num+)write_date(temp1num);/或者这样写write_date(*(temp1+num);delay(1);void init_lcd()/uch

41、ar num;lcden=0; /可有可无?rw=0; /初始化一定要设置为零,表示写数据write_com(0x38); /使液晶显示点阵,为下面做准备write_com(0x0c); /初始设置write_com(0x06); /初始设置write_com(0x01); /清零write_com(0x80); /使指针指向第一行第一格 disp_lcd(0x80,&lcd_hang14*16); /在第一行显示 disp_lcd(0xc0,&lcd_hang15*16); /在第二行显示/*for(num=0;num<16;num+)write_date(tablen

42、um);delay(5);write_com(0x80+0x40); /给指针重新赋值,使之指向第二行第一格for(num=0;num<16;num+)write_date(table1num);delay(5); */*TMOD=0x01; /选用定时方式1TH0=(65536-50000)/256; /赋初值TL0=(65536-50000)%256;/EA=1;/开总中断ET0=1; /开定时器中断TR0=1; /启动定时器*/*1602液晶函数声明结束*/void main() uchar i=0;DA_S2=0; /使DAC寄存器处于直通状态DAdata=0;DA_S1=1; /关闭8位输入寄存器init_lcd(); waveform=0;TMOD=0x01; /设置定时器0为16位工作方式IT0=1; /设置外部中断0为下降沿触发ET0=1; /开定时器中断EX0=1

温馨提示

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

最新文档

评论

0/150

提交评论