久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
AD7799的單片機(jī)驅(qū)動(dòng)程序(帶詳細(xì)注釋,完全測(cè)試通過(guò))
[打印本頁(yè)]
作者:
zzuli_lulu
時(shí)間:
2018-11-25 14:49
標(biāo)題:
AD7799的單片機(jī)驅(qū)動(dòng)程序(帶詳細(xì)注釋,完全測(cè)試通過(guò))
本程序由《鄭州輕工業(yè)大學(xué)》星空總創(chuàng)空間327房間魯路編寫,僅限于學(xué)習(xí)使用,如有問(wèn)題,請(qǐng)聯(lián)系:
QQ:1224595453
TEL:13071067331
程序使用說(shuō)明:
1、Display包中是用與LCD1602顯示的相關(guān)函數(shù),使用只需重新定義LCD1602.h中的變量或者端口;
2、Delay包中是相關(guān)延時(shí)函數(shù);
3、Main包中包括了實(shí)驗(yàn)板上的端口聲明,以及菜單顯示函數(shù);
4、AD7799包中是所有對(duì)AD7799的配置函數(shù),每次使用時(shí)修改下面兩個(gè)函數(shù)即可基本上配置所有AD7799的相關(guān)參數(shù);
/*---------- AD7799修改單雙極性增益倍數(shù)和通道 ----------*/
void AD7799_Set_Gain_and_Channel(uchar Polarity,uchar Gain,uchar Ch); //Polarity為0代表雙極性,為1代表單極性
/*---------- AD7799修改轉(zhuǎn)換模式和轉(zhuǎn)換速率 ----------*/
void AD7799_Set_Conversion_mode_and_Time(uchar Conversion_mode,uchar Time); //Conversion_mode為0代表連續(xù)轉(zhuǎn)換,為1代表單次轉(zhuǎn)換,Conversion_mode代表轉(zhuǎn)換速率
5、本程序并未包含濾波算法,如需使用,請(qǐng)自己另加;
6、更多相關(guān)知識(shí),請(qǐng)參考AD7799Datasheet,建議學(xué)習(xí)英文原版手冊(cè),中文翻譯的手冊(cè)存在錯(cuò)誤。
附注:
1、實(shí)驗(yàn)發(fā)現(xiàn),AD7799內(nèi)部增益調(diào)節(jié)最好不要超過(guò)2倍,超過(guò)2倍后,讀數(shù)偏差巨大,這里不知道是否是電路或者程序的問(wèn)題還是AD7799的問(wèn)題;
2、轉(zhuǎn)換速率不要過(guò)高,使用推薦的16.7Hz較好;
3、至于轉(zhuǎn)換模式是連續(xù)還是單次,可以根據(jù)實(shí)際應(yīng)用來(lái)設(shè)置,這里總結(jié)一下發(fā)現(xiàn):連續(xù)轉(zhuǎn)換適合于制作電壓表或者測(cè)量?jī)x器使用,因?yàn)檗D(zhuǎn)換速度快;單次轉(zhuǎn)換在每次轉(zhuǎn)換完成后會(huì)進(jìn)入Power Down模式,因此適合于低功耗場(chǎng)合,
例如溫度、濕度等變化速度不快的參量。
0.png
(35.9 KB, 下載次數(shù): 44)
下載附件
2018-11-25 15:01 上傳
單片機(jī)源程序如下:
#include <AD7799.h>
#include <intrins.h>
#include <main.h>
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
#define N 16
#define A 10 //限幅濾波的幅值波動(dòng)
/*---------- AD初始化 ----------*/
void AD7799_init_1(void) //AD7799初始化,通道3,增益1,速率120ms
{
CS=0;
delay10ms();
AD7799_Set_Gain_and_Channel(1,1,3); //單極性,Gain=1,CH=3
Internal_Zero_Scale_Calibration(); //片內(nèi)零刻度校準(zhǔn)
Internal_Full_Scale_Calibration(); //片內(nèi)滿刻度校準(zhǔn)
AD7799_Set_Conversion_mode_and_Time(1,120); //單次轉(zhuǎn)換,轉(zhuǎn)換速率120ms
//寫通信寄存器,下一次為寫配置寄存器
// SPI_Write_Byte(0x10);
// delay10ms();
// //寫配置寄存器選擇增益,通道,緩沖 //1022
// SPI_Write_Byte(0x00); //單極選擇位=1(000000H--FFFFFFH) 增益為1
// SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
// //(22H)3通道為1級(jí)放大 (21H) 2通道 2級(jí)放大
// delay10ms();
// //寫通信寄存器,下一次為寫模式寄存器
// SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
// delay10ms();
// //寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
// SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
// SPI_Write_Byte(0x0A); //默認(rèn)速率(120ms)
// delay10ms();
}
/*---------- AD7799修改單雙極性增益倍數(shù)和通道 ----------*/
void AD7799_Set_Gain_and_Channel(uchar Polarity,uchar Gain,uchar Ch) //Polarity為0代表雙極性,為1代表單極性
{
if(Polarity==1) //為1代表單極性
{
if(Ch==1)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x10); //單極選擇位=1(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x11); //單極選擇位=1(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x12); //單極選擇位=1(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x13); //單極選擇位=1(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x14); //單極選擇位=1(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x15); //單極選擇位=1(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x16); //單極選擇位=1(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x17); //單極選擇位=1(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
else if(Ch==2)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x10); //單極選擇位=1(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x11); //單極選擇位=1(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x12); //單極選擇位=1(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x13); //單極選擇位=1(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x14); //單極選擇位=1(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x15); //單極選擇位=1(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x16); //單極選擇位=1(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x17); //單極選擇位=1(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
else if(Ch==3)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x10); //單極選擇位=1(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x11); //單極選擇位=1(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x12); //單極選擇位=1(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x13); //單極選擇位=1(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x14); //單極選擇位=1(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x15); //單極選擇位=1(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x16); //單極選擇位=1(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x17); //單極選擇位=1(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
}
else if(Polarity==0) //為0代表雙極性
{
if(Ch==1)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x00); //雙極選擇位=0(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x01); //雙極選擇位=0(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x02); //雙極選擇位=0(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x03); //雙極選擇位=0(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x04); //雙極選擇位=0(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x05); //雙極選擇位=0(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x06); //雙極選擇位=0(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x07); //雙極選擇位=0(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x20); //REF-DEF=1 參考保護(hù)使能 通道選擇為1 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
else if(Ch==2)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x00); //雙極選擇位=0(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x01); //雙極選擇位=0(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x02); //雙極選擇位=0(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x03); //雙極選擇位=0(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x04); //雙極選擇位=0(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x05); //雙極選擇位=0(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x06); //雙極選擇位=0(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x07); //雙極選擇位=0(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x21); //REF-DEF=1 參考保護(hù)使能 通道選擇為2 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
else if(Ch==3)
{
if(Gain==1)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x00); //雙極選擇位=0(000000H--FFFFFFH) 增益為1
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==2)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x01); //雙極選擇位=0(000000H--FFFFFFH) 增益為2
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==4)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x02); //雙極選擇位=0(000000H--FFFFFFH) 增益為4
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==8)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x03); //雙極選擇位=0(000000H--FFFFFFH) 增益為8
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==16)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x04); //雙極選擇位=0(000000H--FFFFFFH) 增益為16
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==32)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x05); //雙極選擇位=0(000000H--FFFFFFH) 增益為32
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==64)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x06); //雙極選擇位=0(000000H--FFFFFFH) 增益為64
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
else if(Gain==128)
{
//寫通信寄存器,下一次為寫配置寄存器
SPI_Write_Byte(0x10);
delay10ms();
//寫配置寄存器選擇增益,通道,緩沖 //
SPI_Write_Byte(0x07); //雙極選擇位=0(000000H--FFFFFFH) 增益為128
SPI_Write_Byte(0x22); //REF-DEF=1 參考保護(hù)使能 通道選擇為3 通道1 000 通道2 001 通道3 010
//(22H)3通道 (21H) 2通道 (20H) 1通道
delay10ms();
return;
}
}
}
}
/*---------- AD7799修改轉(zhuǎn)換模式和轉(zhuǎn)換速率 ----------*/
void AD7799_Set_Conversion_mode_and_Time(uchar Conversion_mode,uchar Time) //Conversion_mode為0代表連續(xù)轉(zhuǎn)換,為1代表單次轉(zhuǎn)換,Conversion_mode代表轉(zhuǎn)換速率
{
if(Conversion_mode==0) //Conversion_mode為0代表連續(xù)轉(zhuǎn)換
{
if(Time==4) //轉(zhuǎn)換速率為4ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x01); //速率(4ms)
delay10ms();
}
else if(Time==8) //轉(zhuǎn)換速率為8ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x02); //速率(8ms)
delay10ms();
}
else if(Time==16) //轉(zhuǎn)換速率為16ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x03); //速率(16ms)
delay10ms();
}
else if(Time==32) //轉(zhuǎn)換速率為32ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x04); //速率(32ms)
delay10ms();
}
else if(Time==60) //轉(zhuǎn)換速率為60ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x07); //速率(60ms)
delay10ms();
}
else if(Time==120) //轉(zhuǎn)換速率為120ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x0A); //速率(120ms)
delay10ms();
}
else if(Time==200) //轉(zhuǎn)換速率為200ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x0C); //速率(200ms)
delay10ms();
}
else if(Time==480) //轉(zhuǎn)換速率為480ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x0F); //速率(480ms)
delay10ms();
}
}
else if(Conversion_mode==1) //Conversion_mode為1代表單次轉(zhuǎn)換
{
if(Time==4) //轉(zhuǎn)換速率為4ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x01); //速率(4ms)
delay10ms();
}
else if(Time==8) //轉(zhuǎn)換速率為8ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x02); //速率(8ms)
delay10ms();
}
else if(Time==16) //轉(zhuǎn)換速率為16ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x03); //速率(16ms)
delay10ms();
}
else if(Time==32) //轉(zhuǎn)換速率為32ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x04); //速率(32ms)
delay10ms();
}
else if(Time==60) //轉(zhuǎn)換速率為60ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x07); //速率(60ms)
delay10ms();
}
else if(Time==120) //轉(zhuǎn)換速率為120ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x0A); //速率(120ms)
delay10ms();
}
else if(Time==200) //轉(zhuǎn)換速率為200ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x0C); //速率(200ms)
delay10ms();
}
else if(Time==480) //轉(zhuǎn)換速率為480ms
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x0F); //速率(480ms)
delay10ms();
}
}
}
/*---------- SPI寫函數(shù) ----------*/
void SPI_Write_Byte(uchar Data)
{
uchar i;
for(i=0;i<8;i++)
{
clk=0;
if(Data&0x80) DIN=1;
else DIN=0;
Data=Data<<1;
delay1ms();
clk=1;
delay1ms();
}
}
/*---------- AD7799復(fù)位 ----------*/
void AD7799_Reset(void)
{
SPI_Write_Byte(0xff);
SPI_Write_Byte(0xff);
SPI_Write_Byte(0xff);
SPI_Write_Byte(0xff);
AD7799_init_1(); //初始化
LED=1; //燈滅
}
/*---------- 等待7799轉(zhuǎn)換完成,看是否有錯(cuò)誤 ----------*/
uchar Waite_DOUT(void)
{
uchar i;
unsigned int count=0;
while(DOUT)
{
count++;
if(count>10000)
{
//燈亮
LED=0;
while(i--)
delay10ms();
return 0;
}
}
return 1;
}
/*這兩個(gè)函數(shù)是標(biāo)準(zhǔn)推薦程序,用于以后項(xiàng)目用,此處只是列寫并不使用 (始) */
/*---------- AD單次轉(zhuǎn)換及讀取函數(shù) ----------*/
unsigned long Single_Conversion_and_Read_AD(void) //單次轉(zhuǎn)換及讀取函數(shù)
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x20); //單次轉(zhuǎn)換
SPI_Write_Byte(0x0A); //默認(rèn)速率(120ms)
delay10ms();
return Read_AD_Value();
}
/*---------- AD連續(xù)轉(zhuǎn)換及讀取函數(shù) ----------*/
unsigned long Continuous_Conversion_and_Read_AD(void) //連續(xù)轉(zhuǎn)換及讀取函數(shù),以后使用只需調(diào)用 Read_AD_Value(); 函數(shù)即可返回AD值
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x00); //連續(xù)轉(zhuǎn)換
SPI_Write_Byte(0x0A); //默認(rèn)速率(120ms)
delay10ms();
//以后使用只需調(diào)用 Read_AD_Value(); 函數(shù)即可返回AD值
return Read_AD_Value();
}
/*這兩個(gè)函數(shù)是標(biāo)準(zhǔn)推薦程序,用于以后項(xiàng)目用,此處只是列寫并不使用 (終) */
/*---------- 從AD獲取一次數(shù)據(jù) ----------*/
unsigned long Read_AD_Value(void)
{
unsigned long get_data=0;
uchar i;
if(Waite_DOUT()==0) //查看是否超時(shí)
{
//reset ad7799
/*---------- 防止時(shí)序混亂,重新同步 ----------*/
AD7799_Reset();
return 0; //超時(shí)退出讀函數(shù)
}
else
{
SPI_Write_Byte(0x58); //發(fā)送讀操作指令,讀數(shù)據(jù)寄存器
delay1ms();
clk=1;
delay1ms();
//讀數(shù)據(jù)
for(i=0;i<24;i++) //第一次進(jìn)入本函數(shù),就是下降沿
{
delay1ms();
clk=0;
get_data=get_data<<1;
if(DOUT)
get_data+=1;
clk=1;
}
// for(i=0;i<8;i++)
// {
// delay1ms();
// clk=0;
// delay1ms();
// clk=1;
// }
DOUT=1;
return get_data;
}
}
void Internal_Zero_Scale_Calibration(void) //片內(nèi)零刻度校準(zhǔn)
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0x80); //內(nèi)部零刻度校準(zhǔn)模式
SPI_Write_Byte(0x0A); //默認(rèn)速率(120ms)
delay10ms();
Waite_DOUT(); //等待零刻度校準(zhǔn)完成
}
void Internal_Full_Scale_Calibration(void) //片內(nèi)滿刻度校準(zhǔn)
{
//寫通信寄存器,下一次為寫模式寄存器
SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 設(shè)置數(shù)據(jù)寄存器不能連續(xù)可讀
delay10ms();
//寫模式寄存器,為低電平接地,操作模式為連續(xù)轉(zhuǎn)換,頻率為50HZ
SPI_Write_Byte(0xA0); //內(nèi)部慢刻度校準(zhǔn)模式
SPI_Write_Byte(0x0A); //默認(rèn)速率(120ms)
delay10ms();
Waite_DOUT(); //等待滿刻度校準(zhǔn)完成
}
/**************************************
名稱:display100num
功能:將24位數(shù)據(jù)轉(zhuǎn)化為對(duì)應(yīng)的ASCII碼并在1602顯示
輸入?yún)?shù):輸入000-FFFF的任意一個(gè)數(shù)
輸出參數(shù): 對(duì)應(yīng)的ASCII給1602顯示
*************************************/
void display100num(unsigned long num)
{
uchar a,b,c,d,e,f,g,h;
/*顯示電壓的變量*/
// float s;
// long vv;
/*顯示電壓的變量*/
uchar i,j,k,l,m,n;
a=num/10000000; //
b=(num/1000000)%10; //
c=(num/100000)%10; //
d=(num/10000)%10; //
e=(num/1000)%10; //
f=(num/100)%10; //
g=(num/10)%10; //
h=num%10; //
n=num%16;
m=(num/16)%16;
l=(num/16/16)%16;
k=(num/16/16/16)%16;
j=(num/16/16/16/16)%16;
i=(num/16/16/16/16/16)%16;
LCD1602_WriteCom(0xC0); //10進(jìn)制的AD值顯示在第二行
LCD1602_WriteData(0x30+a);
LCD1602_WriteData(0x30+b);
LCD1602_WriteData(0x30+c);
LCD1602_WriteData(0x30+d);
LCD1602_WriteData(0x30+e);
LCD1602_WriteData(0x30+f);
LCD1602_WriteData(0x30+g);
LCD1602_WriteData(0x30+h);
/*顯示電壓的函數(shù)*/
// s=((num*4.9869f)/16777215.0f); //電壓轉(zhuǎn)換
// s*=10000.0f;
// vv=(unsigned long)s;
// LCD1602_WriteCom(0xCA); //顯示在第二行 顯示的電壓
// LCD1602_WriteData(0x30+(vv/10000));
// LCD1602_WriteData('.');
// LCD1602_WriteData(0x30+(vv/1000%10));
// LCD1602_WriteData(0x30+(vv/100%10));
// LCD1602_WriteData(0x30+(vv/10%10));
// LCD1602_WriteData(0x30+(vv%10));
// LCD1602_WriteData('V');
/*顯示電壓的函數(shù)*/
LCD1602_WriteCom(0xCA); //16進(jìn)制的AD值顯示在第二行
LCD1602_WriteData(LCD1602_HEX_to_ASC(i));
LCD1602_WriteData(LCD1602_HEX_to_ASC(j));
LCD1602_WriteData(LCD1602_HEX_to_ASC(k));
LCD1602_WriteData(LCD1602_HEX_to_ASC(l));
LCD1602_WriteData(LCD1602_HEX_to_ASC(m));
LCD1602_WriteData(LCD1602_HEX_to_ASC(n));
}
//延時(shí)函數(shù)
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=5;c>0;c--)
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}
void delay1ms(void) //誤差 0us
{
unsigned char a,b;
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
復(fù)制代碼
主程序:
#include <main.h>
uchar code str1[]=" Welcome to use ";
uchar code str2[]="AD7799 Board 509";
uchar Q_Menu=0; //全局變量-菜單號(hào)
uchar Q_Channel=0; //全局變量-模擬通道(取值1,2,3)
uchar Q_Gain_ADC=0; //全局變量-通道增益(最大128,不超過(guò)256,用uchar類型)
uint Q_Time_Settle=0; //全局變量-轉(zhuǎn)換時(shí)間(因?yàn)樽畲?80,超過(guò)256,故用uint類型)
uchar Q_Polarity=0; //全局變量-轉(zhuǎn)換極性(1單極性 0雙極性)
uchar Q_Conversion_mode=0; //全局變量-連續(xù)單次模式(1單次轉(zhuǎn)換 0連續(xù)轉(zhuǎn)換)
uchar Q_enable_Conversion=0;//是否可以轉(zhuǎn)換標(biāo)志,為1代表可以轉(zhuǎn)換,為0代表當(dāng)前正在設(shè)置功能不能轉(zhuǎn)換
void main(void)
{
LCD1602_Init(); //LCD1602初始化程序
LCD_Display_AnyStr(0x80,16,str1); //位置 長(zhǎng)度 指針
LCD_Display_AnyStr(0xC0,16,str2); //位置 長(zhǎng)度 指針
while(key1&&key2&&key3&&key4); //任意鍵繼續(xù)
LCD1602_WriteCom(0x01); //清屏
AD7799_init_1(); //AD7799初始化,通道3,增益1,速率120ms
AD7799_Reset(); //手動(dòng)復(fù)位一次
Q_Menu=0;
Q_enable_Conversion=0;
Q_Channel=3;
Q_Gain_ADC=1;
Q_Time_Settle=120;
Q_Polarity=1;
Q_Conversion_mode=1;
Display_Menu_0(); //顯示基礎(chǔ)框架
while(1)
{
if(Check_key1()) //檢測(cè)設(shè)置功能鍵是否長(zhǎng)按
{
Display_Menu_1(); //當(dāng)前顯示指向CHx
Q_Menu=1;
Q_enable_Conversion=0; //如果有按鍵觸發(fā),將Q_enable_Conversion置0,代表正在設(shè)置
//再次檢測(cè)是否抖動(dòng)并且
while(!Q_enable_Conversion) //當(dāng)還未按OK時(shí),不能跳出while,只有按了OK,可以跳出本循環(huán),執(zhí)行顯示數(shù)值
{
Display_Menu(Judge_Key());
}
}
else //沒(méi)有檢測(cè)到按鍵
{
if(Q_Conversion_mode==1) //為1代表當(dāng)前是單次轉(zhuǎn)換,用單次轉(zhuǎn)換的讀取函數(shù)
{
//更新顯示AD值及配置信息
Display_AD((float)Single_Conversion_and_Read_AD()); //更新顯示AD值及配置信息
}
if(Q_Conversion_mode==0) //為0代表當(dāng)前是連續(xù)轉(zhuǎn)換,用連續(xù)轉(zhuǎn)換的讀取函數(shù)
{
Display_AD((float)Read_AD_Value());
}
}
}
}
uchar Check_key1(void) //檢測(cè)設(shè)置功能鍵是否長(zhǎng)按
{
uint i=0;
while(!key1) //按下了
{
i++; //累加按下時(shí)間
if(i>=40000) //時(shí)間如果足夠,則返回1
{
LED=0; //點(diǎn)亮
return 1;
}
}
return 0; //若按下時(shí)間不夠或者沒(méi)按,返回0
}
uchar Judge_Key(void) //判鍵程序
{
if(!key1)
{
delay10ms_12M(); //10ms效抖
if(!key1)
{
while(!key1);
return 1; //按key1
}
}
else if(!key2)
{
delay10ms_12M(); //10ms效抖
if(!key2)
{
while(!key2);
return 2; //按key2
}
}
else if(!key3)
{
delay10ms_12M(); //10ms效抖
if(!key3)
{
while(!key3);
return 3; //按key3
}
}
else if(!key4)
{
delay10ms_12M(); //10ms效抖
if(!key4)
{
while(!key4);
return 4; //按key4
}
}
return 0; //未按鍵或者是抖動(dòng)
}
void Display_Menu(uchar key_Value) //根據(jù)當(dāng)前界面和按鍵號(hào)顯示菜單內(nèi)容
{
if(key_Value==0) //如果未按或者抖動(dòng)直接退出
{
return;
}
Q_enable_Conversion=0; //為0代表正在設(shè)置功能,禁止顯示
switch (Q_Menu) //判斷當(dāng)前菜單
{
case 0: //AD結(jié)果及設(shè)置顯示界面
{
if(key_Value==1)
{
Display_Menu_1(); //當(dāng)前顯示指向CHx
Q_Menu=1;
}
else if(key_Value==4)
{
//fuwei
}
break;
}
case 1: //當(dāng)前顯示指向CHx
{
if(key_Value==1)
{
//fanhui
}
else if(key_Value==2)
{
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
AD7799程序C51.zip
(125.19 KB, 下載次數(shù): 140)
2018-11-25 14:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
15158296
時(shí)間:
2020-4-15 15:34
謝謝,正在找這個(gè)代碼
作者:
zbfdyw
時(shí)間:
2020-4-16 11:11
感謝您這么辛苦的整理資料,我在這里向您致敬!
作者:
randy619
時(shí)間:
2020-5-20 18:35
太感謝樓主了
作者:
mgchhxd
時(shí)間:
2025-3-11 17:16
感謝,很有幫助,不用自己挨個(gè)對(duì)寄存器了。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成人在线一级片
|
久久综合一区二区
|
成人激情视频在线
|
www.日本国产
|
免费一区二区在线观看
|
精品视频在线一区
|
97人人干
|
久久91
|
不卡在线视频
|
欧美中文字幕一区二区三区亚洲
|
在线播放国产一区二区三区
|
www.国产
|
成人免费视频网站在线看
|
久久精品一区二区视频
|
国产精品免费观看
|
国产精品精品视频一区二区三区
|
国产资源在线视频
|
嫩呦国产一区二区三区av
|
亚洲三级视频
|
国产a区
|
五月天婷婷综合
|
91免费看片神器
|
亚洲国产精品99久久久久久久久
|
黄色片免费在线观看
|
国产精品毛片一区二区在线看
|
日本高清视频在线播放
|
亚洲精品在线视频
|
午夜精品一区
|
国产精品电影网
|
一级特黄网站
|
91精品国产综合久久香蕉麻豆
|
亚洲成人一区
|
狠狠天天
|
国产精品久久久久久久久久免费看
|
最近中文字幕第一页
|
国产视频中文字幕
|
免费高清成人
|
狠狠做深爱婷婷综合一区
|
亚洲精品永久免费
|
欧美黄色一区
|
欧美综合国产精品久久丁香
|