超级版主
 
主题
帖子
积分14436
阅读权限150
注册时间2008-11-13
最后登录1970-1-1
在线时间 小时
|
现在板上电压测量范围究竟是多少?完全可用以下程序验证!
说明: AD转换结果 =0-1023
可用一稳压电源代替电池。从3.5V起调,当显示为1023时,稳压电源上的电压就是本板的测量电压范围。
//编译器:MPLAB IDE v8.83
//倪大德 12。3。7
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
/*
led
a_
f| |b
|g_|
e| |c
|__|
d .h
*/
const uchar table[]={ 0x3f,0x0a,0x57,0x4f,0x6a,0x6d,0x7d,0x0b,0x7f,0x6f,0X00};
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void init()
{
//配置模拟/数字IO口(手册P148)
ANSEL=0B00011010; //AN1
TRISA=0B00011010; //AN1
TRISD=0B00000000;
PORTD=0B00000000;
TRISB=0B01111000; //B3-B6 键盘 设置为输入
PORTB=0B01111001; //B3-B6键盘设置高电平,位码b0设置为高电平
TRISC=0B00000000; //C6-C7 位码1,2
PORTC=0B11000000; //位码1,2设置为高电平
TRISE=0B00000000;
PORTE=0B00000100; //位码1,2设置为高电平
ADCON0=0B10100101; //
delay(10); //稳定ADC电源
ADCON1=0B00010000;
RA6=1; //使能基准电压
}
//===================================
uint get_ad()
{
uint adval;
GO_DONE=1;
while(GO_DONE);
adval=ADRESH;//00000000 00000011
adval=adval<<8|ADRESL;//00000011 11111111
asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP");
return (adval);
}
//=======================================
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
PORTD=table[num1];//显示第一个数码管
RC6=0;delay(2);RC6=1;PORTD=0B00000000;
PORTD=table[num2]|0X80;//显示第二个数码管
RE2=0;delay(2);RE2=1;PORTD=0B00000000;
PORTD=table[num3];//显示第三个数码管
RB0=0;delay(2);RB0=1;PORTD=0B00000000;
PORTD=table[num4];//显示第四个数码管
RC7=0;delay(2);RC7=1;PORTD=0B00000000;
}
//====================================
void main()
{ //double advalf;
uint lednum;
uchar a1,a2,a3,a4;
init();
delay(100);
while(1)
{
lednum=get_ad();
a1=lednum/1000;
a2=lednum%1000/100;
a3=lednum%100/10;
a4=lednum%10;
disp(a1,a2,a3,a4);
delay(10);
}
} |
|