本程序由《郑州轻工业大学》星空总创空间327房间鲁路编写,仅限于学习使用,如有问题,请联系:
QQ:1224595453
TEL:13071067331
程序使用说明:
1、Display包中是用与LCD1602显示的相关函数,使用只需重新定义LCD1602.h中的变量或者端口;
2、Delay包中是相关延时函数;
3、Main包中包括了实验板上的端口声明,以及菜单显示函数;
4、AD7799包中是所有对AD7799的配置函数,每次使用时修改下面两个函数即可基本上配置所有AD7799的相关参数;
/*---------- AD7799修改单双极性增益倍数和通道 ----------*/
void AD7799_Set_Gain_and_Channel(uchar Polarity,uchar Gain,uchar Ch); //Polarity为0代表双极性,为1代表单极性
/*---------- AD7799修改转换模式和转换速率 ----------*/
void AD7799_Set_Conversion_mode_and_Time(uchar Conversion_mode,uchar Time); //Conversion_mode为0代表连续转换,为1代表单次转换,Conversion_mode代表转换速率
5、本程序并未包含滤波算法,如需使用,请自己另加;
6、更多相关知识,请参考AD7799Datasheet,建议学习英文原版手册,中文翻译的手册存在错误。
附注:
1、实验发现,AD7799内部增益调节最好不要超过2倍,超过2倍后,读数偏差巨大,这里不知道是否是电路或者程序的问题还是AD7799的问题;
2、转换速率不要过高,使用推荐的16.7Hz较好;
3、至于转换模式是连续还是单次,可以根据实际应用来设置,这里总结一下发现:连续转换适合于制作电压表或者测量仪器使用,因为转换速度快;单次转换在每次转换完成后会进入Power Down模式,因此适合于低功耗场合,
例如温度、湿度等变化速度不快的参量。
单片机源程序如下:
- #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 //限幅滤波的幅值波动
- /*---------- 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(); //片内零刻度校准
- Internal_Full_Scale_Calibration(); //片内满刻度校准
-
- AD7799_Set_Conversion_mode_and_Time(1,120); //单次转换,转换速率120ms
-
- //写通信寄存器,下一次为写配置寄存器
- // SPI_Write_Byte(0x10);
- // delay10ms();
- // //写配置寄存器选择增益,通道,缓冲 //1022
- // SPI_Write_Byte(0x00); //单极选择位=1(000000H--FFFFFFH) 增益为1
- // SPI_Write_Byte(0x22); //REF-DEF=1 参考保护使能 通道选择为1 通道1 000 通道2 001 通道3 010
- // //(22H)3通道为1级放大 (21H) 2通道 2级放大
- // delay10ms();
-
- // //写通信寄存器,下一次为写模式寄存器
- // SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- // delay10ms();
- // //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- // SPI_Write_Byte(0x20); //单次转换
- // SPI_Write_Byte(0x0A); //默认速率(120ms)
- // delay10ms();
- }
- /*---------- AD7799修改单双极性增益倍数和通道 ----------*/
- 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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为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 参考保护使能 通道选择为3 通道1 000 通道2 001 通道3 010
- //(22H)3通道 (21H) 2通道 (20H) 1通道
- delay10ms();
- return;
- }
- }
- }
- }
- /*---------- AD7799修改转换模式和转换速率 ----------*/
- void AD7799_Set_Conversion_mode_and_Time(uchar Conversion_mode,uchar Time) //Conversion_mode为0代表连续转换,为1代表单次转换,Conversion_mode代表转换速率
- {
- if(Conversion_mode==0) //Conversion_mode为0代表连续转换
- {
- if(Time==4) //转换速率为4ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x01); //速率(4ms)
- delay10ms();
- }
- else if(Time==8) //转换速率为8ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x02); //速率(8ms)
- delay10ms();
- }
- else if(Time==16) //转换速率为16ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x03); //速率(16ms)
- delay10ms();
- }
- else if(Time==32) //转换速率为32ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x04); //速率(32ms)
- delay10ms();
- }
- else if(Time==60) //转换速率为60ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x07); //速率(60ms)
- delay10ms();
- }
- else if(Time==120) //转换速率为120ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x0A); //速率(120ms)
- delay10ms();
- }
- else if(Time==200) //转换速率为200ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x0C); //速率(200ms)
- delay10ms();
- }
- else if(Time==480) //转换速率为480ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x0F); //速率(480ms)
- delay10ms();
- }
- }
- else if(Conversion_mode==1) //Conversion_mode为1代表单次转换
- {
- if(Time==4) //转换速率为4ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x01); //速率(4ms)
- delay10ms();
- }
- else if(Time==8) //转换速率为8ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x02); //速率(8ms)
- delay10ms();
- }
- else if(Time==16) //转换速率为16ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x03); //速率(16ms)
- delay10ms();
- }
- else if(Time==32) //转换速率为32ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x04); //速率(32ms)
- delay10ms();
- }
- else if(Time==60) //转换速率为60ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x07); //速率(60ms)
- delay10ms();
- }
- else if(Time==120) //转换速率为120ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x0A); //速率(120ms)
- delay10ms();
- }
- else if(Time==200) //转换速率为200ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x0C); //速率(200ms)
- delay10ms();
- }
- else if(Time==480) //转换速率为480ms
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x0F); //速率(480ms)
- delay10ms();
- }
- }
- }
- /*---------- SPI写函数 ----------*/
- 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复位 ----------*/
- 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转换完成,看是否有错误 ----------*/
- 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;
- }
- /*这两个函数是标准推荐程序,用于以后项目用,此处只是列写并不使用 (始) */
- /*---------- AD单次转换及读取函数 ----------*/
- unsigned long Single_Conversion_and_Read_AD(void) //单次转换及读取函数
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x20); //单次转换
- SPI_Write_Byte(0x0A); //默认速率(120ms)
- delay10ms();
- return Read_AD_Value();
- }
- /*---------- AD连续转换及读取函数 ----------*/
- unsigned long Continuous_Conversion_and_Read_AD(void) //连续转换及读取函数,以后使用只需调用 Read_AD_Value(); 函数即可返回AD值
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x00); //连续转换
- SPI_Write_Byte(0x0A); //默认速率(120ms)
- delay10ms();
- //以后使用只需调用 Read_AD_Value(); 函数即可返回AD值
- return Read_AD_Value();
- }
- /*这两个函数是标准推荐程序,用于以后项目用,此处只是列写并不使用 (终) */
- /*---------- 从AD获取一次数据 ----------*/
- unsigned long Read_AD_Value(void)
- {
- unsigned long get_data=0;
- uchar i;
-
- if(Waite_DOUT()==0) //查看是否超时
- {
- //reset ad7799
- /*---------- 防止时序混乱,重新同步 ----------*/
- AD7799_Reset();
- return 0; //超时退出读函数
- }
- else
- {
- SPI_Write_Byte(0x58); //发送读操作指令,读数据寄存器
- delay1ms();
-
- clk=1;
- delay1ms();
- //读数据
- for(i=0;i<24;i++) //第一次进入本函数,就是下降沿
- {
- 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) //片内零刻度校准
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0x80); //内部零刻度校准模式
- SPI_Write_Byte(0x0A); //默认速率(120ms)
- delay10ms();
- Waite_DOUT(); //等待零刻度校准完成
- }
- void Internal_Full_Scale_Calibration(void) //片内满刻度校准
- {
- //写通信寄存器,下一次为写模式寄存器
- SPI_Write_Byte(0x08); //RS2 RS1 RS0 001(模式寄存器16bits) 设置数据寄存器不能连续可读
- delay10ms();
- //写模式寄存器,为低电平接地,操作模式为连续转换,频率为50HZ
- SPI_Write_Byte(0xA0); //内部慢刻度校准模式
- SPI_Write_Byte(0x0A); //默认速率(120ms)
- delay10ms();
- Waite_DOUT(); //等待满刻度校准完成
- }
- /**************************************
- 名称:display100num
- 功能:将24位数据转化为对应的ASCII码并在1602显示
- 输入参数:输入000-FFFF的任意一个数
- 输出参数: 对应的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进制的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);
-
- /*显示电压的函数*/
- // s=((num*4.9869f)/16777215.0f); //电压转换
- // 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');
- /*显示电压的函数*/
-
- LCD1602_WriteCom(0xCA); //16进制的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));
- }
- //延时函数
- 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--);
- }
复制代码
主程序:
- #include <main.h>
- uchar code str1[]=" Welcome to use ";
- uchar code str2[]="AD7799 Board 509";
- uchar Q_Menu=0; //全局变量-菜单号
- uchar Q_Channel=0; //全局变量-模拟通道(取值1,2,3)
- uchar Q_Gain_ADC=0; //全局变量-通道增益(最大128,不超过256,用uchar类型)
- uint Q_Time_Settle=0; //全局变量-转换时间(因为最大480,超过256,故用uint类型)
- uchar Q_Polarity=0; //全局变量-转换极性(1单极性 0双极性)
- uchar Q_Conversion_mode=0; //全局变量-连续单次模式(1单次转换 0连续转换)
- uchar Q_enable_Conversion=0;//是否可以转换标志,为1代表可以转换,为0代表当前正在设置功能不能转换
- void main(void)
- {
-
- LCD1602_Init(); //LCD1602初始化程序
- LCD_Display_AnyStr(0x80,16,str1); //位置 长度 指针
- LCD_Display_AnyStr(0xC0,16,str2); //位置 长度 指针
- while(key1&&key2&&key3&&key4); //任意键继续
- LCD1602_WriteCom(0x01); //清屏
-
- AD7799_init_1(); //AD7799初始化,通道3,增益1,速率120ms
- AD7799_Reset(); //手动复位一次
-
- 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(); //显示基础框架
- while(1)
- {
-
- if(Check_key1()) //检测设置功能键是否长按
- {
- Display_Menu_1(); //当前显示指向CHx
- Q_Menu=1;
-
- Q_enable_Conversion=0; //如果有按键触发,将Q_enable_Conversion置0,代表正在设置
- //再次检测是否抖动并且
- while(!Q_enable_Conversion) //当还未按OK时,不能跳出while,只有按了OK,可以跳出本循环,执行显示数值
- {
- Display_Menu(Judge_Key());
- }
- }
- else //没有检测到按键
- {
- if(Q_Conversion_mode==1) //为1代表当前是单次转换,用单次转换的读取函数
- {
- //更新显示AD值及配置信息
- Display_AD((float)Single_Conversion_and_Read_AD()); //更新显示AD值及配置信息
- }
- if(Q_Conversion_mode==0) //为0代表当前是连续转换,用连续转换的读取函数
- {
- Display_AD((float)Read_AD_Value());
- }
- }
- }
- }
- uchar Check_key1(void) //检测设置功能键是否长按
- {
- uint i=0;
- while(!key1) //按下了
- {
- i++; //累加按下时间
- if(i>=40000) //时间如果足够,则返回1
- {
- LED=0; //点亮
- return 1;
- }
- }
- return 0; //若按下时间不够或者没按,返回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; //未按键或者是抖动
- }
- void Display_Menu(uchar key_Value) //根据当前界面和按键号显示菜单内容
- {
- if(key_Value==0) //如果未按或者抖动直接退出
- {
- return;
- }
- Q_enable_Conversion=0; //为0代表正在设置功能,禁止显示
-
- switch (Q_Menu) //判断当前菜单
- {
- case 0: //AD结果及设置显示界面
- {
- if(key_Value==1)
- {
- Display_Menu_1(); //当前显示指向CHx
- Q_Menu=1;
- }
- else if(key_Value==4)
- {
- //fuwei
- }
- break;
- }
- case 1: //当前显示指向CHx
- {
- if(key_Value==1)
- {
- //fanhui
- }
- else if(key_Value==2)
- {
-
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
AD7799程序C51.zip
(125.19 KB, 下载次数: 140)
|