基于DAC0832和80c51的波形发生器Word文档下载推荐.docx
- 文档编号:21119174
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:16
- 大小:18.79KB
基于DAC0832和80c51的波形发生器Word文档下载推荐.docx
《基于DAC0832和80c51的波形发生器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于DAC0832和80c51的波形发生器Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
程序通过片选CS各接P2.7和P2.6来产生不同地址0x7fff和0xbfff;
特别注意:
当进行一项数模转换后,如果没进行其他数模转换则其输出模拟量将保持不
变,此功能说明用于使用DAC0832B输出模拟电压来控制DAC0832A基准电压;
*/
#include"
reg52.h"
intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineDAC08321XBYTE[0x7fff]
#defineDAC08322XBYTE[0xbfff]
sbitrs=P3^0;
sbitrw=P3^1;
sbiten=P3^5;
ucharv,i,flag,n;
bitchu;
//退出标志位
ucharcodesin[]={
0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA1,0xA4,0xA7,0xAA,0xAD
0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD,0xD0,0xD2,0xD5,0xD7
0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4
0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6
0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB,0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB
0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0xC8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3
0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82
0x7F,0x7C,0x79,0x76,0x73,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51
0x4E,0x4B,0x48,0x46,0x43,0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27
0x25,0x23,0x21,0x1E,0x1C,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08
0x09,0x0A,0x0C,0x0D,0x0F,0x10,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23
0x25,0x27,0x29,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B
0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C};
//延时1ms
voiddelay(uintcount)//带参函数
{
uintj;
while(count--!
=0)
for(j=0;
j<
80;
j++);
}
//液晶写数据函数
voidwritedata(uchardate)
delay
(1);
rw=0;
rs=1;
en=1;
P0=date;
en=0;
//液晶写指令函数
voidwritecommand(ucharcommand)
rs=0;
P0=command;
//液晶基本初始化设置
voidlcdset()
writecommand(0x01);
//清屏,DDRAM的地址归零
writecommand(0x0c);
//显示开,光标开,反白关
writecommand(0x06);
//DDRAM地址加1
writecommand(0x30);
//基本指令集
}
//字符显示
voiddisplay(uchary,ucharx,uchar*P)
switch(y)
case1:
writecommand(0x7f+x);
break;
case2:
writecommand(0x8f+x);
case3:
writecommand(0x87+x);
case4:
writecommand(0x97+x);
while(*P)
writedata(*P++);
//键扫子程序
ucharkey()
{
ucharscan,tmp;
//列,行
P1=0xf0;
//发全列0扫描码
if((P1&
0xf0)!
=0xf0)//若有键按下
{delay(5);
//延时去抖
=0xf0)//延时再判键是否还按下
{scan=0xfe;
while((scan&
0x10)!
=0)//逐列扫描
P1=scan;
//输出列扫描码
=0xf0)//本列有键按下
{tmp=(P1&
0xf0)|0x0f;
return((~scan)|(~tmp));
}//还回键值
elsescan=(scan<
<
1)|0x01;
//列扫描码左移一位
}
return(0);
//无键按下,还回0
}
voiddelay1(uintm)
while(m--);
//**********************监控函数×
×
voidmain()
lcdset();
DAC08322=0xf0;
//实际与理论是有差距的,起始默认幅值为5v
while
(1)
display(1,2,"
波形发生器"
);
display(2,1,"
1.正弦波2.三角波"
display(3,1,"
3.方波4.锯齿波"
display(4,1,"
5.梯形波"
v=key();
switch(v)
//×
正弦波×
case0x21:
do{v=key();
}//等待确定
while(v!
=0x18);
while
(1)
{
writecommand(0x01);
display(1,3,"
正弦波"
//显示波形名称
display(2,1,"
请输入幅值:
"
for(i=0;
i<
256;
i++)//大循环正弦波
{
qqq:
DAC08321=sin[i];
//×
键扫判为键1峰-峰值为1v,键2为2v,键3为3v,键4为4v,键5为5v×
//×
且设立其标志位×
v=key();
switch(v)
case0x21:
display(2,7,"
1v"
DAC08322=0x1a;
flag=1;
case0x41:
2v"
DAC08322=0x54;
flag=2;
case0x81:
3v"
DAC08322=0x80;
flag=3;
case0x12:
4v"
DAC08322=0xb6;
flag=4;
case0x22:
5v"
DAC08322=0xf0;
flag=5;
//×
幅值步进加键×
case0x28:
while
(1)
{
for(i=0;
i++)
{
DAC08321=sin[i];
//重新送波形显示
v=key();
switch(v)
{//键扫,等待步进键或退出键按下
case0x28:
delay(200);
switch(flag)
{
case1:
++n;
if(n==31)n=0;
DAC08322=0x1a+(n*2);
case2:
if(n==22)n=0;
DAC08322=0x54+(n*2);
//幅值加
case3:
if(n==28)n=0;
DAC08322=0x80+(n*2);
case4:
if(n==29)n=0;
DAC08322=0xb6+(n*2);
}
break;
case0x48:
--n;
if(n==0)n=31;
if(n==0)n=22;
//幅值减
if(n==0)n=28;
if(n==0)n=29;
case0x88:
delay(200);
n=0;
gotoqqq;
//退出键
//chu=1;
}
//if(chu==1)break;
//if(chu==1){chu=0;
}
}
break;
幅值步进减键×
case0x48:
n=0x33;
{
case0x48:
switch(flag)
if(n==0)n=13;
DAC08322=n*2;
case0x28:
if(n==13)n=0;
}
退出界面键×
case0x88:
chu=1;
}
if(chu==1)break;
}
if(chu==1){chu=0;
break;
三角波×
case0x41:
do{v=key();
n=0x33;
三角波"
qqq1:
0xff;
DAC08321=i;
for(i=0xff;
i>
0;
i--)
switch(v)
case0x21:
for(i=0;
DAC08321=i;
//重新送波形显示
for(i=0xff;
v=key();
gotoqqq1;
//退出上一层面键
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DAC0832 80 c51 波形 发生器