|

#include <reg51.h> // 51单片机头文件
#define uint unsigned int // 定义无符号整数类型uint
#define uchar unsigned char // 定义无符号字符类型uchar
#include <intrins.h>
//ADC0808端口定义
sbit ADC_OE=P2^5; // ADC0808的输出使能OE口
sbit ADC_EOC=P2^4; // ADC0808的转换完成结束标志EOC口
sbit ADC_START=P2^6;
sbit ADC_ale=P2^7;
//DAC0832接口定义
sbit DAC_CS = P3^7;
sbit DAC_WR1 = P3^6;
//按键定义
sbit k0 = P2^0;
sbit k1 = P2^1;
sbit k2 = P2^2;
sbit k3 = P2^3;
unsigned int AD;//变量声明
uchar xdata adc_value[256]; // 存储adc转换后数据的数组
uchar i,j;
void delay(unsigned int m)
{
while(m--);
}
void adc()//AD采集函数
{
ADC_START = 0;
ADC_START = 1;
ADC_ale=1;
while(ADC_EOC==0)
{
ADC_OE = 1;
}
AD=P0;//数据存储在AD中
ADC_OE=0;
}
void DAC_output() //DAC转换输出
{
DAC_CS = 0;//和为0,实现了单缓冲连接方式
DAC_WR1 = 0;
while(1)
{
for(i=0;i<=255;i++)//存储波形输出
{
P1=adc_value; //DA转换输出
delay(10);
}
}
}
void main(void)
{
// unit j,i;
uchar key_count = 0; // 初始输出1倍波形
for(j=0;j<255;j++) //AD采样存储
{
adc();
adc_value[j]=AD;
delay(10);
}
while(1)
{
if(k0 == 0) // 按键0按下开始输出波形
{
DAC_output();
delay(10); // 延时1ms
}
if(k1 == 0) // 按键1按下
{
key_count = 0; // 输出1倍延伸波形
while(k1 == 0); // 等待按键1松开
}
if(k2 == 0) // 按键2按下
{
key_count = 1; // 输出2倍延伸波形
while(k2 == 0); // 等待按键2松开
}
if(k3 == 0) // 按键3按下
{
key_count = 2; // 输出4倍延伸波形
while(k3 == 0); // 等待按键3松开
}
for(i=0;i<256;i++) // 按照倍数输出模拟量信号
{
for(j=0;j<key_count+1;j++) // 输出1倍、2倍、4倍的波形,1/2/4次
{
DAC_output(); // 将对应采集到的模拟信号输出
delay(10); // 延时1ms
}
}
}
}
|
|