打印

pic16f877A AD转换模块C语言简易程序

[复制链接]
5307|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dream2010|  楼主 | 2008-12-30 08:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//根据硬件功能,分别显示两个不同的数据,分两次调用子程序,则显示出指定的数据。
//考虑 结合AD转换功能模块,显示转换AD之后的  数字量。综合2个功能模块编程

#include"pic.h"
#include"pic1687x.h"
unsigned char Table0[10]={0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0XF7,0XFF,0XEF};        //LED 共阴极数码管显示代码,带点。   单独RD7 显示部分。
unsigned char Table[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

const char table[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XD8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};    // 共阳极代码  595处理显示部分。
const char table0[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};


union adres                //考虑 结合AD转换功能模块,显示转换AD之后的  数字量。综合2个功能模块编程
{
int y1;
unsigned char adres1[2];
}adres2;


void ADinitial()
{
TRISA2=1;                        //TRISA1=1;
ADCON0=0B01010001;    //0X51寄存器 0B01010001选择模拟通道为010 RA2; AD工作时钟频率8分频 01;  ADGO/DONE  *  ADON; 需要AD转换ADON开启但是此刻不需要立刻转换工作 ANGO 0
ADCON1=0B10000000;    //0X80   ADFM 转换结果排列方式  ADFM=1 则高6为是0000000??????????????  转换结果放在地位。
                    //ADCON1  控制寄存器主要用于选择引脚的功能:  通用的数字信号入出的IO引脚;  模拟 量信号的输入功能;参考电压输入的功能RA5---RE0,RE1,RE2;  

PIE1=0;
PIE2=0;
ADIE=1;
PEIE=1;
}

void interrupt ADdeal()                //功能描述:中断模块必须有标志字,   如同 USART 通讯模块子函数。
{
ADIF=0;
adres2.adres1[0]=ADRESL;            //AD模块转换结果,自动存储在 两个结果寄存器中, ADRESH; ADRESL.     必须用共用提变量将其取出再进行处理,产生对应动作。
adres2.adres1[1]=ADRESH;        
  if(adres2.y1==0XCC)                        
    {                                //程序功能注释:输入部分为接地端部分; 小于3V的时候显示2, 可调电阻、电位器大于3伏特时候显示3。 0X266对应 3伏特电压,0X133对应1.5伏特
                                    //程序改变模拟输入的量,0X133,小于1.5V的时候,显示1,大于1.5V时候显示2 
      PORTD=Table0[1];
//      RC1=1;                  
    }
//------------------------------------------------------------------------
  else if(adres2.y1==0X199)                        
    {                        
                                    
      PORTD=Table0[2];
//      RC1=0;                  
    }
//----------------------------------------------------------------------------
  else if(adres2.y1==0X266)                    //注意一个常识,严重区别好 等于符号 == 及赋值号。                    
    {                        
                                    
      PORTD=Table0[3];
//      RC1=1;                  
    }
//-------------------------------------------------------------------------
  else if(adres2.y1==0X333)                        
    {                        
                                    
      PORTD=Table0[4];
//      RC1=0;                  
    }

//------------------------------------------------------------------------
  else if(adres2.y1==0X400)                        
    {                        
                                    
      PORTD=Table0[4];
//      RC1=0;                  
    }

    ADGO=1;                        //启动下一次AD采集信号。
}
//-----------------------------------------------------------------------------------------------------------------------------------------
void SYSinitial()
{
TRISD=0X00;
PORTD=0XFF;
TRISC1=0;                //RC1  为蜂鸣器 1叫。
PORTC=0X00;
}


//***************************************************************************************************************
SPIinitial()
{
    PIR1=0;

     SSPCON=0x30;
     SSPSTAT=0xc0;        

     TRISC5=0;    
     TRISC3=0;    

     TRISC2=0;        

}

//*************************************************************************************************************
void SPILED(char data)
{
SSPBUF=data;            
    do
    {
        ;
    }while(SSPIF==0) ; 
SSPIF=0;
}
//**************************************************************************************************************
void display(char data1)
{
RC2=0;                    

  SPILED(data1);

RC2=1;                    
}   

//--------------------------------------------------------------------------------------------------------------------------------
void main()
{
SYSinitial();

SPIinitial();
ADinitial();

GIE=1;
PEIE=1;
ADGO=1;                //记得各类中断 功能模块都是有固定程序格式、分使能位?标志位

 while(1)
    {
      ;
    }

}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

26

帖子

0

粉丝