⑴ 五一單片機與數模轉換晶元dac 0832的硬體連接如圖編寫輸出鋸齒波的程序
可以這樣,DAC0832是根據輸入的數字量,輸出相應的模擬量,鋸齒波是有規律的模擬量。
單片機內部程序可以通過演算法(規律計算或數組),定時生成一個數字量發送到DAC0832,使其輸出相應模擬量,即可。
例如鋸齒波是從0~3V,將0~3V分為若干個點(解析度),定時輸出每個點的數字量。
⑵ 用51單片機控制ISD1820語音晶元的原理圖及c程序或匯編程序
#include<reg52.h>
code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //顯示段碼
void Delay(unsigned int tc) //顯示延時程序
{while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
sbit TMDAT =P3^1; //DS18B20的數據輸入/輸出腳DQ,根據情況設定
unsigned int sdata;//測量到的溫度的整數部分
unsigned char xiaoshu1;//小數第一位
unsigned char xiaoshu2;//小數第二位
unsigned char xiaoshu;//兩位小數
bitfg=1; //溫度正負標志
void dmsec (unsigned int count) //延時部分
{
unsigned char i;
while(count--)
{for(i=0;i<115;i++);}
}
void tmreset (void) //發送復位
{
unsigned char i;
TMDAT=0; for(i=0;i<103;i++);
TMDAT = 1; for(i=0;i<4;i++);
}
bit tmrbit (void) //讀一位//
{
unsigned int i;
bit dat;
TMDAT = 0;
i++;
TMDAT = 1;
i++; i++;//微量延時 //
dat = TMDAT;
for(i=0;i<8;i++);
return (dat);
}
unsigned char tmrbyte (void) //讀一個位元組
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{ j = tmrbit();dat = (j << 7) | (dat >> 1); }
return (dat);
}
void tmwbyte (unsigned char dat) //寫一個位元組
{
unsigned char j,i;
bit testb;
for (j=1;j<=8;j++)
{ testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{ TMDAT = 0; //寫0
i++; i++;
TMDAT = 1;
for(i=0;i<8;i++); }
else
{TMDAT = 0; //寫0
for(i=0;i<8;i++);
TMDAT = 1;
i++; i++;}
}
}
void tmstart (void) //發送ds1820 開始轉換
{tmreset();//復位
dmsec(1);//延時
tmwbyte(0xcc);//跳過序列號命令
tmwbyte(0x44);//發轉換命令 44H,
}
void tmrtemp (void) //讀取溫度
{
unsigned char a,b;
tmreset ();//復位
dmsec (1);//延時
tmwbyte (0xcc);//跳過序列號命令
tmwbyte (0xbe);//發送讀取命令
a = tmrbyte ();//讀取低位溫度
b = tmrbyte (); //讀取高位溫度
if(b>0x7f) //最高位為1時溫度是負
{a=~a; b=~b+1; //補碼轉換,取反加一
fg=0; //讀取溫度為負時fg=0
}
sdata = a/16+b*16; //整數部分
xiaoshu1 = (a&0x0f)*10/16; //小數第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小數第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小數兩位
}
void DS18B20PRO(void)
{tmstart();
//dmsec(5);//如果是不斷地讀取的話可以不延時 //
tmrtemp();//讀取溫度,執行完畢溫度將存於TMP中 //
}
void Led()
{
if(fg==1) //溫度為正時顯示的數據
{ P2=P2&0xef;
P0=seg7code[sdata/10]; //輸出十位數
Delay(8); P2=P2|0xf0; P2=P2&0xdf;
P0=seg7code[sdata%10]|0x80; //輸出個位和小數點
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
P0=seg7code[xiaoshu1]; //輸出小數點後第一位
Delay(8); P2=P2|0xf0; P2=P2&0x7f;
P0=seg7code[xiaoshu2]; //輸出小數點後第二位
Delay(4); P2=P2|0xf0;
}
if(fg==0)//溫度為負時顯示的數據
{ P2=P2&0xef;
P0=seg7code[11]; //負號
Delay(8); P2=P2|0xf0; P2=P2&0xdf;
P0=seg7code[sdata/10]|0x80; //輸出十位數
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
P0=seg7code[sdata%10]; //輸出個位和小數點
Delay(8); P2=P2|0xf0; P2=P2&0x7f;
P0=seg7code[xiaoshu1]; //輸出小數點後第一位
Delay(4); P2=P2|0xf0;
}
}
main()
{fg=1;
while(1)
{
DS18B20PRO();
Led();
}
}
⑶ 單片機喇叭dac發聲原理
單片機喇叭dac發聲原理:
在進行DAC輸出擾森的時候,我們顫乎也可同樣採用16位寬的DAC進行采樣,然後以44kHz的頻率將聲音信號轉化出來,這對於MCU上去操作DAC並非難事,只需要啟用一個16位寬的DAC和一個定時器即可,定時器用於控制聲茄李悉音輸出的頻率,如采樣率位44.1KHz,則按照該時鍾頻率輸出即可。
⑷ 求用單片機製作簡易信號發生器的程序以及電路圖
<p>運放選OP07就可以了,由於DAC0832是單電源供電的,只能產握喚生正記性波形,所以利用外部運放來段滑凱實讓余現負極性波形的產生</p>
<p></p>
⑸ 51單片機與AD轉換程序
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitwr=P2^6;
sbitrd=P2^7;
sbitadint=P2^5;
delay(uintz)
{
ucharw;
while(z--)
{
for(w=0;w<125;w++);
}
}
ad_star()
{
wr=1;
wr=0;
wr=1;
}
main()
{
uchara;
while(1)
{
ad_star();
while(adint);
rd=0;
a=P0;
delay(10);
rd=1;
if(a>0&a<=20){P3=0xc0;}
if(a>20&a<=40){P3=0xf9;}
if(a>40&a<=60){P3=0xa4;}
if(a>60&a<=80){P3=0xb0;}
if(a>80&a<=100){P3=0x99;}
if(a>100&a<=120){P3=0x92;}
if(a>120&a<=140){P3=0x82;}
if(a>140&a<160){P3=0xf8;}
if(a>160&a<=180){P3=0x80;}
if(a>180&a<=200){P3=0x90;}
if(a>200&a<=220){P3=0x88;}
if(a>220&a<=240){P3=0x83;}
if(a>240&a<=255){P3=0xc6;}
}
}