)3APVLG~U35FJLBYHP2GS{T.png (113.54 KB, 下載次數: 67)
下載附件
2016-11-25 16:25 上傳
0.png (62.22 KB, 下載次數: 58)
下載附件
2016-12-5 01:17 上傳
所有設計資料下載:
DAC0832數模轉換.zip
(84.94 KB, 下載次數: 111)
2016-11-25 16:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
本設計主要用到DAC0832等芯片,輸出四種波形,另外帶有數碼管計數波形個數。
另外主程序
#include <reg52.h>
#include <stdio.h>
#include <math.h>
#include <ABSACC.H>
#define DAC0832Addr0 0x7FFF //DAC0832地址
//0111 1111
#define DAC0832Addr1 0xBFFF //DAC0832地址
//1011 1111
#define DAC0832Addr2 0xDFFF //DAC0832地址
//1101 1111
#define DAC0832Addr3 0xEFFF //DAC0832地址
//1110 1111
#define DAC0832Addr 0xF7FF //DAC0832地址
//1111 0111
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管顯示0~9
#define uchar unsigned char //uchar代表無符號字符
#define uint unsigned int
//sbit P10=P1^0;
sbit P21=P2^1;
sbit P22=P2^2; //unit代表無符號整型數據類型
void TransformData(int i,uchar c0832data); //數/模轉換函數
void Delay();
//void play(); //延時函數
main()
{
int i;
uchar cDigital=0;
uint x=0,ge,shi;
// Uart_Init();
P0=0xFF; //I/O口初始化0xFF
P1=0xFF;
P2=0xFF;
P3=0xFF;
Delay();
while(1)
{
for(i=0;i<5;i++) //產生鋸齒波
{
for(cDigital=0;cDigital<255;cDigital++) //產生三角波上升沿
{
Delay();
TransformData(0,cDigital);
TransformData(1,cDigital);
if(cDigital>128)
{
TransformData(1,255-cDigital);
}
if(cDigital<128)
{
TransformData(2,122);
}
else
{
TransformData(2,0);
}
if(cDigital<128)
{
TransformData(3,125*sin((float)cDigital/255*3.14*2)-127);
}
else
{
TransformData(3,128*sin((float)cDigital/255*3.14*2)+127);
}
//
TransformData(4,cDigital);
if(cDigital==254)
{
x++;
}
if(x==254)
{
x=0;
}
ge=x%10;
shi=x/10;
P1=table[ge];
P22=1;
Delay();
P22=1;
P1=table[shi];
P21=1;
Delay();
P21=0;
} }
}
void TransformData(int i,uchar c0832data) //數/模轉換函數
{
//*((uchar xdata*)DAC0832Addr0)=c0832data;
switch(i)
{
case 0: *((uchar xdata*)DAC0832Addr0)=c0832data; break;
case 1: *((uchar xdata*)DAC0832Addr1)=c0832data; break;
case 2: *((uchar xdata*)DAC0832Addr2)=c0832data; break;
case 3: *((uchar xdata*)DAC0832Addr3)=c0832data; break;
case 4: *((uchar xdata*)DAC0832Addr)=c0832data; break;
}
}
void Delay() //延時1ms
{
uint i;
for (i=0;i<250;i++) ;
}
|