📄 max.c
字号:
#include <reg52.h>
#include <intrins.h>
#include<absacc.h>
#include "key.h"
#include "led.h"
extern uchar key;//存键值
extern bit key_flag;//键按下标志
extern uchar led_buf[];//显示缓冲区
#define nop8() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
#define IN_0_5_BASE 1.220703 // 5/4096,量程为0-5v每单位电压大小
#define IN_0_10_BASE 2.441406 // 10/4096 0-10v
#define IN_N5_5_BASE 2.441406 // 10/4096 -5v-5v
#define IN_N10_10_BASE 4.882813 // 20/4096 -10v-10v
//_cs HBEN
#define ADCCOM XBYTE[0x7fff] //0 1 控制命令字地址
#define ADLO XBYTE[0x3fff] //0 0 低8位地址,
#define ADHI XBYTE[0x7Fff] //0 1 高四位地址
//内部时钟 内部采样 0 to 5 通道0
uchar channel=0; //PD1 PD0 ACQMOD RNG BIP A2 A1 A0
uchar volatile bdata command_byte=0x40; //0 1 0 0 0 0 0 0
sbit PD1=command_byte^7;
sbit PD0=command_byte^6;
sbit ACQMOD=command_byte^5;
sbit RNG=command_byte^4;
sbit BIP=command_byte^3;
//###################################################
//sbit _WR=P3^6;
//sbit _RD=P3^7;
//sbit CS=P2^7; //引脚连接
//sbit HBEN=P2^6;
//###################################################
void main(void)
{
uchar msb,lsb;
uint volatile data volt;
uchar input_mode;
CS=HBEN=1;
key_init();
led_buf[7]=channel;
led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG;
//BIP RNG INPUT RANGE (V) 显示
// 0 0 0 to 5 a
// 0 1 0 to 10 b
// 1 0 ±5 c
// 1 1 ±10 d
led_update();
while(1)
{
if(_testbit_(key_flag))
{
if(read_key())//读按键
{
if(key==KEY_B)
{
ADCCOM=command_byte+channel;
nop8();//等待8us让其完成转换
ADCCOM=command_byte+channel; //让其测三次之后就可以得到稳定的电压了。
nop8();//等待8us让其完成转换
ADCCOM=command_byte+channel;
nop8();//等待8us让其完成转换
msb=ADHI&0x0f;
lsb=ADLO;
volt=msb*256+lsb;
lclear(0,5);
input_mode=((uchar)BIP<<1)+(uchar)RNG;//由量程来确定如何处理数据
switch(input_mode)
{
case 0:
volt*=IN_0_5_BASE;
break;
case 1:
volt*=IN_0_10_BASE;
break;
case 2:
volt*=IN_N5_5_BASE;
if(volt>5000)//如是为负电压
{
led_buf[0]=LED_NEG;
volt=10000-volt;
}
else
led_buf[0]=LED_BLANK;//显示负号
break;
case 3:
volt*=IN_N10_10_BASE;
if(volt>10000)//如是为负电压
{
led_buf[0]=LED_NEG;
volt=20000-volt;
}
else
led_buf[0]=LED_BLANK;//显示负号
break;
}
if(volt>9999)
lprinti(volt,0x35,1);//格式输出
else
{
lprinti(volt,0x34,2);//格式输出
}
led_update();
}
else if(key==KEY_C)//按键选择量程为0-5v
{
BIP=0;
RNG=0;
}
else if(key==KEY_D)//按键选择量程为0-10v
{
BIP=0;
RNG=1;
}
else if(key==KEY_E)//按键选择量程为-5-5v
{
BIP=1;
RNG=0;
}
else if(key==KEY_F)//按键选择量程为-10-10v
{
BIP=1;
RNG=1;
}
else if(key<KEY_8)//选择通道0~7
{
channel=key;
led_buf[7]=channel;//通道送显
}
led_buf[6]=12+((uchar)BIP<<1)+(uchar)RNG;//量程送显
led_update();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -