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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

键盘控制的多种波形发生器要点.docx

1、键盘控制的多种波形发生器要点课程设计量化评分标准指标最高分评分要素评分方案设计35方案选择合理,分析、设计正确,原理清楚,电路、程序流程图清晰,结构合理,程序简洁、正确。调试15过程清晰,调试方案设计合理,测试点选择适当,程序编写正确,调试步骤清楚。结果20电路和程序运行结果正确,达到预期效果。设计报告20报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点突出,报告完全符合规范化要求,用计算机打印成文。工作态度10工作态度认真,按时完成设计任务,是否独立完成。总 评 成 绩设计题目:键盘控制的多种波形发生器摘要本文以STC89C52单片机为核心设计了一个低频函数信号发生器。信号发生

2、器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、三角波、三角波、方波和其他任意波形。 本系统以单片机AT89S51为系统的控制核心,结合D/A转换芯片DAC0832设计一个简易低频信号源的设计,通过CH451外接键盘控制选择多种波形发生,用示波器观察输出波形。关键词:信号源 STC89C52 DAC0832 CH451一、要求1、单片机产生多种波形2、键盘控制选择波形发生(三角波、锯齿波、正弦波、方波)二、设计分析2.1 设计思路波形发生器设计思路框图如下所示。波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从

3、而在D/A转换电路的输出端得到相应的电压波形。 图1 设计思路框图(1)主控模块采用ATMEL公司生产的STC89C52单片机作为系统的控制器。51系列的单片机的使用简单,软件编程灵活。自由度大,可用软件编程实现各种算法和逻辑控制,并且功耗低、体积小、技术成熟和成本低。(3) 波形产生模块DAC0832芯片是8位并行、中速(建立时间1us)、CMOS工艺制造的8位单片D/A转,DAC0832换器转换控制容易等优点,在单片机应用系统中得到了广泛的应用。由于DAC0832输出为电流量,而波形最终需要转换为电压量来显示波形幅度,所以在DAC0832电路后接I/V转换电路,在这里采用LM324集成运放

4、来实现电流/电压的转换。(4) 按键控制模块可使用矩阵键盘来控制单片机,使用矩阵键盘可使电路的功能大大的提高,同时在单片机编程设计上也会相应困难, 可以使用专用芯片CH451通过串口与单片机相连,只需占用单片机少量引脚,这样设计变的更合理。在一些简单的控制上,就不用使用矩阵键盘的控制了。 2.3 设计流程图主程序设计流程图如图2所示:图2 设计流程框图子程序设计流程如图3所示:方波 S4是否 按下?图3 子程序设计流程框图三、设计思路和模块3、1 控制芯片设计中主要采用STC89C52型单片机,它具有如下优点:(1)拥有完善的外部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等。(2)该

5、单片机内部拥有4K字节的FLASH ROM程序存储器空间和256字节的RAM数据存储空间,完全可以满足程序的要求。由于该芯片可电擦写,故可重复使用。如果更改程序内容,可将芯片拿下重新烧写。(3)该单片机与工业标准的MCS51型机的指令集和输出引脚兼容。中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。时钟电路。由于频率较大时,三角波、正弦波、方波等波中每一点延时时间为几微秒,故延时时间还要加上指令时间即可得到指定频率的波形,该电路用11.0592MHz晶振。图1.1 STC89C5

6、2的内部结构图3、2 数/模转换电路由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以和输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本

7、设计选用直通方式。DAC0832的数据口和单片机的P0口相连。CSDA:片选信号输入线(选通数据锁存器),低电平有效;WR:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存; 图2、1 DA转换电路3、3 键盘控制电路3、3、1、CH451的引脚和功能CH451是一个整合了数码管显示驱动和键盘扫描控制以和P监控的多功能外围芯片。CH451内置RC振荡电路,可以直接动态驱动8位数码管或64位LED,具有BCD译码或不译码功能,可实现数据的左移、右移、左循环、右

8、循环、各数字独立闪烁等控制功能。CH451内置大电流驱动级,段电流不小于30mA,字电流不小于160mA,并有16级亮度控制功能;在键盘控制方面,该器件内置64键键盘控制器,可实现88矩阵键盘扫描,并内置去抖动电路,可提供按键中断与按键释放标志位等功能;在外部接口方面,CH451可选择简洁的1线串行接口或高速4线串行接口,且内置上电复位,可提供高电平有效复位和低电平有效复位两种输出,同时内置看门狗电路Watch-Dog。CH451提供有28引脚的DIP28与SOP28封装以和DIP24封装形式,28脚与24脚在功能上稍有差别,24的引脚定义如表表3、1所列。表3、1 CH451的DIP24封装

9、形式的引脚定义引脚号名称类型说明2VCC电源正电源端,持续电流不小于200mA15GND电源公共接地端,持续电流不小于200mA4LOAD输入串行接口的数据加载,内置上拉电阻5DIN输入串行接口的数据输入,内置上拉电阻3DOUT输出串行接口的数据输出和键盘中断6DCLK输入串行接口的数据时钟,内置上拉电阻同时用于看门狗的清除输入1、2418SEG7SEG0三态输出/输入数码管的段驱动,高电平有效,键盘扫描输入,高电平有效,内置下拉714DIG7DIG0输出数码管的字驱动,低电平有效,键盘扫描输出,高电平有效16RES输出上电复位和看门狗复位,高电平有效17N.C.空脚未使用,禁止连接表3、2

10、CH451外接矩阵键盘的按键代码表按键代码DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG047H46H 45H44H43H42H41H40HSEG14FH4EH4DH4CH4BH4AH49H48HSEG257H56H 55H54H53H52H51H50HSEG35FH5EH5DH5CH5BH5AH59H58HSEG467H66H 65H64H63H62H61H60HSEG56FH6EH6DH6CH6BH6AH69H68HSEG677H76H 75H74H73H72H71H70HSEG77FH7EH7DH7CH7BH7AH79H78H 图3、1 CH451控制键盘电路图

11、3、4调试说明STC89C52试验箱板图以和区域划分如图3、1所示。主要由复位、晶振电路、蜂鸣器、开关、16个发光二极管LED、脉冲发生电路、8155扩展(包括七段LED显示和4*4键盘等)、A/D扩展、D/A扩展、温度传感器、日时钟、16*16的LED点阵、CH451键盘和七段LED扩展、字符LCD、点阵LCD、RS232/485串口等组成,用户可以单独使用每个部分,也可根据实际需要进行不同的组合,以实现功能复杂的系统,本次课程设计还要外加示波器观察波形:图3、1 STC89C52实验箱的俯视图3、5 设计结果和错误分析3、5、1 可以通过键盘控制选择三角波、方波、锯齿波、矩形波的输出,用示

12、波器观察。3、5、2 程序运行没错,但是下载之后没效果,检查之后发现是实验箱上的入口地址没定义。3、5、3 键盘控制不能实现,仔细检查之后发现键盘编码没有对应相应按键,修改之后可以实现。3、5、4 输出波形有点失真,三角波顶部出现一小部分平的失真,检查之后是送入数组有问题,通过送入的数据连续递增和连续递减之后数组有问题,不能用一个数组通过递增递减来实现,之后生成了其他几种波形数组送入DA0832,能产生连续波形。四、总结基于单片机的信号发生器设计,这个信号发生器的设计中涉和到一个典型的控制过程。通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM741可以将其电流

13、输出线性地转换成电压输出。通过程序的控制,可以产生一系列有规律的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。最终做出来的信号发生器满足了题目中的所有要求:1.产生四种波形。正弦波、三角波、矩形波、锯齿波。 2.幅度可调,峰峰值在05V之间变化。 信号发生器可以生成更多的波形,只需要再加些波形表即可。在这里得感谢学校为我们提供个这样一个实践的机会,当然还得感谢实验室指导老师们的细心指导。附录一原理图1、1 单片机最小系统原理图1、2 DA转换原理图1、3 键盘控制原理图1、4 实验箱总体原理图实物图附录二程序清单 /*头文件包含模块* #include #include #incl

14、ude #define uchar unsigned char #define uint unsigned int /*CH451键盘头文件定义模块* #define ch451_rest 0x0201 /复位 #define ch451_leftmov 0x0300 /设置移位方式-左移 #define ch451_leftcyc 0x0301 /设置移位方式-左循 #define ch451_rightmov 0x0302 /设置移位方式-右移 #define ch451_rightcyc 0x0303 /设置移位方式-右循 #define ch451_dispkeydog_off 0x0

15、400 /关显示、键盘、看门狗 #define ch451_disp_on 0x0401 /开显示 #define ch451_dispkey_on 0x0403 /开显示、键盘 #define ch451_dispkey_dog 0x0407 /开显示、键盘、看门狗功能 #define ch451_dispmode_16 0x0500 /设置默认显示方式:16进制 #define ch451_dispmode_bcd 0x0580 /设置BCD译码方式 #define ch451_twinkle 0x0600 /设置闪烁控制、低8位分别对应8个LCD,高电平闪烁,低电平不闪烁 #define

16、 ch451_dig0 0x0800 / 数码管0显示 #define ch451_dig1 0x0900 / 数码管1显示 #define ch451_dig2 0x0a00 / 数码管2显示 #define ch451_dig3 0x0b00 / 数码管3显示 #define ch451_dig4 0x0c00 / 数码管4显示 #define ch451_dig5 0x0d00 / 数码管5显示 #define ch451_dig6 0x0e00 / 数码管6显示 #define ch451_dig7 0x0f00 / 数码管7显示 #define nop 0x000 /空操作 sbit

17、 ch451_dclk=P10; / 串行数据上升延激活 sbit ch451_din=P11; /串行数据输出、接451的数据输入 sbit ch451_load=P12; /串行数据加载、上升延激活 sbit ch451_dout=P13; /串行数据输入、接451的数据输出 unsigned char ch451_key; /存放键盘中断读取的键值 unsigned char Disp_buff=0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10; /全部灭 void ch451_init(void); void ch451_write(unsigned in

18、t data0); /写命令和数据 void ch451_Enable(void); /使能451 void ch451_Dispkey_enable(void); /显示451显示和按键功能 void Delay_ms(unsigned char n); unsigned char ch451_key_read(void); void ch451_led_write(unsigned char *p); uchar tabArry4; /保存显示数据 char flag=1; /按键标志,当flag=1时表示没有按下,当flag=0时表示有按键按下 int keycount=0; /按键计数

19、 uchar waveth,wavetl; /用于对定时器付值 uint frecount=100; /频率计数 uint mbjs; /码表计数,共采32个点 sbit W=P36; /*程序模块* /=正弦波数据= uchar code sin_tab256= 0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae, 0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce,

20、 0xd1, 0xd3, 0xd5, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9,

21、 0xf8, 0xf7, 0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xde, 0xdc, 0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4, 0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,

22、 0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52, 0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27, 0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb , 0x9, 0x8, 0x7,

23、 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 , 0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23, 0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0

24、x3d, 0x40, 0x43, 0x46, 0x48, 0x4b, 0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c, ; /=三角波信号数据表= uchar code thr_tab32= 0x00,0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef, 0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x

25、5f,0x4f,0x3f,0x2f,0x1f,0x0f ; /=锯齿波信号数据表= uchar code jc_tab33= 0x00,0x08,0x0f,0x18,0x1f,0x28,0x2f,0x38,0x3f,0x48,0x4f,0x58,0x5f,0x68,0x6f,0x78, 0x7f,0x88,0x8f,0x98,0x9f,0xa8,0xaf,0xb8,0xbf,0xc8,0xcf,0xd8,0xdf,0xe8,0xef,0xf8, 0xff; /*毫秒延时程序* void delayms(int ms) uchar i; while(ms-) for(i=250;i0;i-);

26、/*定时器函数* void Timerinit() TMOD=0x01; /定时器0方式1 /定时器初值计算公式:X=65536-(T/T0)=65536-(f0/f/32) TH0=waveth=(65536-57603/frecount)/256; /定时器初值 22.1184MHz TL0=wavetl=(65536-57603/frecount)%256; EA=1; /开总中断 ET0=1; /开定时器0中断 TR0=1; /定时器0开始计数 /*主函数* void main() unsigned char i; Timerinit(); /定时器初始化 W=0; while(1)

27、if(ch451_dout) /如果没有按键、out有效是一短暂脉冲 ch451_led_write(Disp_buff); / 如果没有按键 else ch451_key=ch451_key_read(); /读取按键代码 for(i=7;i0;i-) Disp_buffi=Disp_buffi-1; Disp_buff0=ch451_key; ch451_key=ch451_key_read(); /读取按键代码 /=波形选择= switch (ch451_key) case 71: P1 = jc_tabmbjs; /输出锯齿波 mbjs+; if(mbjs=32) mbjs=0; ca

28、se 70: P1 = sin_tabmbjs; /输出正弦波 mbjs+=8; /256点,每隔8点输出一个数据 if(mbjs=256) mbjs=0; case 69: P1 = thr_tabmbjs; /输出三角波 mbjs+; if(mbjs=32) mbjs=0; case 68: /输出方波 mbjs+; if(mbjs=32) mbjs=0; else if(mbjs16) P1=0xff; else P1=0x00; /*CH451键盘控制模块函数* void ch451_init(void) ch451_write(ch451_rest); ch451_Enable(); ch451_Dispkey_enable(); ch451_dout=1;

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

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