十年專注單片機方案開發的方案公司英銳恩,分享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();
}
}