技术热线: 4007-888-234

MCD2-DEMO上1路8位单片机AD显示C语言例子

更新时间: 2019-03-23
阅读量:1790

十年专注单片机方案开发的方案公司英锐恩,分享MCD2-DEMO上1路8位AD显示C语言例子。英锐恩现提供服务产品涉及主控芯片:8位单片机、16位单片机、32位单片机及各类运算放大器等。

/*====================================================================
* PIC16F877A--10BIT AD
*2005 4 19
* HQGBOY
=====================================================================*/
#include  

 

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

 

//数码管字符表
const uchar  led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

 

uchar ADResult0;

 

void display();
void delay(uint);
void delayus();
//系统各I/O口初始化子程序
void  initial()

{
PORTA=0x00;
PORTC=0x00;

TRISA=0X01;
TRISC=0X00;    //
ADCON0=0x81;   //选择A/D通道为RA0,打开A/D转换器
           //在工作状态,且使A/D转换时钟为32tosc
ADCON1=0X0E;   //转换结果右移,及ADRESH寄存器的高6位为"0"
                    //且把RA0口设置为模拟量输入方式
}

//延时子程序
void  delay(uint x)
{
uint j;
while(x--)
{
for(j=5535;--j;);
}
}
//延时子程序
void  delayus()
{
uchar j;

 

for(j=5000;--j;);

 

}
//显示初始化子程序
void initdis( )
{

 

PORTA=0xFB;    //选通数码管4
PORTC=0xC0;

PORTA=0xDF;    //选通数码管5
PORTC=0xC0;

PORTA=0xEF;    //选通数码管6

PORTC=0xC0;
}
//读AD值
void ADReadFunc()
{
ADCON0=0x81;
delayus();
ADGO=1;
while(ADGO);
ADResult0=ADRESH;
}
//显示子程序
void display()
{
uchar ADData1,ADData2,ADData3;
PORTC=0XFF;

ADData1=ADResult0/100;  
PORTC=led[ADData1];
PORTA=0xfB;  //选通数码管4
delayus();

ADData2=(ADResult0-ADData1*100)/10;   
PORTC=led[ADData2];
PORTA=0xDF; //选通数码管5
   delayus();

 


ADData3=ADResult0-ADData1*100-ADData2*10;
PORTC=led[ADData3];
PORTA=0xEF;    //选通数码管6
delayus();

 

}

 


//主程序
main()
{
initial();
initdis( );     //系统各I/O口初始化

 

while(1)
{
ADReadFunc();
display();
}
}