原理圖:本文引用地址:http://m.butianyuan.cn/article/201611/321313.htm
代碼如下:
//程序功能:D/A轉(zhuǎn)換,D12由滅到亮,蜂鳴器響一次,再由亮到滅,蜂鳴器響一次,依次循環(huán)
//頭文件
#include
#include //延時(shí)一個(gè)機(jī)械周期函數(shù)所在頭文件(_nop_())
//定義宏
#define uint unsigned int
#define uchar unsigned char
//控制端聲明
sbit duanxuan=P2^6; //數(shù)碼管段選口
sbit weixuan=P2^7; //數(shù)碼管位選口
sbit DAC0832_CS=P3^2; //DAC0832選通端
sbit DAC0832_WR=P3^6; //DAC0832寫(xiě)選通端
sbit beeper=P2^3; //蜂鳴器
//函數(shù)聲明
void delay(uint); //延時(shí)函數(shù)聲明
void init(); //初始化函數(shù)聲明
void DAC0832_star(); //DAC0832啟動(dòng)函數(shù)聲明
void switch_process(); //D/A轉(zhuǎn)換過(guò)程函數(shù)聲明
//變量定義
uint digital_data; //轉(zhuǎn)換的數(shù)字量(不需要轉(zhuǎn)換為二進(jìn)制,直接可以賦值給P0口)
uint flag; //數(shù)字量上下限標(biāo)志量
//主函數(shù)
void main()
{
init();//初始化
DAC0832_star(); //啟動(dòng)DAC0832
while(1)
{
switch_process(); //D/A轉(zhuǎn)換
}
}
//延時(shí)函數(shù)主體
void delay(uint xs)
{
uint i,j;
for(i=xs;i>0;i--)
{
for(j=110;j>0;j--)
{
}
}
}
//初始化函數(shù)主體
void init()
{
//目的是關(guān)閉數(shù)碼管,因?yàn)閿?shù)碼管數(shù)據(jù)輸入端與DAC0832數(shù)據(jù)輸入端同為P0端口
duanxuan=0;
weixuan=0;
P0=0; //保證第一次點(diǎn)亮D12是最暗的(熄滅)
}
//DAC轉(zhuǎn)換啟動(dòng)函數(shù)主體
void DAC0832_star()
{
DAC0832_CS=0; //選通DAC0832
DAC0832_WR=0; //輸入端有效(這么理解,具體與DAC0832其它引腳接法有關(guān))
}
//DAC轉(zhuǎn)換過(guò)程函數(shù)主體
void switch_process()
{
if(flag==0) //flag=0時(shí),代表數(shù)字量達(dá)到最下限
{
digital_data+=5; //每次加5
P0=digital_data; //賦值給P0,給DAC0832轉(zhuǎn)換為模擬量
if(digital_data==255) //達(dá)到最大值上線
{
flag=1; //flag=1,說(shuō)明數(shù)字量達(dá)到最上限
//蜂鳴器響50us
beeper=0;
delay(50);
beeper=1;
}
delay(20); //延時(shí)用于等待轉(zhuǎn)換完成,保證轉(zhuǎn)換是完成的(The DAC083_switch_time is 1us)
}
else //flag=1
{
digital_data-=5;
P0=digital_data;
if(digital_data==0)
{
flag=0;
beeper=0;
delay(50);
beeper=1;
}
delay(20);
}
}
以上,結(jié)束。
評(píng)論