|
#include <reg52.h>
#include <ABSACC.H>
#include <math.h>
#include <lcd12864.h>
#define DAC0832Addr 0x7FFF //DAC0832地址
#define PI 3.14159
#define uchar unsigned char //uchar代表無(wú)符號(hào)字符
#define uint unsigned int //unit代表無(wú)符號(hào)整型數(shù)據(jù)類型
sbit Key1=P2^0; //定義按鍵 - 用來(lái)選擇波形
char Wave_flag=0; //波形標(biāo)志位 0-三角波 1-鋸齒波 2-方波 3-正弦波
void KeyScan(void); //按鍵掃描函數(shù)
void Waveform(void); //波形產(chǎn)生函數(shù)
void TransformData(uchar c0832data); //數(shù)據(jù)轉(zhuǎn)換函數(shù) - DA輸出
void delay_ms(uint i); //延時(shí)函數(shù)
void main(void)
{
lcdinit(); //lcd12864初始化
Clear_Screen(); //清屏
Show_Word(); //初始化界面
while(1)
{
KeyScan(); //按鍵掃描
Waveform(); //產(chǎn)波函數(shù)
Display();
}
}
void Waveform(void)
{
uchar cDigital=0;
switch(Wave_flag)
{
/*-- 三角波 --*/
case 0:
/*-- 周期為 (255 + 255) * 1 = 510ms --*/
for(cDigital=0;cDigital<255;cDigital++) //產(chǎn)生三角波下降沿
{
delay_ms(1);
TransformData(cDigital);
}
for(cDigital=255;cDigital>0;cDigital--) //產(chǎn)生三角波上升沿
{
delay_ms(1);
TransformData(cDigital);
}
break;
/*-- 鋸齒波 --*/
case 1:
/*-- 周期為 255 * 2 = 510ms --*/
for(cDigital=255;cDigital>0;cDigital--)
{
delay_ms(2);
TransformData(cDigital);
}
break;
/*-- 方波 --*/
case 2:
/*-- 周期為 510ms --*/
cDigital=0;
TransformData(cDigital);
delay_ms(255);
cDigital=255;
TransformData(cDigital);
delay_ms(255);
break;
/*-- 正弦波 --*/
case 3:
/*-- 因?yàn)閟in函數(shù)占用時(shí)間未知 周期未確定 --*/
for(cDigital=0;cDigital<100;cDigital++)
{
TransformData( 127 * sin( (2.0 * PI * (float)cDigital) / 100 ) + 127 );
delay_ms(1);
}
break;
}
}
void KeyScan(void)
{
if(Key1 == 0)
{
Wave_flag ++;
while(Key1 == 0);
}
if(Wave_flag>3)Wave_flag=0;
}
void TransformData(uchar c0832data) //數(shù)/模轉(zhuǎn)換函數(shù)
{
*((uchar xdata*)DAC0832Addr)=c0832data;
}
void delay_ms(uint i) //延時(shí)ms函數(shù)
{
uint j;
for(;i>0;i--)
{
for(j=110;j>0;j--);
KeyScan();
}
}
|
-
-
DAC0832.zip
2018-12-5 23:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
97.39 KB, 下載次數(shù): 35, 下載積分: 黑幣 -5
|