#include<absacc.h>
#include<reg51.h>
#define DAC0832 XBYTE[0x7fff]
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
int flag1=0;
int flag2=0;
int flag3=0;
int flag4=0;
int flag5=0;
unsigned char code zhengxian[256]={0x00}
void delay() //延时程序
{
int i;
for(i=0;i<1000;i++);
}
void panduan(void) //函数panduan用于扫描按键状态,判断输出波形
{
if(k1==1){ //按键消抖
delay();
if(k1==1) //通过赋值flag选择波形
flag1=1;
flag2=0;
flag3=0;
flag4=0;
flag5=0;
}
if(k2==1){
delay();
if(k2==1)
flag1=0;
flag2=1;
flag3=0;
flag4=0;
flag5=0;
}
if(k3==1){
delay();
if(k3==1)
flag1=0;
flag2=0;
flag3=1;
flag4=0;
flag5=0;
}
if(k4==1){
delay();
if(k4==1)
flag1=0;
flag2=0;
flag3=0;
flag4=1;
flag5=0;
}
if(k5==1){
delay();
if(k5==1)
flag1=0;
flag2=0;
flag3=0;
flag4=0;
flag5=1;
}
}
void boxing(void) //函数boxing用于产生选择好的波形
{
if(flag1==1) //产生方波
{
DAC0832=0x00;
delay();
DAC0832=0xff;
delay();
}
else if(flag2==1) //产生正弦波
{
int i;
for(i=0;i<256;i++){
DAC0832=zhengxian[i];
}
}
else if(flag3==1) //三角波
{
int i;
for(i=0;i<255;i++)
DAC0832=i;
for(i=255;i>0;i--)
DAC0832=i;
}
else if(flag4==1) //梯形波
{
int i;
for(i=0;i<255;i++)
DAC0832=0;
for(i=0;i<255;i++)
DAC0832=i;
for(i=255;i>0;i--)
DAC0832=0XFF;
for(i=255;i>0;i--)
DAC0832=i;
}
else if(flag5==1) //锯齿波
{
int i;
for(i=0;i<255;i++)
DAC0832=i;
}
}
void main(){ //主函数
P1=0x00;
while(1)
{
panduan();
boxing();
}
}
这是一个D/A转换的波形发生的程序,一共生成四种波形,方波,正弦波,梯形波,锯齿波等,程序有部分错误,求大神相助。
#include<reg51.h>
#define DAC0832 XBYTE[0x7fff]
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
int flag1=0;
int flag2=0;
int flag3=0;
int flag4=0;
int flag5=0;
unsigned char code zhengxian[256]={0x00}
void delay() //延时程序
{
int i;
for(i=0;i<1000;i++);
}
void panduan(void) //函数panduan用于扫描按键状态,判断输出波形
{
if(k1==1){ //按键消抖
delay();
if(k1==1) //通过赋值flag选择波形
flag1=1;
flag2=0;
flag3=0;
flag4=0;
flag5=0;
}
if(k2==1){
delay();
if(k2==1)
flag1=0;
flag2=1;
flag3=0;
flag4=0;
flag5=0;
}
if(k3==1){
delay();
if(k3==1)
flag1=0;
flag2=0;
flag3=1;
flag4=0;
flag5=0;
}
if(k4==1){
delay();
if(k4==1)
flag1=0;
flag2=0;
flag3=0;
flag4=1;
flag5=0;
}
if(k5==1){
delay();
if(k5==1)
flag1=0;
flag2=0;
flag3=0;
flag4=0;
flag5=1;
}
}
void boxing(void) //函数boxing用于产生选择好的波形
{
if(flag1==1) //产生方波
{
DAC0832=0x00;
delay();
DAC0832=0xff;
delay();
}
else if(flag2==1) //产生正弦波
{
int i;
for(i=0;i<256;i++){
DAC0832=zhengxian[i];
}
}
else if(flag3==1) //三角波
{
int i;
for(i=0;i<255;i++)
DAC0832=i;
for(i=255;i>0;i--)
DAC0832=i;
}
else if(flag4==1) //梯形波
{
int i;
for(i=0;i<255;i++)
DAC0832=0;
for(i=0;i<255;i++)
DAC0832=i;
for(i=255;i>0;i--)
DAC0832=0XFF;
for(i=255;i>0;i--)
DAC0832=i;
}
else if(flag5==1) //锯齿波
{
int i;
for(i=0;i<255;i++)
DAC0832=i;
}
}
void main(){ //主函数
P1=0x00;
while(1)
{
panduan();
boxing();
}
}
这是一个D/A转换的波形发生的程序,一共生成四种波形,方波,正弦波,梯形波,锯齿波等,程序有部分错误,求大神相助。