找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1692|回复: 0
收起左侧

16f877A AD转换问题

[复制链接]
ID:128363 发表于 2016-6-27 23:47 | 显示全部楼层 |阅读模式
16f877A AD转换代码如下:
#include<pic.h>              //包含内部资源预定义   
__CONFIG(0x1832);           
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡   
const char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};   
//定义常数0-9的数据表格   
void  DELAY();              //delay函数申明   
void  init();               //I/O口初始化函数申明   
void  display(int x);       //显示函数申明   
//------------------------------------------------   
  //主程序开始   
void  main()                  
{   
   int result=0x00;          //定义转换结果寄存器   
   while(1)                  //死循环   
   {   
   int i;                    //定义循环次数控制寄存器   
   result=0x00;              //转换结果清0   
   for(i=5;i>0;i--)          //求5次转换结果的平均值   
     {   
      init();                //调用初始化函数   
       GO=0X1;              //开启转换过程   
      while(GO);           //等待转换完成   
      result=result+ADRESL;  //累计转换结果   
      }   
      result=result/5;       //求5次结果的平均值   
     display(result);        //调用显示函数   
   }   
  }   
//-----------------------------------------------   
//初始化函数   
void  init()                  
  {   
   PORTA=0XFF;                  
   PORTD=0XFF;               //熄灭所有显示   
   TRISA=0X1;                //设置RA0为输入,其他为输出               
   TRISD=0X00;               //设置D口全为输出   
   ADCON1=0X8E;              //转换结果左对齐,RA0做模拟输入口,其它做普通I/O   
   ADCON0=0X41;              //系统时钟Fosc/8,选择RA0通道,允许ADC工作   
   DELAY();                  //保证采样延时   
   }   
//-----------------------------------------------   
//显示函数   
void display(int x)            
   {   
     int  bai,shi,ge,temp;   //定义4个临时变量   
     temp=x;                 //暂存AD转换的结果   
     bai=temp/0x64;          //求显示的百位   
     shi=(temp%0x64)/0xa;    //求显示的十位   
     ge=(temp%0x64)%0xa;     //求显示的个位   
     PORTD=TABLE[bai];       //查表得百位显示的代码   
     PORTA=0x37;             //RA3输出低电平,点亮百位显示   
     DELAY();                //延时一定时间,保证显示亮度   
     PORTD=TABLE[shi];       //查表得十位显示的代码   
     PORTA=0x2F;             //RA4输出低电平,点亮十位显示   
     DELAY();                //延时一定时间,保证亮度   
     PORTD=TABLE[ge];        //求个位显示的代码   
     PORTA=0x1F;             //RA5输出低电平,点亮个位显示   
     DELAY();                //延时一定时间,保证亮度   
   }   

//----------------------------------------------   
//延时程序   
void  DELAY()              //延时程序   
    {   
     int i;                 //定义整形变量   
     for(i=0x100;i--;);     //延时   
    }   


为什么显示乱码,烦请大家指点,谢谢。


QQ Photo20160627234550.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表