填空+简答+其他

更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
单片机控制DAC0832产生正弦波、方波、三角波、梯形波和三角波。Proteus的原理电路见下图。单片机P1.0~P1.4接有5个按键,当按键按下时,分别对应产生正弦波、方波、三角波、梯形波和三角波。 单片机控制DAC0832产生各种波形,实质就是单片机把波形的采样点数据送至DAC0832,经D/A转换后输出模拟信号。改变送出的函数波形采样点后的延时时间,就可改变函数波形的频率。产生各种波形原理如下。 (1)正弦波产生原理 单片机把正弦波的256个采样点的数据送给DAC0832。正弦波采样数据可用软件编程或MATLAB等工具计算。 (2)方波产生原理 单片机采用定时器定时中断,时间常数决定方波高、低电平持续时间。 (3)三角波产生原理 单片机把初始数量0送DAC0832后,不断增1,增至0xff后,然后再把送给DAC0832的数量不断减1,减至0后,再重复上述过程。 (4)锯齿波产生原理 单片机把初始数据0送DAC0832后,数据不断增1,增至0xff后,再增1则溢出清“0”,模拟输出又为0,然后再重复上述过程,如此循环,则输出锯齿波。 (5)梯形波产生原理 输入给DAC0832数量从0开始,逐次加1。当输入数量为0xff时,延时一段时间,形成梯形波平顶,然后波形数据再逐次减1,如此循环,则输出梯形波。 参考程序如下: #include<reg51.h> sbit wr=P3^6; sbit rd=P3^2; sbit key0=P1^0; //定义P1.0脚的按键为正弦波键key0 sbit key1=P1^1; //定义P1.1脚的按键为方波键key1 sbit key2=P1^2; //定义P1.2脚的按键为三角波键key2 sbit key3=P1^3; //定义P1.3脚的按键为梯形波键key3 sbit key4=P1^4; //定义P1.3脚的按键为锯齿波键key4 unsigned char flag; //flag为1、2、3、4、5对应正弦、方波、三角、梯形、锯齿波 unsigned char const code //以下为正弦波采样点数组256个数据 SIN_code[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb0,0xb3,0xb6,0xb9,0xb,0xbf,0xc1,0xcc,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xd,0xd c,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf a,0xfb,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc, 0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xfe,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0 xe1,0xde,0xdc,0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xcc,0xcb,0xb9,0xb6,0xb 4,0xb1,0xae,0xab,0xa8,0xa5,0xaa,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,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,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x 0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc, 0xd,0xe,0xf,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x 30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0 x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c} unsigned char keys can() //键盘扫描函数 { unsigned char keys can_num,temp; P1=0xff; //P1口输入 temp=P1; //从P1口读入键值,存入temp中 if(~(temp&0xff)) //判是否有键按下,即键值不为0xff,则有键按下{ if(key0==0) //产生正弦波的按键按下,P1.0=0 { keys can_num=1; //得到的键值为1,表示产生正弦波 } else if(key1==0) //产生方波的按键按下,P1.1=0 { keys can_num=2; //得到键值为2,表示产生方波 } else if(key2==0) //产生三角波的按键按下,P1.2=0 { keys can_num=3; //得到的键值为3,表示产生三角波 } else if(key3==0) //产生梯形波的按键按下,P1.3=0 { keys can_num=4; //得到的键值为4,表示产生梯形波 } else if(key4==0) //产生锯齿波的按键按下,P1.3=0 { keys can_num=5; //得到的键值为5,表示产生锯齿波 } else { keys can_num=0; //没有按键按下,键值为0} return keys can_num; //得到的键值返回 }【缺少答案,请补充】