|
本項(xiàng)目基于C51的DS18B20溫度采集和電源電壓采集
單片機(jī)源程序如下:
- #include "public.h"
- #include "lcd1602.h"
- #include "xpt2046.h"
- #include "intrins.h"
- #include "ds18b20.h"
- #include "key.h"
- void main()
- {
- int i=0,key=0;
- // float adc_vol;//電壓值
- float adc_elec;//電量
- int temp_value;//溫度值
- u16 adc_value;//ADC獲取數(shù)據(jù)(12位)
- // u8 temp_buf[5];
- // u8 adc_buf[3];
- ds18b20_init();//初始化S18B20
- LCD_Init();//LCD1602初始化
- LCD_ShowString(2,0,"Temp:");
- LCD_ShowString(1,0,"Elec:");
- while(1)
- {
- key=key_scan(0);//不需要連續(xù)掃描按鍵
- if(key==KEY1_PRESS)//檢測按鍵K1是否按下
- LED1=!LED1;//LED1狀態(tài)翻轉(zhuǎn)
- i++;
- if(i%50==0)//間隔一段時(shí)間讀取溫度值
- temp_value=ds18b20_read_temperture()*10;//保留
- if(temp_value<0)//如果溫度為負(fù),需要轉(zhuǎn)換為正
- {
- temp_value=-temp_value;
- }
- adc_value=xpt2046_read_adc_value(0xE4);//測量外部輸入通道AIN3(見PPT 7)
- adc_elec=(13.0*adc_value/4096-10.5)/(13.0-10.5)*100;
- LCD_ShowNum(1,6,adc_elec,2);//顯示電壓值
- delay_ms(10);
- LCD_ShowNum(2,6,temp_value,3);//顯示溫度值
- }
- }
復(fù)制代碼- #include "xpt2046.h"
- #include "intrins.h"
- //XPT2046寫數(shù)據(jù)
- void xpt2046_wirte_data(u8 dat)
- {
- u8 i;
- CLK = 0;//時(shí)鐘拉低
- _nop_();
- for(i=0;i<8;i++)//循環(huán)8次,每次傳輸一位,共一個(gè)字節(jié),寫入是寫8位的,一般寫入的是命令,命令是8位的
- {
- DIN = dat >> 7;//先傳高位再傳低位
- dat <<= 1;//將低位移到高位,左移一位,最高位變?yōu)樽畹臀?br />
- CLK = 0;//CLK由低到高產(chǎn)生一個(gè)上升沿,從而寫入數(shù)據(jù)(PPT 8)根據(jù)時(shí)序圖寫
- _nop_();
- CLK = 1;//拉高,便于下次數(shù)據(jù)傳入
- _nop_();
- }
- }
- //XPT2046讀數(shù)據(jù)
- u16 xpt2046_read_data(void)
- {
- u8 i;
- u16 dat=0;
- CLK = 0;
- _nop_();
- for(i=0;i<12;i++)//循環(huán)12次,每次讀取一位,大于一個(gè)字節(jié)數(shù),所以返回值類型是u16
- {
- dat <<= 1;
- CLK = 1;
- _nop_();
- CLK = 0; //CLK由高到低產(chǎn)生一個(gè)下降沿,從而讀取數(shù)據(jù)
- _nop_();
- dat |= DOUT;//先讀取高位,再讀取低位。這里采用或運(yùn)算讀取數(shù)據(jù)(PPT(9))
- }
- return dat;
- }
- //XPT2046讀AD數(shù)據(jù)
- u16 xpt2046_read_adc_value(u8 cmd)
- {
- u8 i;
- u16 adc_value=0;
- CLK = 0;//先拉低時(shí)鐘
- CS = 0;//使能XPT2046
- xpt2046_wirte_data(cmd);//發(fā)送命令字
- for(i=6; i>0; i--);//延時(shí)等待轉(zhuǎn)換結(jié)果
- CLK = 1;
- _nop_();
- CLK = 0;//發(fā)送一個(gè)時(shí)鐘,清除BUSY,這里根據(jù)時(shí)序圖,PPT(9)
- _nop_();
- adc_value=xpt2046_read_data();//這里將讀取的數(shù)據(jù)放入adc_value中,這里讀取的數(shù)據(jù)并不是電壓,二是12位的數(shù)據(jù)
- CS = 1;//關(guān)閉XPT2046
- return adc_value;
- }
復(fù)制代碼
Keil代碼下載:
Y.zip
(223.62 KB, 下載次數(shù): 39)
2022-5-5 15:17 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|