📄 3800ad.c
字号:
#include <pic18.h>
#include <pic18fx490.h>
#define PORTDIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTAIT(add,bit) ((unsigned)(&add)*8+(bit))
static volatile int table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};
static volatile bit PORT_3 @ PORTBIT(PORTB,3);
static volatile bit PORT_4 @ PORTBIT(PORTB,4);
static volatile bit PORT_5 @ PORTBIT(PORTB,5);
static volatile bit PORT_1 @ PORTAIT(PORTA,3);
unsigned char temp_ad[8];
unsigned char bj0;
unsigned int led1flag=0;
//unsigned char count=0;
unsigned char adrel_ad1;
unsigned char adrel_ad12;
void interrupt adint();
void disp1();
void disp2();
void admin();
void admin2 ();
void ad1_ad();
void ad2_ad();
void delay(unsigned char ms);
void main (void)
{
admin();
admin2();
bj0=0;
ADCON0=0;
TRISA=0;
asm("clrwdt");
TRISB=0;
TRISD=0;
TRISA0=1;
TRISJ0=0;
TRISJ1=0;
TRISJ2=0;
TRISJ3=0;
TRISJ4=0;
TRISJ5=0;
TRISJ6=0;
TRISJ7=0;
INTCON=0x60;
INTCON2=0x84;
RCON=0x80;
T0CON=0xd0;
TMR0H=0xfc;
TMR0L=0x17;
ei();
do{
switch(bj0)
{
case 0: ad1_ad();break;
case 1: ad2_ad();break;
}
}while(1);
}
void admin()
{
ADCON0=0x01;
ADCON1=0x0e;
ADCON2=0xff;
//ADIF=0;
TRISA0=1;
// TRISA1=1;
//PEIE=1;
//ADIE=1;
//GIE=1;
}
void admin2()
{
ADCON0=0x05;
ADCON1=0x0d;
ADCON2=0xff;
//ADIF=0;
//TRISA0=1;
TRISA1=1;
//PEIE=1;
//ADIE=1;
//GIE=1;
}
void ad1_ad()
{unsigned char ad;
for(ad=2;ad>0;ad--)
{admin();
//ADON=1;
GODONE=1;
delay(8);
GODONE=1;
while(GODONE);
//ADIF=0;
ADFM=0;
adrel_ad1=ADRESL*10;
// adrel_ad=(adrel_ad*10)/(4-adrel_ad);
adrel_ad1=adrel_ad1*1024/5/2;}
adrel_ad1=adrel_ad1/2;
disp1();
ADON=0;TRISA0=0;
delay(6);
TRISA1=1;
GODONE=1;
TRISA3=0;
}
void disp1()
{ unsigned int i,j;
if(adrel_ad1>=52&&adrel_ad1<100)
{adrel_ad1=adrel_ad1-52;
temp_ad[2]=adrel_ad1/0x0a;
temp_ad[3]=(adrel_ad1-(temp_ad[2]*0x0a));
for(i=0;i<900;i++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x77;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[2]];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[3]];
PORTD&=0;
}
}
if(adrel_ad1==0&&adrel_ad1<52)
{ adrel_ad1=52-adrel_ad1;
temp_ad[2]=adrel_ad1/0x0a;
temp_ad[3]=(adrel_ad1-(temp_ad[2]*0x0a));
for(j=0;j<900;j++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x77;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[2]];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[3]];
PORTD&=0; }
if(adrel_ad1==0)
{
temp_ad[2]=adrel_ad1/0x0a;
temp_ad[3]=(adrel_ad1-(temp_ad[2]*0x0a));
for(j=0;j<100;j++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x77;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[2]+1];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[3]+1];
PORTD&=0; }}
}
}
void interrupt adint()
{
if(TMR0IE&&TMR0IF&&TMR0IP)
{
TMR0H=0xfc;
TMR0L=0x17;//1ms
TMR0IF=0;
led1flag ++;
if(led1flag>=20000)
{ led1flag=0;
bj0=!bj0;
}
}
}
void ad2_ad()
{ unsigned char ad;
//ADCON1=0x0e;
//ADCON2=0x24;
for(ad=2;ad>0;ad--)
{admin2();
delay(8);
ADON=1;
GODONE=1;
while(GODONE);
TRISA1=0;
ADFM=0;
adrel_ad12=ADRESL*10;
//adrel_ad=(adrel_ad*10)/(4-adrel_ad);
adrel_ad12=adrel_ad12*1024/5/2;}
adrel_ad12=adrel_ad12/2;
disp2();
delay(6);
ADON=0;
TRISA0=1;
GODONE=1;
TRISA3=1;
}
void delay(unsigned char ms)
{
while(ms--);
}
void disp2()
{ unsigned int i,j;
if(adrel_ad12>=52&&adrel_ad12<100)
{adrel_ad12=adrel_ad12-52;
temp_ad[4]=adrel_ad12/0x0a;
temp_ad[5]=(adrel_ad12-(temp_ad[4]*0x0a));
for(i=0;i<900;i++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x7c;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[4]];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[5]];
PORTD&=0;
}
}
if(adrel_ad12>=0&&adrel_ad12<52)
{ adrel_ad12=52-adrel_ad12;
temp_ad[2]=adrel_ad12/0x0a;
temp_ad[3]=(adrel_ad12-(temp_ad[2]*0x0a));
for(j=0;j<900;j++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x7c;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[4]];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[5]];
PORTD&=0; }
if(adrel_ad12==0)
{
temp_ad[2]=adrel_ad1/0x0a;
temp_ad[3]=(adrel_ad1-(temp_ad[2]*0x0a));
for(j=0;j<100;j++)
{PORT_3=0;PORT_4=0;PORT_5=1;//第5位
PORTD|=0x77;
PORTD&=0;
PORT_3=0;PORT_4=1;PORT_5=1;//第7位
PORTD=table[temp_ad[4]+1];
PORTD&=0;
PORT_3=1;PORT_4=1;PORT_5=1;//第8位
PORTD=table[temp_ad[5]+1];
PORTD&=0; }}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -