📄 ad2.c
字号:
/***************************************************/
/*内部ADC测试电压演示程序 */
/*目标器件:PIC16F877A */
/*晶振:4.0MHZ */
/*编译环境:MPLAB V8.00 */
/****************************************************/
//包含头文件
#include<pic.h>
/****************************************************************************
共阴LED段码表
****************************************************************************/
const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};
/***************************************************************************
函数功能:数码管延时子程序
入口参数:
出口参数:
***************************************************************************/
void DELAY()
{
int i; //定义整形变量
for(i=200;i--;); //延时
}
/****************************************************************************
函数功能:数码管延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(char x,char y)
{
char z;
do{
z=y;
do{;}while(--z);
}while(--x);
}
/****************************************************************************
函数功能:数码管显示子程序
入口参数:x
出口参数:
****************************************************************************/
void display(int x)
{
int ad1,ad2,ad3,ad4; //定义4个AD转换临时变量
float temp;
temp=x*5.0/1023; //暂存AD转换的结果 10位AD 2的10次方=1024
ad1=(int)temp;
ad2=((int)(temp*10)-ad1*10);
ad3=((int)(temp*100)-ad1*100-ad2*10);
ad4=((int)(temp*1000)-ad1*1000-ad2*100-ad3*10);
PORTC=TABLE[ad1]&0X7F; //查表得个位及小数点显示的代码 B 1110 1111
PORTA=0xEF;
delay(7,80);
PORTA=0xFC;
PORTC=TABLE[ad2]; //查表得小数点后第1位显示的代码 B 1101 1111
PORTA=0xDF;
delay(7,80);
PORTA=0xFC;
PORTC=TABLE[ad3]; //查表得小数点后第2位显示的代码 B 1111 1011
PORTA=0xFB;
delay(7,80);
PORTA=0xFC;
PORTC=TABLE[ad4]; //查表得小数点后第3位显示的代码 B1111 0111
PORTA=0xF7;
delay(7,80); //延时一定时间,保证显示亮度
PORTA=0xFC;
}
/****************************************************************************
函数功能:初始化函数子程序
入口参数:
出口参数:
****************************************************************************/
void init()
{
PORTA=0XFF;
PORTC=0XFF; //熄灭所有显示
TRISA=0X01; //设置RA0为输入,其他为输出
TRISC=0X00; //设置C口全为输出
ADCON1=0X8E; //转换结果左对齐,RA0做模拟输入口,其它做普通I/O
ADCON0=0X41; //系统时钟Fosc/8,选择RA0通道,允许ADC工作
DELAY(); //保证采样延时
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main()
{
int result=0x00;
while(1) //死循环
{
int i;
result=0x00; //转换结果清0
for(i=5;i>0;i--)
{
init(); //调用初始化函数
ADGO=0X1; //开启转换过程
while(ADGO); //等待转换完成
result=result+ADRESL+ADRESH*256;
//累计转换结果
}
result=result/5; //求5次结果的平均值
display(result); //调用显示函数
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -