• 825.06 KB
  • 2022-05-11 18:36:20 发布

电子线路设计专题实验报告西安交通大学

  • 26页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
西安交通大学电子信息与工程学院自动化科学与技术系电子线路设计专题实验报告实验名称:电子线路设计专题实验实验者姓名:玄实验者学号:21105040XX所在班级:口动化IX报告完成日期:2014年5月11日 一、实验目的;(1)熟悉单片机原理;(2)掌握开发板上常见芯片的功能与用法;(3)掌握单片机的开发软件:KELL(4)应用单片机,做一些简单的小应用(电了时钟等)二、实验内容:(1)创建一个工程将键盘阵列定义为0.1.2--E.F,编程实现键盘设置当前吋间,再调用系统时钟,显示在LED显示屏上(注意仔细阅读PCF8563资料),键盘设置当前日期显示在LCD显示屏上。(2)利用D/A转换通道(下行通道)实现锯齿波发生器;输出(1〜5V)固定电压转换成(4〜20mA)电流。(3)利用A/D转换通道(上行通道)实现数据采集,将采集信号显示在LED屏上。程序要求分别具有平均值滤波、屮值滤波和滑动滤波功能。三、开发板简介:红外发射]尸、*1JP1JP2JP3电压输入信号输入红外接收)AC输出端话筒RP3JP4复位键JP54X4键盘外部电源■.耳机插头JP6RP2图1PH-I型51MCU学习系统实物照片简介:ZHP-I型51MCU学习系统采用SST89E564RD作为系统的核心:外设包括用并行总线驱动的8位8段数码管、4X4键盘、字符型LCD(LC1621).外扩32KRAM(62256);SPI总线驱动的 10位ADC(TLC1549)>10位DAC(TLC56⑸;广C总线驱动的外扩E2PROM(AT24C02).日历时钟芯片(PCF8563);单总线(1-WIRE)驱动的数字式温度传感器DS18B20;MAX232的串口通讯;甚于TDA2822M放人MIC的音频功放;红外线发射和接收装置:555信号发生和整形电路:JTAG下载接口(用于S51):蜂鸣器。所右的这些器件阜本包括了5LMCU的所有接口。四、功能实现与关键代码:(1)电了时钟:在这一部分,有几个很重要的的程序模块:包含1602初始化、写控制字、写字符等几个函数的16O2.h;包含根据”C总线协议编写的字节及多字节传输和接收函数的viic.h;实现键盘读取操作的key.h;实现不断读取吋间芯片的值并显示在1602和led上显示日期吋间的read函数等•以下是这几个重要的模块以及主函数程序。®1602.h(包含1602初始化、写控制字、写字符等函数)〃********检测是否忙、写控制字、写数据等********〃voidWriteW(uinta){ptr=0xAFF0;*ptr=a;}voidCheckBF(void){uinti;while(l){ptr=0xAFFl;i=*ptr;i&=0x80;if(i==0)break;}}voidLCD_Init(void)CheckBF();WriteW(Ox38);CheckBF();WriteW(OxOl);CheckBF();WriteW(0x06);CheckBF();WriteW(OxOF);CheckBF(); WriteW(0x80);}voidLCD」nit2(void){CheckBF();WriteW(OxOF);CheckBF();WriteW(OxCO);voidWritD(unsignedcharkey_asc2){CheckBF();ptr=0xAF02;*ptr=key_asc2;②viic.h(包含根据"C总线协议编写的字节及多字节传输和接收函数)/*******************************************************************字节数据传送函数函数原型:voidSendByte(ucharc);功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作・(不应答或非应答都使ack=O假)发送数据止常,ack=l;ack=O表示被控器无应答或损坏。■土■土■土■土■土■土■土■土■土■土■土■土■土■土■土■土■士/1voidSendByte(ucharc){ucharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt卄)/*要传送的数据长度为8位*/ elseSDA=O;_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;字节数据传送函数函数原型:ucharRcvByte();功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数。/*置时钟线为高,通知被控器开始接收数据位引/*保证时钟高电平周期大于4us*/_Nop();_Nop();SDA=1;/*8位发送完后释放数据线,准备接收应答位*/_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==l)ack=O;elseack=l;/*判断是否接收到应答信号*/SCL=0;_Nop();_Nop();ucharRcvByte(){uchaiTetc;ucharBitCnt;retc=O;SDA=1;/*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++)_Nop(); SCL=0;/*置时钟线为低,准备接收数据位*/_Nop();_Nop();/*时钟低电平周期大于4.7us*/_Nop();_Nop();_Nop();SCL=1;/*置时钟线为高使数据线上数据有效*/_Nop();_Nop();retc=retc«l;if(SDA==1)retc=retc+1;/*读数据位,接收的数据位放入retc中*/_Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);应答子函数原型:voidAck_I2c(bita);功能:主控器进行应答信号,(可以是应答或非应答信号)voidAck_I2c(bita)if(a==0)SDA=0;elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();SCL=0;_Nop();_Nop();/*在此发出应答或非应答信号*//*时钟低电平周期大于4Ps*//*清时钟线,钳住I2C总线以便继续接收*/ 向有了地址器件发送多字节数据函数函数原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);功能:从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。如果返回1表示操作成功,否则操作有误。注意:使用前必须已结束总线。〃*bitISendStr(ucharsla,ucharsuba,uchar*s,ucharno)Start_I2c();SendByte(sla);if(ack==0)return(0);SendByte(suba);if(ack==O)return(O);〃启动总线〃发送器件地址〃发送器件了地址SendByte(*s);if(ack==O)return(O);s++;〃发送数据Stop_I2c();return(l);〃结束总线向有子地址器件读取多字节数据函数函数原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);功能:从启动总线到发送地址,了地址,读数据,结束总线的全过程,从器件地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。如果返冋1表示操作成功,否则操作有误。注意:使用前必须已结束总线。bitIRcvStr(ucharsla,ucharsuba,uchar*s,ucharno)uchari; Start_I2c();SendByte(sla);if(ack==O)return(O);SendByte(suba);if(ack==O)return(O);Start_I2c();SendByte(sla+l);if(ack==O)return(O);/*启动总线*//*发送器件地址*//*发送器件子地址*/for(i=0;i15){key=Oxff;returnkey;}bKeyUp_Flag=O;returnkey;④实现不断读取吋间芯片的值并显示在1602和led上显示日期时间的read函数voidread(){_unsignedcharrd[7];//作为读8563数据的缓存区unsignedchari; E&opnK二3qslp--9=0一PJHK二上qsl-2OI&EPJ丄二」二PFO二3qslpl-9-&CT一P-M6一3q£pl©一二小一王“石万三乞—卫-9I&EPJHE3qslpl」9uEp」A9」3qzlpl-9I&5PF53q2lplevEp-M寸Mqmlpl」9I&EPFE2q5lpl灌蛋巒、-9M9」PF22qE「pl孑二二9」PFSPJhvahxonspfep」__二寸一PJA寸」p」mMJZXO胡epfspj•fm^xodspfepj张注JLXO电Ep」"二pj蠡注芒XO0O一PFOPJpXQP」7oxo7=4)ave_pointer=0;vol_ave[ave_pointer]=tic1549();vol=(vol_ave[01+vol_ave[l]+vol_ave[2]+vol_ave[3])/4;ave_pointer=ave_pointer+1; //LCD_Initl(xianshil);break;case0x02:if(slide_pointer>=10)slide_pointer=0;vol_slide[slide_pointer]=tic1549();vol=(vol_slide[0]+vol_slide[1]+vol_slide[2]+vol_slide[3]+vol_slide[4]+vol_slide[5]+vol_slide⑹4-vol_slide[7]+vol_slide[8]+vol_slide[9])/10;slide_pointer=slide_pointer+1;//LCD_Init1(xianshi3);break;case0x03:if(med_pointer>=10)med_pointer=0;a[med_pointer]=tic1549();for(j=0;j<=9;j++){for(i=0;i<10-j;i++)if(a[i]>a[i+l]){temp=afil;a[i]=a[i+l];a[i+l]=temp;}}vol=a[4];med_pointer=med_pointer+1;//LCD_Initl(xianshi2);break;case4:while(l);break;case5:while(l);break;default:break; //if(ave_pointer>=4)ave_pointer=0;//vol_ave[ave_pointer]=tic1549();//vol=(vol_ave[0]+vol_ave[1]+vol_ave[2]+vol_ave[3])/4;//ave_pointer=ave_pointer+1;//kI*kI*kI*kI*■士■士■士■士■士■士■士■士I■17"7"7"7"////不不不不不不不不不不不不布布布布不不不不不不不不////if(slide_pointer>=10)slide_pointer=0;//vol_slide[slide_pointer]=tic1549();//vol(vol_slide[0]+vol_slide[l]+vol_slide[2]+vol_slide[3]+vol_slide[4]+vol_slide[5]+vol_slide⑹+vol__slide[7]+vol_slide[8]+voLslide[9])/10;slide_pointer=slide_pointer+1;//change_code(vol,disp);disp_voltage(disp);五、实验结果分析说明(1)电子时钟:①执行程序后,显示提示语;根据提示进行设定 ②输入吋间;当确认吋间格式正确后,系统进入工作④系统处在工作状态 ⑤按任意键,可以选择更改系统的时间(2)利用D/A转换通道(下行通道)实现锯齿波发生器(在实验时忘了拍摄波形图,但是试验时各功能均止常)(3)利用A/D转换通道(上行通道)实现数据采集①根据提示,选择滤波方式 ②工作状态③按任意键即可匣新选择滤波方式六、实验休会电了设计专题实验,主要是通过课外自学,一步一步的了解单片机的各种操作述冇芯片及命令字的使用,通过这三次实验,基本理解了单片机的工作原理,掌握了实验板上的儿个芯片的功能和使用方法,能够实现一些简单的应用,在编写代码过程屮也遇到过很多苦恼,不过通过不断地调Bug,查资料,问同学和老师,当程序按照自己的意愿跑起來时,那种兴奋是难以言喻的,总之这次的单片机实验老师采取的组织形式非常好,通过给学生提供实验板和一些资料,鼓励学生口主学习,充分发挥了我们的自主性和创造性,这个过程极大地培养了我们动手能力,在此感谢老师提供的开发板和宝贵的资料,使我对单片机有了入门了解,并且也激发了我继续学习的热情和动力;