一、實驗目的
2、學習通過proteus軟件畫原理圖,并利用keilC軟件形成的HEX文件運行;
3、實現利用單片機AT98C51和8位D/A轉換芯片DAC0832共同實現方波、三角波、鋸齒波、梯形波這四種常見波形的發生。
4、進一步學習和利用protel軟件,畫出實驗原理圖,并生成PCB圖;
5、AT89S51為核心的單片機系統的軟硬件開發過程;
6、基本信號的產生原理及函數發生器系統的設計流程
二、實驗要求
設計一個低頻信號發生器:
1、查閱相關資料,完成原理圖設計;
2、編寫軟件,使該系統能輸出方波、三角波、鋸齒波和梯形波;波形頻率均為1khz,雙極性輸出。
3、用protel軟件完成系統的硬件設計,并通過電器規則檢查;
4、仿真實現;
5、畫pcb圖;
6、寫綜合課程設計報告。
三、器件清單
1、AT80C51一個;
2、DAC0832一個;
3、OPAMP兩個;
4、數碼管一個;
5、按鍵開關一個;
6、電阻、電感若干;
四、實驗原理
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66}// 0 1 2 3 4
unsigned char time1; //////延時函數參數///////
/////////////////////////////變量說明//////////////////////////////////////
unsigned char time2;
unsigned char time3;
unsigned char count;
unsigned char ms;
////////////////////////////////////////函數說明////////////////////////////////
void initial(void); ////初始化函數////
//void initial_time0(void); //////定時器0初始化///////
void anjian(void); ////////////按鍵函數////
void delay(unsigned char time1,time2,time3); ////延時函數////
void disp(unsigned char count); /////靜態顯示子函數/////
void delay1(char ms);
void fangbo(void); //方波函數//
void sanjiaobo(void); //三角波函數//
void juchibo(void); //鋸齒波函數//
void tixingbo(void); //正弦波函數//
void main (void)
{
initial();
while(1)
{
anjian();
}
}
/*************************************************************************
//函數名稱:void anjian(void)
//函數說明:按鍵函數
//函數功能:
// 注意:
*************************************************************************/
void anjian(void)
{
if(P3_7==0)
{delay(1,50,248);
if(P3_7==0)
{count=1;
disp(count);
fangbo();
}
}
while(P3_7==0);
count=0;
disp(count);
anjian();
}
/*************************************************************************
//函數名稱:void fangbo(void)
//函數說明:方波函數
//函數功能:
// 注意:
*************************************************************************/
void fangbo(void)
{
while(1)
{
unsigned char fangbo_1;
fangbo_1+=8;
if(fangbo_1>128&fangbo_1<256)?? {P0=0x00;}?? ?? ?? ?? ?
if(fangbo_1<128)?? ?? ?? ?? {P0=0xff;} ? ?
if(P3_7==0)
{delay(1,50,248);
if(P3_7==0)
{ count=2;
disp(count);
sanjiaobo();
}
}
while(P3_7==0);
}
}
/*************************************************************************
//函數名稱:void sanjiaobo(void)
//函數說明:三角波函數
//函數功能:
// 注意:
*************************************************************************/
void sanjiaobo(void)
{
while(1)
{
unsignedchar sanjiaobo_2;
if(sanjiaobo_2<=128)
{P0=sanjiaobo_2;}
else
{P0=255-sanjiaobo_2;}
sanjiaobo_2+=5;
if(sanjiaobo_2>=255)
{sanjiaobo_2=0x00;}
if(P3_7==0)
{
delay(1,50,248);
if(P3_7==0)
{count=3;
disp(count);
juchibo();
}
}
while(P3_7==0);
}
}
/*************************************************************************
//函數名稱:void juchibo(void)
//函數說明:鋸齒波函數
//函數功能:
// 注意:
*************************************************************************/
void juchibo(void)
{
while(1)
{
unsignedchar juchibo_3;
if(juchibo_3<180)?? {P0=juchibo_3;}??
juchibo_3+=4;
if(juchibo_3>=180) {juchibo_3=0x00;}
if(P3_7==0)
{
delay(1,50,248);
if(P3_7==0)
{count=4;
disp(count);
tixingbo();
}
}
while(P3_7==0);
}
}
/*************************************************************************
//函數名稱:void tixingbo(void)
//函數說明:梯形波函數
//函數功能:
// 注意:
*************************************************************************/
void tixingbo(void)
{
while(1)
{
unsignedchar tixingbo_4;
if(tixingbo_4<120)
{P0=tixingbo_4;}
elseif(tixingbo_4==120)
delay1(1);
else if(tixingbo_4<240)
{P0=240-tixingbo_4;}
if(tixingbo_4==240)
{delay1(1);}
if(tixingbo_4>240)
{
tixingbo_4=0x00;
}
tixingbo_4+=10;
if(P3_7==0)
{delay(1,50,248);
if(P3_7==0)
{ count=0;
disp(count);
anjian();
}
}
while(P3_7==0);
}
}
/*************************************************************************
//函數名稱:void initial(void)
//函數說明:初始化函數
//函數功能:
// 注意:
*************************************************************************/
void initial(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
}
/*************************************************************************
//函數名稱:delay(unsigned char time1,time2,time3)
//函數說明:延時函數
//函數功能:
//入口參數:unsigned char time1,time2,time3
//出口參數:
// 注意:延時時間的計算:(time1*time2*time3*8us)us
time1,time2,time3可以不進行變量說明
*************************************************************************/
void delay(unsigned char time1,time2,time3)
{
unsignedchar i,j,k;
for(i=time1;i>0;i--)
{ for(j=time2;j>0;j--)
{
for(k=time3;k>0;k--);
}
}
}
/*************************************************************************
//函數名稱:disp(unsigned char count)
//函數說明:靜態顯示子函數
//函數功能:
//入口參數:unsigned char count
//出口參數:
// 注意:
*************************************************************************/
void disp(unsigned char count)
{
P2=table[count];
delay(1,5,248);
}
voiddelay1(char ms)
{
char ti;
while(ms--)
{
for(ti=0;ti<16;ti++){}
}
}
? ?
? ?
? ?
? ?
? ??
實驗心得
通過該課題的設計掌握以AT89S51為核心的單片機系統的軟硬件開發過程和基本信號的產生原理、測量及誤差分析方法,同時掌握函數發生器系統的設計流程;培養我們綜合運用所學的基本知識、基本理論和基本技能的能力,學習解決一般工程技術和有關專業問題的能力,學習工程設計和科學研究的基本方法,完成對所學知識的綜合訓練。
-
原理圖
+關注
關注
1272文章
6183瀏覽量
227270 -
單片機
+關注
關注
6008文章
44062瀏覽量
622631 -
C語言
+關注
關注
180文章
7542瀏覽量
131032 -
低頻信號發生器
+關注
關注
1文章
11瀏覽量
11097
原文標題:低頻信號發生器
文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論