|
DAC0832數(shù)模轉(zhuǎn)化芯片使用例程 程序+仿真 注釋非常詳細(xì)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (39.07 KB, 下載次數(shù): 73)
下載附件
2018-7-27 23:51 上傳
0.png (23.5 KB, 下載次數(shù): 75)
下載附件
2018-7-27 23:52 上傳
0.png (51.97 KB, 下載次數(shù): 68)
下載附件
2018-7-27 23:52 上傳
單片機(jī)源程序如下:
- /***********************************************************
- **程序功能:通過DAC0832芯片顯示電壓值
- **程序說明:通過增加電阻值來改變某個值 即顯示可變電阻的值
- **通信格式:無
- *************************************************************/
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit CS=P1^0; //片選信號
- sbit CLK=P1^1; //時鐘接口
- sbit DI=P1^2; //數(shù)據(jù)接口
- sbit CS1=P2^5; //片選信號1
- sbit CLK1=P2^6; //時鐘接口1
- sbit DI1=P2^7; //數(shù)據(jù)接口1
-
- sbit RS = P2^0; //LCD數(shù)據(jù)/命令選擇端(H/L)位聲明
- sbit RW = P2^1; //LCD讀寫控制,寫為0,讀為1
- sbit EN = P2^2; //LCD使能信號端位聲明
-
- uchar code table[2]={0xDF,0x43}; //顯示溫度符號的函數(shù)
- uchar data disdata[7]; //定義兩個用于儲存數(shù)據(jù)的數(shù)組
- uchar data data1[7];
- void delay(uint i) //延時子程序
- {
- uint j;
- while(i--)
- for(j=0;j<110;j++);
- }
- /*************************lcd1602程序**************************/
- void wr_com(uchar com) //寫指令
- {
- delay(1);
- RS=0;
- RW=0;
- EN=0;
- P0=com;
- delay(1);
- EN=1;
- delay(1);
- EN=0;
- }
- void wr_dat(uchar dat) //寫數(shù)據(jù)
- {
- delay(1);
- RS=1;
- RW=0;
- EN=0;
- P0=dat;
- delay(1);
- EN=1;
- delay(1);
- EN=0;
- }
- void wr_new() //寫新字符
- {
- uchar i;
- for(i=0;i<2;i++)
- {
- wr_dat(table[i]);
- }
- }
- void lcd_init() //初始化設(shè)置
- {
- delay(15);
- wr_com(0x38);delay(5);
- wr_com(0x08);delay(5);
- wr_com(0x06);delay(5);
- wr_com(0x0c);delay(5);
-
- }
- uchar GetAD0832(uint Channel)
- {
- uchar i=0, Data1 =0, Data2 = 0;
- CLK=0; //時鐘置低平
- DI=1; //開始信號為高電平
- CS=0; //片選信號置低,啟動AD轉(zhuǎn)換芯片
- CLK=1; //輸入開始信號(構(gòu)成一個正脈沖),時鐘上升沿,輸入開始信號
- CLK=0; //時鐘下降沿
-
- DI=1; //模擬信號輸入模式選擇(1:單模信號,0:雙模差分信號)
- CLK=1; //時鐘上升沿,輸入開始信號
- CLK=0; //時鐘下降沿
-
- DI=Channel ; //模擬信號輸入通道選擇(1:通道CH1,0:通道CH0)
- CLK=1; //時鐘上升沿,輸入開始信號
- CLK=0; //時鐘下降沿
-
- DI=1 ; //數(shù)據(jù)線置高,準(zhǔn)備接收數(shù)據(jù)
- for(i=0;i<8;i++) //從高位移入數(shù)據(jù)
- {
- CLK=1;
- CLK=0; //時鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- Data1=Data1<<1;
- if(DI==1)
- {Data1=Data1 | 0x01;} //數(shù)據(jù)左移位,補0 ,如果數(shù)據(jù)為“1”,移入1, 如果數(shù)據(jù)為“0”,移入0,
- }
- for(i=0;i<8;i++) //從低位移入數(shù)據(jù)
- {
- Data2=Data2>>1;
- if(DI==1)
- { Data2=Data2 | 0x80;} //數(shù)據(jù)右移位,補0,如果數(shù)據(jù)為“1”,移入1如果數(shù)據(jù)為“0”,移入0,
- CLK=1 ;
- CLK=0; //時鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- }
- CLK=1; //數(shù)據(jù)線置高,釋放總線,完成一次轉(zhuǎn)換
- DI=1;
- CS=1;
-
- return (Data1==Data2)?Data1:0; // 如果相等輸出data1 or 0
- }
- uchar GetAD08321(uint Channel)
- {
- uchar i=0, Data1 =0, Data2 = 0;
- CLK1=0; //時鐘置低平
- DI1=1; //開始信號為高電平
- CS1=0; //片選信號置低,啟動AD轉(zhuǎn)換芯片
- CLK1=1; //輸入開始信號(構(gòu)成一個正脈沖),時鐘上升沿,輸入開始信號
- CLK1=0; //時鐘下降沿
-
- DI1=1; //模擬信號輸入模式選擇(1:單模信號,0:雙模差分信號)
- CLK1=1; //時鐘上升沿,輸入開始信號
- CLK1=0; //時鐘下降沿
-
- DI1=Channel ; //模擬信號輸入通道選擇(1:通道CH1,0:通道CH0)
- CLK1=1; //時鐘上升沿,輸入開始信號
- CLK1=0; //時鐘下降沿
-
- DI1=1; //數(shù)據(jù)線置高,準(zhǔn)備接收數(shù)據(jù)
- for(i=0;i<8;i++) //從高位移入數(shù)據(jù)
- {
- CLK1=1;
- CLK1=0; //時鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- Data1=Data1<<1;
- if(DI1==1)
- {Data1 = Data1 | 0x01;} //數(shù)據(jù)左移位,補0 ,如果數(shù)據(jù)為“1”,移入1, 如果數(shù)據(jù)為“0”,移入0,
- }
- for(i=0;i<8;i++) //從低位移入數(shù)據(jù)
- {
- Data2=Data2>>1;
- if(DI1==1)
- { Data2=Data2 | 0x80;} //數(shù)據(jù)右移位,補0;如果數(shù)據(jù)為“1”,移入1;如果數(shù)據(jù)為“0”,移入0,
- CLK1=1 ;
- CLK1=0 ; //時鐘下降沿,AD0832輸出數(shù)據(jù),高位(MSB)先
- }
- CLK1=1; //數(shù)據(jù)線置高,釋放總線,完成一次轉(zhuǎn)換
- DI1=1;
- CS1=1;
-
- return (Data1==Data2)?Data1:0; // 如果相等輸出data1 or 0
- }
- void main()
- {
- uchar AD_val1; //儲存A/D轉(zhuǎn)換后的值
- uchar AD_val2;
- uchar AD_val3;
- uchar AD_val4;
- delay(1);
- lcd_init(); //初始化LCD
- delay(1);
-
- while(1)
- {
-
-
- AD_val1= GetAD0832(0); //進(jìn)行A/D轉(zhuǎn)換
- if(AD_val1!=0)
- {
-
- disdata[1]=AD_val1/100+0x30; //?位數(shù)
- disdata[2]=AD_val1%100/10+0x30; //?位數(shù)
- disdata[3]=AD_val1%10/1+0x30; //?數(shù)位
-
- delay(5);
- wr_com(0x83);
- wr_dat(disdata[1]);
- delay(5);
- wr_dat(disdata[2]);
- delay(5); //延時1ms
- wr_dat(disdata[3]);
- wr_new();
- }
- AD_val2= GetAD0832(1); //進(jìn)行A/D轉(zhuǎn)換
- if(AD_val2!=0)
- {
-
- disdata[4]=AD_val2/100+0x30; //?位數(shù)
- disdata[5]=AD_val2%100/10+0x30; //?位數(shù)
- disdata[6]=AD_val2%10/1+0x30; //?數(shù)位
- delay(5);
- wr_com(0x89);
- wr_dat(disdata[4]);
- delay(5);
- wr_dat(disdata[5]);
- delay(5); //延時5ms
- wr_dat(disdata[6]);
- wr_new();
- }
- AD_val3= GetAD08321(0); //進(jìn)行A/D轉(zhuǎn)換
- if(AD_val3!=0)
- {
-
- disdata[1]=AD_val3/100+0x30; //?位數(shù)
- disdata[2]=AD_val3%100/10+0x30; //?位數(shù)
- disdata[3]=AD_val3%10/1+0x30; //?數(shù)位
- delay(5);
- wr_com(0xc3);
- wr_dat(disdata[1]);
- delay(5);
- wr_dat(disdata[2]);
- delay(5); //延時5ms
- wr_dat(disdata[3]);
- wr_new();
- }
- AD_val4= GetAD08321(1); //進(jìn)行A/D轉(zhuǎn)換
- if(AD_val4!=0)
- {
-
- disdata[4]=AD_val4/100+0x30; //?位數(shù)
- disdata[5]=AD_val4%100/10+0x30; //?位數(shù)
- disdata[6]=AD_val4%10/1+0x30; //?數(shù)位
- delay(5);
- wr_com(0xc9);
- wr_dat(disdata[4]);
- delay(5);
- wr_dat(disdata[5]);
- delay(5); //延時5ms
- wr_dat(disdata[6]);
- wr_new();
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
20161111144-李作鑫-DAC0832.rar
(110.17 KB, 下載次數(shù): 25)
2018-7-27 07:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|