单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第8章模数数模转换习题答案_第1页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第8章模数数模转换习题答案_第2页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第8章模数数模转换习题答案_第3页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第8章模数数模转换习题答案_第4页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第8章模数数模转换习题答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

第8章模数数模转换习题答案一、填空题1.模拟量转换为数字量需要、、和四个步骤。答:采样、保持、量化和编码2.采样频率必须满足采样定理,即采样频率输入信号的最大频率2倍。答:大于等于3.转换时间是指A/D转换器完成一次转换所需要的时间。答:模拟量到数字量4.某型号8位A/D转换器的满量程输入电压为5V,则能区分的输入模拟电压的最小值为。答:19.53mV5.ADC0804是型A/D转换器,分辨率为。答:逐次比较,8位6.建立时间是描述速度快慢的一个参数,指从输入数字量变到输出达到终值误差±(1/2)LSB时所需的时间。答:D/A转换7.DAC0832是具有两级输入数据寄存器的数模转换器,分辨率为,输出。答:8位,电流二、Proteus虚拟仿真任务要求:设计基于ADC0804的数字电压表。在ProteusISIS中绘制出原理电路,并编写软件调试通过。基本要求:采集电压0~5V,通过LCD1602实时显示,保留2位小数。答:1.硬件电路设计2.软件设计【数字电压表参考程序】://(1)采集0-5V信息,进行模数转换,显示在LCD1602上。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口sbitADC_CS=P3^4;//ADC0804片选端sbitADC_RD=P3^5;//ADC0804读信号sbitADC_WR=P3^6;//ADC0804启动信号uchari=0,addat;uintVref=5;/****************毫秒延时子函数****************/voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=111;y>0;y--);}/****************启动一次AD转换****************/voidstart(){ADC_CS=0;ADC_WR=1;_nop_();//延时ADC_WR=0;//启动AD转换_nop_();ADC_WR=1; }/****************读取AD转换结果****************/unsignedcharreadADC(){P1=0xff;ADC_CS=0;ADC_RD=1;_nop_();ADC_RD=0;_nop_();addat=P1;//读取AD转换值ADC_RD=1;returnaddat;//返回AD转换值 }/**********************检查忙标志函数************************/voidcheck_busy(void){uchardt;do{ dt=0xff; lcden=0; lcdrs=0; lcdrw=1; lcden=1; dt=out;}while(dt&0x80);lcden=0;}/**************************1602显示****************************/voidwrite_cmd(charcmd)//写指令函数{check_busy();lcden=0;//再把EN拉低lcdrs=0;lcdrw=0;//先将RW拉低out=cmd;lcden=1;delay(1);lcden=0;delay(1);}voidwrite_data(uchardat)//写数据函数{check_busy();lcden=0;//再把EN拉低lcdrs=1;lcdrw=0;//先将RW拉低out=dat;lcden=1;delay(1);lcden=0; delay(1);}voidwrite_str(uchar*str)//写字符串函数{while(*str!='\0'){ write_data(*str++); delay(5);}}/***************************初始化******************************/voidlcd_init()//初始化1602{write_cmd(0x38);//显示模式设置write_cmd(0x0c);//显示开关,光标没有闪烁write_cmd(0x06);//显示光标移动设置write_cmd(0x01);//清除屏幕write_cmd(0x80);//把光标移到第一行第一个位置delay(1);}/***************************初始化******************************/voiddisplay(uchardat){ucharbai,shi,ge;bai=dat*Vref/256;//根据VIN=AD*5/256,输入电压的整数位shi=dat*10*Vref/256%10;//显示输入电压小数后1位ge=dat*100*Vref/256%10;//显示输入电压小数后2位write_cmd(0x80+0x09);//把光标移到第二行待显示区write_data(bai+0x30);write_data('.');write_data(shi+0x30);write_data(ge+0x30);write_data('V');}/****************主函数****************/voidmain(){lcd_init();write_cmd(0x80+0x01);//把光标移到第一行待显示区write_str("Voltage:");while(1){start();//启动A/D转换readADC();//读取A/D转换display(addat);//显示,也是延时} }3.仿真运行扩展要求:在基本要求中,采用平均值滤波,采集10次电压值的平均值作为一次采样值显示。答:1.硬件电路设计2.软件设计【数字电压表参考程序】://(1)采集0-5V信息,进行模数转换,10次平均值滤波,显示在LCD1602上。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2#defineN10//进行平均值滤波的数据个数,可根据实际调整sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口sbitADC_CS=P3^4;//ADC0804片选端sbitADC_RD=P3^5;//ADC0804读信号sbitADC_WR=P3^6;//ADC0804启动信号uchari=0,addat,average;uintVref=5;ucharcodetab1[10];/****************毫秒延时子函数****************/voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=111;y>0;y--);}/****************启动一次AD转换****************/voidstart(){ADC_CS=0;ADC_WR=1;_nop_();//延时ADC_WR=0;//启动AD转换_nop_();ADC_WR=1; }/****************读取AD转换结果****************/unsignedcharreadADC(){P1=0xff;//P1口与ADC的数据口相连,作为输入口,先写"1"ADC_CS=0;//("CS")?=0ADC_RD=1;//("RD")?=1_nop_();//延时,_nop_();一个机器周期延时ADC_RD=0;//("CS")?=0_nop_();//延时,_nop_();一个机器周期延时addat=P1;//读取AD转换值ADC_RD=1;//("RD")?=1returnaddat;//返回1个字节的A/D转换值}ucharfilter(){uintsum=0;//和变量ucharcount;for(count=0;count<N;count++){sum=sum+readADC();//累计N次采样值delay(1);//延时}average=sum/N;return(uchar)(average);//返回N次采样平均值}/**********************检查忙标志函数************************/voidcheck_busy(void){uchardt;do{ dt=0xff; lcden=0; lcdrs=0; lcdrw=1; lcden=1; dt=out;}while(dt&0x80);lcden=0;}/**************************1602显示****************************/voidwrite_cmd(charcmd)//写指令函数{check_busy();lcden=0;//再把EN拉低lcdrs=0;lcdrw=0;//先将RW拉低out=cmd;lcden=1;delay(1);lcden=0;delay(1);}voidwrite_data(uchardat)//写数据函数{check_busy();lcden=0;//再把EN拉低lcdrs=1;lcdrw=0;//先将RW拉低out=dat;lcden=1;delay(1);lcden=0; delay(1);}voidwrite_str(uchar*str)//写字符串函数{while(*str!='\0'){ write_data(*str++); delay(5);}}/***************************初始化******************************/voidlcd_init()//初始化1602{write_cmd(0x38);//显示模式设置write_cmd(0x0c);//显示开关,光标没有闪烁write_cmd(0x06);//显示光标移动设置write_cmd(0x01);//清除屏幕write_cmd(0x80);//把光标移到第一行第一个位置delay(1);}/***************************初始化******************************/voiddisplay(uchardat){ucharbai,shi,ge;bai=dat*Vref/256;//根据VIN=AD*5/256,输入电压的整数位shi=dat*10*Vref/256%10;//显示输入电压小数后1位ge=dat*100*Vref/256%10;//显示输入电压小数后2位write_cmd(0x80+0x09);//把光标移到第二行待显示区write_data(bai+0x30);write_data('.');write_data(shi+0x30);write_data(ge+0x30);write_data('V');}/****************主函数****************/voidmain(){lcd_init();write_cmd(0x80+0x01);//把光标移到第一行待显示区write_str("Voltage:");while(1){ start();//启动A/D转换filter();//读取A/D转换 display(average);//显示,也是延时} }3.仿真运行三、

Proteus

虚拟仿真设计任务:基于DAC0832的波形发生器设计。在ProteusISIS中绘制出原理电路,并编写软件调试通过。基本要求:通过3个按键控制产生三角波、锯齿波和方波,在虚拟示波器上显示。答:1.硬件电路设计2.软件设计【波形发生器参考程序】:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definedac0832_dataP1sbitdac_cs=P2^0;sbitdac_wr1=P2^1;voiddelayms(uintz);voidDAC0832_start(void);//启动DAC0832函数voidTriangle(void);//三角波函数voidSawtooth(void);//锯齿波函数voidSquare(void);//方波函数voidINT_init();//外部中断初始化voidkey();sbitP27=P2^7;//按键声明ucharflag;//按键标志位voidmain(){INT_init();DAC0832_start();while(1){key(); switch(flag){ case1:Triangle();break;//按下key1,产生三角波 case2:Sawtooth();break;//按下key2,产生锯齿板 default:break; }if(flag==3) { Square();//按下key3,产生方波 }}}voidkey(){if(P27==0){ delayms(2); if(P27==0) { flag=3; }}while(!P27);}/****************毫秒延时子函数****************/voiddelayms(uintz){uintx,y;for(x=z;x>0;x--) for(y=111;y>0;y--);}/****************DAC0832启动函数****************/voidDAC0832_start(void){dac_cs=0;dac_wr1=0;}/****************方波函数****************/voidSquare(void){dac0832_data=0;delayms(2);dac0832_data=0xff;delayms(2);}/****************三角波函数****************/voidTriangle(void){uchari;for(i=0;i<254;i++){ dac0832_data=i; delayms(1);}for(i=255;i>1;i--){ dac0832_data=i; delayms(1);}}/****************锯齿波函数****************/voidSawtooth(void){ uchari;for(i=0;i<255;i++){ dac0832_data=i;}}/****************外部中断初始化****************/voidINT_init(){IT0=1;//INT0下跳触发EX0=1;//打开INT0允许开关IT1=1;//INT1下跳触发EX1=1;//打开INT1允许开关EA=1;//打开总开关} /****************外部中断0中断函数****************/voidINT0_Triangle()interrupt0{flag=1;IE0=0;}/****************外部中断1中断函数****************/voidINT1_Sawtooth()interrupt2{flag=2;IE1=0;}3.仿真运行三角波:锯齿波:方波:扩展要求:在基本要求的基础上,要求产生周期为50ms的三角波、锯齿波和方波。答:1.硬件电路设计2.软件设计【周期波形发生器参考程序】:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definedac0832_dataP1sbitdac_cs=P2^0;sbitdac_wr1=P2^1;voiddelayms(uintz);voidDAC0832_start(void);//启动DAC0832函数voidTriangle(void);//三角波函数voidSawtooth(void);//锯齿波函数voidSquare(void);//方波函数voidINT_init();//外部中断初始化voidkey();sbitP27=P2^7;//按键声明ucharflag;//按键标志位voidmain(){INT_init();DAC0832_start();while(1){ key(); switch(flag) { case1:Triangle();break;//按下key1,产生三角波 case2:Sawtooth();break;//按下key2,产生锯齿波 case3:Square();break;//按下key3,产生方波default:break; }}}voidkey(){if(P27==0){ delayms(1); if(P27==0) { flag=3; }}while(!P27);}/****************毫秒延时子函数****************/voiddelayms(uintz){uintx,y;for(x=z;x>0;x--) for(y=111;y>0;y--);}/****************DAC0832启动函数****************/voidDAC0832_start(void){dac_cs=0;dac_wr1=0;}/****************方波函数****************/voidSquare(void){uchari;for(i=0;i<24;i++){dac0832_data=0x00; delayms(1);}for(i=25;i>1;i--){ dac0832_data=0xff; delayms(1);}}/****************三角波函数****************/voidTrian

温馨提示

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

评论

0/150

提交评论