版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/*-*/ /*-*功能: 【ADS1115單端輸入檢測(cè)電壓】*-*/*-*CPU: 【STC12C5A60S2】*-*/*-*ADC芯片:【ADS1115(2差分輸入或4單端輸入)】*-*/*-*液晶: 【LCD1602】*-*/*-*ADC與單片機(jī)連接:【SCL:P1.0 , SDA:P1.1】*-*/*-*檢測(cè)范圍:【0.004.99V】*-*/*-*/ #include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define _Nop() _
2、nop_()/*-以下為L(zhǎng)CD1602顯示模塊端口定義及函數(shù)聲明-*/sbit lcd_rs_port = P17; /*定義LCD控制端口*/sbit lcd_rw_port = P16;sbit lcd_en_port = P24;#define lcd_data_port P0unsigned char num_char_table = "0123456789ABCDEF"unsigned char Lcd_Dis1_table = "Volt: V "/電壓顯示框架unsigned char pos_char_table = " 67.
3、9AB V "/電壓顯示位置void lcd_delay(uchar ms);/LCD1602 延時(shí)void lcd_busy_wait(); /LCD1602 忙等待void lcd_command_write(uchar command); /LCD1602 命令字寫(xiě)入void lcd_system_reset();/LCD1602 初始化void lcd_char_write(uchar x_pos,y_pos,lcd_dat); /LCD1602 字符寫(xiě)入void lcd_bad_check(); /LCD1602 壞點(diǎn)檢查void Num_to_Disp(uint Num)
4、;/LCD1602 數(shù)據(jù)處理void LcdDisp(uint num);/LCD1602 數(shù)據(jù)顯示void delay_1ms(uchar x);/LCD1602 延時(shí)1ms/*-以下為ADS1115模塊端口定義及函數(shù)聲明-*/sbit SCL = P10;sbit SDA = P11;#define TRUE 1#define FALSE 0unsigned int Config;unsigned char Writebuff4,Readbuff3;unsigned int Result2; int D_ADS; /轉(zhuǎn)換的數(shù)字量#define Accuracy 32768 /定義ADC精度
5、,ADS1115單端輸入時(shí)15位char VCC = 4.78; /VCC,電壓參考值#define ADDRESS_0 0x90 /ADDR PIN ->GND#define ADDRESS_1 0x92 /ADDR PIN ->VDD#define ADDRESS_2 0x94 /ADDR PIN ->SDA#define ADDRESS_3 0x96 /ADDR PIN ->SCL/*POINTER REGISTER*/#define Pointer_0 0x00 /Convertion register#define Pointer_1 0x01 /Config
6、 register#define Pointer_2 0x02 /Lo_thresh register#define Pointer_3 0x03 /Hi_thresh register/*CONFIG REGISTER*/#define OS_0 0x0000#define OS_1 0x8000#define MUX_0 0x0000 /AINp=AIN0, AINn=AIN1#define MUX_1 0x1000 /AINp=AIN0, AINn=AIN3#define MUX_2 0x2000 /AINp=AIN1, AINn=AIN3#define MUX_3 0x3000 /AI
7、Np=AIN2, AINn=AIN3#define MUX_4 0x4000 /AINp=AIN0, AINn=GND#define MUX_5 0x5000 /AINp=AIN1, AINn=GND#define MUX_6 0x6000 /AINp=AIN2, AINn=GND#define MUX_7 0x7000 /AINp=AIN3, AINn=GND#define PGA_0 0x0000 /FS=6.144V#define PGA_1 0x0200 /FS=4.096V#define PGA_2 0x0400 /FS=2.048V#define PGA_3 0x0600 /FS=
8、1.024V#define PGA_4 0x0800 /FS=0.512V#define PGA_5 0x0A00 /FS=0.256V#define PGA_6 0x0C00 /FS=0.256V#define PGA_7 0x0E00 /FS=0.256V#define MODE_0 0x0000#define MODE_1 0x0100#define DR_0 0x0000 /Data Rate = 8#define DR_1 0x0020 /Data Rate = 16#define DR_2 0x0040 /Data Rate = 32#define DR_3 0x0060 /Dat
9、a Rate = 64#define DR_4 0x0080 /Data Rate = 128#define DR_5 0x00A0 /Data Rate = 250#define DR_6 0x00C0 /Data Rate = 475#define DR_7 0x00E0 /Data Rate = 860#define COMP_MODE_0 0x0000#define COMP_MODE_1 0x0010#define COMP_POL_0 0x0000#define COMP_POL_1 0x0008#define COMP_LAT_0 0x0000#define COMP_LAT_1
10、 0x0040#define COMP_QUE_0 0x0000#define COMP_QUE_1 0x0001#define COMP_QUE_2 0x0002#define COMP_QUE_3 0x0003/*ADDR Initial*/#define ADDRESS ADDRESS_0 /ADDR PIN ->GND#define ADDRESS_W ADDRESS|0x00 /寫(xiě)地址#define ADDRESS_R ADDRESS|0x01 /讀地址/*Config Initial*/#define OS OS_1#define MUX_A0 MUX_4 /AINp=AIN
11、0, AINn=GND#define MUX_A1 MUX_5 /AINp=AIN1, AINn=GND#define MUX_A2 MUX_6 /AINp=AIN2, AINn=GND#define MUX_A3 MUX_7 /AINp=AIN3, AINn=GND#define PGA PGA_1 /FS=6.144V#define MODE MODE_1 /Continuous conversion mode#define DR DR_7 /Data Rate = 860#define COMP_QUE COMP_QUE_3void Delay_us_15 (void);void Del
12、ay_ms_1 (void); /功 能:延時(shí)void Start(void); /功 能:完成IIC的起始條件操作void Stop(void); /功 能:完成IIC的終止條件操作void ACK(void); /功 能:完成IIC的主機(jī)應(yīng)答操作void NACK(void); /功 能:完成IIC的主機(jī)無(wú)應(yīng)答操作unsigned char Check(void);/功 能:檢查從機(jī)的應(yīng)答操作void Write_1_Byte(unsigned char DataByte);/寫(xiě) 1個(gè)字節(jié)unsigned char Write_N_Byte(unsigned char *writebuff
13、er,unsigned char n);/寫(xiě) N個(gè)字節(jié)unsigned char Read_1_Byte(void);/讀 1個(gè)字節(jié)void Read_N_Byte(unsigned int *readbuff,unsigned char n);/讀 N個(gè)字節(jié)void InitADS1115(bit S_MUX_0, bit S_MUX_1);/ADS1115初始化void WriteWord(void);/寫(xiě)void ReadWord(void);/讀unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1);/ADS1115取值/*-*/*-*【 主函數(shù)
14、】*-*/*-*/void main()unsigned int result;lcd_system_reset(); /LCD1602 初始化lcd_bad_check(); /LCD1602 壞點(diǎn)檢查while(1)result = ADS1115(0,0);/ADS1115取值_AIN0/result = ADS1115(0,1);/ADS1115取值_AIN1/result = ADS1115(1,0);/ADS1115取值_AIN2/result = ADS1115(1,1);/ADS1115取值_AIN3LcdDisp(result);/LCD1602顯示電壓值/*-*/*-*-*
15、/*-*/*-以下為L(zhǎng)CD1602顯示模塊函數(shù)定義-*/void lcd_delay(uchar ms) /*LCD1602 延時(shí)*/ uchar j; while(ms-) for(j=0;j<250;j+) ; void lcd_busy_wait() /*LCD1602 忙等待*/ lcd_rs_port = 0; lcd_rw_port = 1; lcd_en_port = 1; lcd_data_port = 0xff; while (lcd_data_port&0x80); lcd_en_port = 0; void lcd_command_write(uchar c
16、ommand) /*LCD1602 命令字寫(xiě)入*/ lcd_busy_wait(); lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = command; lcd_en_port = 1; lcd_en_port = 0; void lcd_system_reset() /*LCD1602 初始化*/ lcd_delay(20); lcd_command_write(0x38); lcd_delay(100); lcd_command_write(0x38); lcd_delay(50); lcd_command
17、_write(0x38); lcd_delay(10); lcd_command_write(0x08); lcd_command_write(0x01); lcd_command_write(0x06); lcd_command_write(0x0c); void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符寫(xiě)入*/ x_pos &= 0x0f; /* X位置范圍 015 */ y_pos &= 0x01; /* Y位置范圍 0 1 */ if(y_pos=1) x_pos += 0x40; x_pos += 0
18、x80; lcd_command_write(x_pos); lcd_busy_wait(); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat; lcd_en_port = 1; lcd_en_port = 0; void lcd_bad_check() /*LCD1602 壞點(diǎn)檢查*/ char i,j; for(i=0;i<2;i+) for(j=0;j<16;j+) lcd_char_write(j,i,0xff); lcd_delay(200); lcd_delay(200
19、);lcd_delay(200);lcd_delay(100);lcd_delay(200); lcd_command_write(0x01); / clear lcd disp void Num_to_Disp(uint Num) /*LCD顯示數(shù)據(jù)處理*/ /Start_1-Over_1:顯示電壓值,Start_2-Over_2:顯示ADS1115輸出數(shù)值 float NUM; /Start_1int xx, yy, zz, zzz;NUM = (Num / (float)Accuracy) * VCC;/ADS1115取值 = Accuracy × (Vin / VCC)xx
20、= (int)NUM;yy = (int)(NUM - (float)(xx) * 10);zz = (int)(NUM - (float)(xx) * 100)%10;zzz = (int)(NUM - (float)(xx) * 1000)%10;pos_char_table6 = num_char_tablexx / 10; /電壓值十位pos_char_table7= num_char_tablexx % 10;/電壓值個(gè)位pos_char_table9= num_char_tableyy;/電壓值小數(shù)點(diǎn)后一位pos_char_table10= num_char_tablezz;/電壓
21、值小數(shù)點(diǎn)后兩位pos_char_table11= num_char_tablezzz; /電壓值小數(shù)點(diǎn)后三位 /Over_1/*pos_char_table6 = num_char_tableNum / 10000; /Start_2pos_char_table7 = num_char_table(Num % 10000) / 1000;pos_char_table8= num_char_table(Num % 10) % 1000) / 100;pos_char_table9= num_char_table(Num / 10) % 10;pos_char_tableA= num_char_t
22、ableNum % 10; /Over_2*/void LcdDisp(uint num) /*LCD顯示*/uint i=0;for (i=0;i<16;i+) lcd_char_write(i,0,Lcd_Dis1_tablei); /顯示框架 Num_to_Disp(num);for(i = 6; i < 12; i+)lcd_char_write(i,0,pos_char_tablei); /顯示電壓 delay_1ms(100);void delay_1ms(uchar x) /*1MS為單位的延時(shí)程序*/ uchar j; while(x-) for(j=0;j<
23、125;j+) ; /*-以下為ADS1115模塊端口函數(shù)定義-*/void Delay_us_15 (void) /*延時(shí)程序*/ unsigned char i; for(i = 0;i < 15;i+) _nop_();void Delay_ms_1 (void)unsigned char i;for(i = 150;i > 0;i-) _nop_();/*/函數(shù)名稱:Start/功 能:完成IIC的起始條件操作/參 數(shù):無(wú)/返回值 :無(wú)/*/void Start(void) SCL=1; SDA=1; Delay_us_15 ();SDA=0; Delay_us_15 ()
24、;SCL=0; Delay_us_15 ();/*/函數(shù)名稱:Stop/功 能:完成IIC的終止條件操作/參 數(shù):無(wú)/返回值 :無(wú)/*/void Stop(void) SDA=0; Delay_us_15 (); SCL=1; Delay_us_15 ();SDA=1; Delay_us_15 ();/*/函數(shù)名稱:ACK/功 能:完成IIC的主機(jī)應(yīng)答操作/參 數(shù):無(wú)/返回值 :無(wú)/*/void ACK(void) SDA=0; _nop_(); _nop_(); SCL=1; Delay_us_15 (); SCL=0;_nop_(); _nop_();SDA=1; Delay_us_15
25、();/*/函數(shù)名稱:NACK/功 能:完成IIC的主機(jī)無(wú)應(yīng)答操作/參 數(shù):無(wú)/返回值 :無(wú)/*/void NACK(void)SDA=1;_nop_(); _nop_();SCL=1;Delay_us_15 ();SCL=0;_nop_(); _nop_();SDA=0; Delay_us_15 (); /*檢查應(yīng)答信號(hào)函數(shù)*/*如果返回值為1則證明有應(yīng)答信號(hào),反之沒(méi)有*/*/函數(shù)名稱:Check/功 能:檢查從機(jī)的應(yīng)答操作/參 數(shù):無(wú)/返回值 :從機(jī)是否有應(yīng)答:1-有,0-無(wú)/*/unsigned char Check(void) unsigned char slaveack; SDA=1
26、; _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); slaveack = SDA; /讀入SDA數(shù)值 SCL=0; Delay_us_15 (); if(slaveack) return FALSE; else return TRUE;/*Write a Byte*/void Write_1_Byte(unsigned char DataByte)int i;for(i=0;i<8;i+)if(DataByte&0x80) /if(DataByte<<i)&0x80) SDA=1;els
27、e SDA=0; Delay_us_15 ();SCL=1; Delay_us_15 (); SCL=0; Delay_us_15 (); DataByte <<= 1; SDA=1; _nop_(); /*Write N Byte*/unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n)int i;for(i=0;i<n;i+)Write_1_Byte(*writebuffer);if(Check()writebuffer +;elseStop(); return FALSE;Stop()
28、;return TRUE;/*Read a Byte*/unsigned char Read_1_Byte(void) unsigned char data_Value = 0, FLAG, i; for(i=0;i<8;i+) SDA=1;Delay_us_15 (); SCL=1;Delay_us_15 (); FLAG=SDA; data_Value <<= 1;if( FLAG) data_Value |= 0x01; SCL=0; Delay_us_15 (); return data_Value;/*Read N Byte*/void Read_N_Byte(unsigned int*readbuff, unsigned char n)unsigned char i;for(i=0;i<n;i+)readbuffi=Read_1_Byte();if(i=n-1)NACK(); /不連續(xù)讀字節(jié)else ACK(); /連續(xù)讀字節(jié)Stop();/*初始化*/void InitADS1115(bit S_MUX_0, bit S_MUX_1)if (S_MUX_0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版通 用規(guī)范對(duì)設(shè)計(jì)影響交流分享
- 2025年撫順師范高等??茖W(xué)校高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 山西省孝義市高三上學(xué)期入學(xué)摸底考試語(yǔ)文試題(含答案)
- 滬教版(上海)七年級(jí)地理第一學(xué)期中國(guó)區(qū)域篇(上)1.2《臺(tái)灣省》聽(tīng)課評(píng)課記錄
- 中班幼兒系列活動(dòng)策劃方案五篇
- 2025年科學(xué)儀器行業(yè)技術(shù)革新與發(fā)展前景
- 鋼材購(gòu)銷合同范文年
- 代償協(xié)議與擔(dān)保合同
- 跨境貿(mào)易線上支付服務(wù)合同
- 投資公司借款的合同樣本
- 醫(yī)保政策與健康管理培訓(xùn)計(jì)劃
- 無(wú)人化農(nóng)場(chǎng)項(xiàng)目可行性研究報(bào)告
- 2024屆上海市金山區(qū)高三下學(xué)期二模英語(yǔ)試題(原卷版)
- 學(xué)生春節(jié)安全教育
- 2024-2025年校長(zhǎng)在教研組長(zhǎng)和備課組長(zhǎng)會(huì)議上講話
- 宏觀利率篇:債券市場(chǎng)研究分析框架
- 橋梁頂升移位改造技術(shù)規(guī)范
- 六年級(jí)語(yǔ)文(上冊(cè))選擇題集錦
- 《游戲界面設(shè)計(jì)專題實(shí)踐》課件-知識(shí)點(diǎn)5:圖標(biāo)繪制準(zhǔn)備與繪制步驟
- MOOC 材料科學(xué)基礎(chǔ)-西安交通大學(xué) 中國(guó)大學(xué)慕課答案
- 復(fù)產(chǎn)復(fù)工試題含答案
評(píng)論
0/150
提交評(píng)論