单片机课程设计波形发生器的设计_第1页
单片机课程设计波形发生器的设计_第2页
单片机课程设计波形发生器的设计_第3页
单片机课程设计波形发生器的设计_第4页
单片机课程设计波形发生器的设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告课程 单片机原理及应用课程设计题目 波形发生器的设计院系 电院专业 自动化班级 姓名 学号 设计目的及意义功能要求及实验原理方案论证总体设计方案源代码运行结果实验总结参考文献生器的要求所完成.占用空间小,使用芯片少,低功耗。第四章总体设计方案原理图二。CPUAT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。\o"查看图片"PDIP封装的AT89C52引脚图准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。三.显示模块四.产生波形模块Dac0832DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成五。控制模块源代码#include<reg52.h>#include<absacc.h> //使用其中定义的宏来访问绝对地址#defineDAC0832XBYTE[0x0fff] //DAC0832端口intpinlv=256; //改变频率的时延自变量sbitp20=P2^0; //方波sbitp21=P2^1; //锯齿波sbitp22=P2^2; //三角波sbitp23=P2^3; //正弦波sbitp24=P2^4; //梯形波sbitRS=P3^0; //数据/命令选择sbitRW=P3^1; //读写选择sbitE=P3^4; //使能信号intj=0; //全局变量unsignedcharcodeTAB[]="0123456789msTIME:";unsignedcharcodeTAB1[]="Zhengxianbo FangboSanjiaoboJuchiboTixingbo";unsignedchartable[4];floatcodetable2[]={ //正弦波信号采点值0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7,0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF,0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6,0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C,0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,0x35,0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,0x1B,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35,0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,0x59,0x5B,0x5D,0x60,0x62,0x65,0x67,0x69,0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D};voiddelay(unsignedcharms); //延时函数voidwrite_com(unsignedcharcom);//液晶写指令voidwrite_data(unsignedchardat);//液晶写数据voidLCD1602_init(void)//液晶初始化{ delay(15); //延时15ms write_com(0x38); //功能设置 delay(5); //延时5ms write_com(0x38); //功能设置 delay(5); //延时5ms write_com(0x08); //显示设置 write_com(0x01); //显示清屏 write_com(0x06); //显示光标移动设置 write_com(0x0c); //显示开即光标设置}voidwrite_com(unsignedcharcom){ E=0; //复位初始为高电平 RS=0; RW=0; P1=com; delay(1); E=1; delay(1); E=0;}voidwrite_data(unsignedchardat){ E=0; //复位初始为高电平 RS=1; RW=0; P1=dat; delay(1); E=1; delay(1); E=0;} voiddelay(unsignedcharms) //晶振12MHz延时0.01ms{ unsignedchari; while(ms--) { for(i=0;i<120;i++); }}voidfang() //方波{ DAC0832=0; delay(pinlv/2); DAC0832=0xff; delay(pinlv/2);} voidjvchi() //锯齿波{ unsignedchari; for(i=0;i<255;i++) { DAC0832=i; delay(pinlv/256); }}voidtran() //三角波{ unsignedchari; for(i=0;i<255;i++) { DAC0832=i; delay(pinlv/512); } for(i=255;i>0;i--) { DAC0832=i; delay(pinlv/512); }}voidsin() //正弦波{ unsignedinti; for(i=0;i<256;i++) { DAC0832=table2[i]; delay(pinlv/256); }}voidtx(void) //梯形波{unsignedchari; for(i=0;i<255;i++) { DAC0832=i; delay(pinlv/1024); } DAC0832=0xff; delay(pinlv/2); for(i=255;i>0;i--) { DAC0832=i; delay(pinlv/1024); }}voidmain(void) //主函数{ IE=0x85; //中断允许控制,外部中断设定改变频率 TCON=0x05; //中断请求标志 下降沿有效 LCD1602_init(); //初始化 table[0]=pinlv/1000;//计算周期作为输出千位 table[1]=pinlv%1000/100;//百位 table[2]=pinlv%100/10; //十位 table[3]=pinlv%10; //个位 write_com(0x80+0x40); //设置待写入数据的地址,写1602的第2行。写出做产生波形的周期 for(j=12;j<17;j++) //显示'TIME:' { write_data(TAB[j]); delay(1); } for(j=0;j<4;j++) //显示周期 { write_data(TAB[table[j]]); delay(1); } write_data(TAB[10]); //在周期后面加上"MS" write_data(TAB[11]); while(1) { if(p20==0) //方波 { write_com(0x80); //写1602的第1行,写明产生的波形 for(j=11;j<22;j++) { write_data(TAB1[j]); } while(p20==0) fang(); } if(p21==0){ //锯齿波 write_com(0x80); //写1602的第1行,写明产生的波形 for(j=33;j<44;j++) { write_data(TAB1[j]); } while(p21==0) jvchi(); } if(p22==0){ //三角波 write_com(0x80); //写1602的第1行,写明产生的波形 for(j=22;j<33;j++) { write_data(TAB1[j]); } while(p22==0) tran(); } if(p23==0){ //正弦波 write_com(0x80); //写1602的第1行,写明产生的波形 for(j=0;j<11;j++) { write_data(TAB1[j]); } while(p23==0) sin(); }if(p24==0){ //梯形波write_com(0x80); //写1602的第1行,写明产生的波形for(j=44;j<55;j++) { write_data(TAB1[j]); } while(p24==0) tx(); } }}voidint0(void)interrupt0 //中断0加频{ pinlv=pinlv+10; //频率加十 table[0]=pinlv/1000; table[1]=pinlv%1000/100; table[2]=pinlv%100/10; table[3]=pinlv%10; write_com(0x80+0x40) ;//设置代写入数据的地址,写1602第2行。 for(j=12;j<17;j++) { write_data(TAB[j]); delay(1); } for(j=0;j<4;j++) { write_data(TAB[table[j]]); delay(1); } write_data(TAB[10]); write_data(TAB[11]);}voidint1(void)interrupt2//中断2减频{ pinlv=pinlv-10;//频率减十 table[0]=pinlv/1000; table[1]=pinlv%1000/100; table[2]=pinlv%100/10; table[3]=pinlv%10; write_com(0x80+0x40)

温馨提示

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

评论

0/150

提交评论