|
單片機(jī)源程序如下:
- /**********************BST-V51實(shí)驗(yàn)開發(fā)板例程************************
- * 平臺:BST-V51 + Keil U3 + STC89C52
- * 名稱:AD模塊實(shí)驗(yàn)
- * 晶振:11.0592MHZ
- * 說明:免費(fèi)開源,不提供源代碼分析.
- ******************************************************************/
- /*-----------------------------------------------
- 名稱:IIC協(xié)議 PCF8591ADDA轉(zhuǎn)換 顯示有4個,注意只有2個可以調(diào)節(jié)電壓的
- 內(nèi)容:此程序通過IIC協(xié)議對DAAD芯片操作,讀取電位器的電壓通過液晶顯示,并輸出模擬量,用LED亮度漸變指示
- ------------------------------------------------*/
- #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
- #include <intrins.h> //包含NOP空指令函數(shù)_nop_();
- #include<LCD1602.h>
- #define AddWr 0x90 //寫數(shù)據(jù)地址
- #define AddRd 0x91 //讀數(shù)據(jù)地址
- #define uint unsigned int
- #define uchar unsigned char
- uint num1;
- sbit RST=P2^4; //時(shí)鐘 加上后可以關(guān)掉DS1302芯片輸出
- sbit Sda=P2^0; //定義總線連接端口
- sbit Scl=P2^1;
- sbit dula=P2^6;
- sbit wela=P2^7;
- bit ADFlag; //定義AD采樣標(biāo)志位
- unsigned char code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段數(shù)共陰碼管段碼表
- data unsigned char Display[8];//定義臨時(shí)存放數(shù)碼管數(shù)值
- /*------------------------------------------------
- 延時(shí)程序
- ------------------------------------------------*/
- void mDelay(unsigned char j)
- {
- unsigned int i;
- for(;j>0;j--)
- {
- for(i=0;i<125;i++)
- {;}
- }
- }
- /*------------------------------------------------
- 初始化定時(shí)器1
- ------------------------------------------------*/
- void Init_Timer1(void)
- {
- TMOD |= 0x10;
- TH1=0xff; /* Init value */
- TL1=0x00;
- //PT1=1; /* 優(yōu)先級 */
- EA=1; /* interupt enable */
- ET1=1; /* enable timer1 interrupt */
- TR1=1;
- }
- /*------------------------------------------------
- 啟動IIC總線
- ------------------------------------------------*/
- void Start(void)
- {
- Sda=1;
- _nop_();
- Scl=1;
- _nop_();
- Sda=0;
- _nop_();
- Scl=0;
- }
- /*------------------------------------------------
- 停止IIC總線
- ------------------------------------------------*/
- void Stop(void)
- {
- Sda=0;
- _nop_();
- Scl=1;
- _nop_();
- Sda=1;
- _nop_();
- Scl=0;
- }
- /*------------------------------------------------
- 應(yīng)答IIC總線
- ------------------------------------------------*/
- void Ack(void)
- {
- Sda=0;
- _nop_();
- Scl=1;
- _nop_();
- Scl=0;
- _nop_();
- }
- /*------------------------------------------------
- 非應(yīng)答IIC總線
- ------------------------------------------------*/
- void NoAck(void)
- {
- Sda=1;
- _nop_();
- Scl=1;
- _nop_();
- Scl=0;
- _nop_();
- }
- /*------------------------------------------------
- 發(fā)送一個字節(jié)
- ------------------------------------------------*/
- void Send(unsigned char Data)
- {
- unsigned char BitCounter=8;
- unsigned char temp;
- do
- {
- temp=Data;
- Scl=0;
- _nop_();
- if((temp&0x80)==0x80)
- Sda=1;
- else
- Sda=0;
- Scl=1;
- temp=Data<<1;
- Data=temp;
- BitCounter--;
- }
- while(BitCounter);
- Scl=0;
- }
- /*------------------------------------------------
- 讀入一個字節(jié)并返回
- ------------------------------------------------*/
- unsigned char Read(void)
- {
- unsigned char temp=0;
- unsigned char temp1=0;
- unsigned char BitCounter=8;
- Sda=1;
- do
- {
- Scl=0;
- _nop_();
- Scl=1;
- _nop_();
- if(Sda)
- temp=temp|0x01;
- else
- temp=temp&0xfe;
- if(BitCounter-1)
- {
- temp1=temp<<1;
- temp=temp1;
- }
- BitCounter--;
- }
- while(BitCounter);
- return(temp);
- }
-
- /*------------------------------------------------
- 寫入DA數(shù)模轉(zhuǎn)換值
- ------------------------------------------------*/
- void DAC(unsigned char Data)
- {
- Start();
- Send(AddWr); //寫入芯片地址
- Ack();
- Send(0x40); //寫入控制位,使能DAC輸出
- Ack();
- Send(Data); //寫數(shù)據(jù)
- Ack();
- Stop();
-
- }
- /*------------------------------------------------
- 讀取AD模數(shù)轉(zhuǎn)換的值,有返回值
- ------------------------------------------------*/
- unsigned char ReadADC(unsigned char Chl)
- {
- unsigned char Data;
- Start(); //寫入芯片地址
- Send(AddWr);
- Ack();
- Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
- //Chl的值分別為0、1、2、3,分別代表1-4通道
- Ack();
- Start();
- Send(AddRd); //讀入地址
- Ack();
- Data=Read(); //讀數(shù)據(jù)
- Scl=0;
- NoAck();
- Stop();
- return Data; //返回值
- }
- void cmg(void)//數(shù)碼管鎖存函數(shù) 關(guān)時(shí)鐘DS1302
- {
- dula=1;
- P0=0x00;
- dula=0;
- wela=1;
- P0=0x00;
- wela=0;
- RST=0; // 關(guān)時(shí)鐘DS1302
- }
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- void main()
- {
- unsigned char num,temp1,temp2; //DA數(shù)模輸出變量
- unsigned char ADtemp,ADtemp0,ADtemp1,ADtemp2; //定義中間變量
- InitLcd();
- mDelay(20);
- Init_Timer1();
- cmg(); //數(shù)碼管鎖存
- while(1)
- {
- DAC(num); //DA輸出,可以用LED模擬電壓變化
- num++; //累加,到256后溢出變?yōu)?,往復(fù)循環(huán)。顯示在LED上亮度逐漸變化
- mDelay(20); //延時(shí)用于清晰看出變化
- if(ADFlag) //定時(shí)采集輸入模擬量
- {
- ADFlag=0;
- ADtemp=ReadADC(0);
- temp1=ADtemp*50.0/255;
- temp1=ReadADC(0)*500.0/255;
- TempData[0]=temp1/1000;
- TempData[1]=temp1/100%100; //處理0通道電壓顯示
- TempData[2]=temp1/10%10;
- TempData[3]=temp1%10;
-
- ADtemp0=ReadADC(1);
- TempData[4]=ReadADC(1)*20/1000%100; //處理1通道電流顯示
- TempData[5]=ReadADC(1)*20/100%10;
- TempData[6]=ReadADC(1)*20/10%10;
-
-
- ADtemp1=ReadADC(2);
- TempData[7]=ReadADC(2)*200/10000%100; //處理2通道電壓顯示
- TempData[8]=ReadADC(2)*200/1000%10;
- TempData[9]=ReadADC(2)*200/100%10;
- TempData[10]=ReadADC(2)*200%10;
-
- ADtemp=ReadADC(2);
- temp2=ADtemp*50.0/255;
- temp2=ReadADC(2)*500.0/255;
- TempData[7]=temp2/1000;
- TempData[8]=temp2/100%100; //處理0通道電壓顯示
- TempData[9]=temp2/10%10;
- TempData[10]=temp2%10;
- ADtemp2=ReadADC(3);
- TempData[11]=ReadADC(3)*20/1000%100;//處理3通道電流顯示
- TempData[12]=ReadADC(3)*20/100%10;
- TempData[13]=ReadADC(3)*20/10%10;
-
- disp();
- }}}
- /*------------------------------------------------
- 定時(shí)器中斷程序
- ------------------------------------------------*/
- void Timer1_isr(void) interrupt 3 using 1//定時(shí)器1執(zhí)行數(shù)碼管動態(tài)掃描
- {
- static unsigned int j;
- TH1=0xfb; //重新賦值
- TL1=0x00;
- j++;
- if(j==200)
- {j=0;ADFlag=1;} //定時(shí)置位AD采樣標(biāo)志位
-
- // P0=Display[count];//用于動態(tài)掃描數(shù)碼管
- // P2=count;
- // count++;
- // if(count==8) //表示掃描8個數(shù)碼管
- // count=0;
-
- }
復(fù)制代碼
所有資料51hei提供下載:
電壓電流1602.zip
(53.4 KB, 下載次數(shù): 35)
2019-5-22 19:46 上傳
點(diǎn)擊文件名下載附件
1 下載積分: 黑幣 -5
|
|