十年专注单片机方案开发的方案公司英锐恩,分享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();
}
}