i PIC通过AD使用光敏电阻-嵌入式MCU技术-电子人社区 -

电子人社区

 找回密码
 立即注册
今日 : 0|主题 : 4177|排名 : 314 
打印 上一主题 下一主题

PIC通过AD使用光敏电阻

发表于 2019-1-9 15:54:58 | 88110 只看该作者 回帖奖励 |倒序浏览 |阅读模式

[复制链接]
发表于 2019-1-9 15:54:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电子人社区网讯:   /*************通过光敏电阻输入模拟信号,得到相应的数字信号,通过数字量的大
  本文引用地址: http://www.21ic.com/app/mcu/201812/765687.htm
  小设置阈值,通过阈值可以控制灯泡等设备的开关************************/
  /***模拟信号输入口为AN0,模拟电压的产生由外围电路搭建,参考电压为内部的VCC和VSS***/
  /**************通过串行口连接上位机显示转换后的数字信号************************/
  /*********************主程序*********************************/
  #include "p18f4620.h"
  //初始化,可不需要
  void initial()
  {
  INTCON = 0x00; //位7~0:关总中断
  ADCON1 = 0x07; //设置数字输入输出口
  PIE1 = 0;
  PIE2 = 0;
  }
  //串行口初始化
  void EUSART_Init()
  {
  TXSTA = 0xA4; //选择异步高速方式传输8位数据
  RCSTA = 0x90; //允许串行口工作
  BAUDCON =0x00; //
  TRISC = TRISC|0x80; //将RC7(RX)设置为输入方式
  TRISC = TRISC&0xBF; //将RC6(TX)设置为输出方式
  SPBRG = 25; //4MHZ晶振时波特率设置为9600
  }
  //通过串口发送数据
  void send_ch(unsigned char d)
  {
  PIR1bits.TXIF = 0;
  TXREG = d;
  Nop();
  while(TXSTAbits.TRMT == 0); //等待发送完毕
  }
  //AD初始化函数
  void AD_Init(void)
  {
  ADCON1 = 0x0E; //参考电压为VCC~VSS,配置模拟输入口为AN0和AN1
  ADCON2 = 0xA6; //AD结果右对齐,采样时间8个TAD,转换时钟选择为Fos/64
  ADCON0 = 1; //启动AD
  PIR1bits.ADIF = 0; //
  TRISAbits.TRISA0 = 1; //设置模拟输入口RA0和RA1为输入方式
  TRISAbits.TRISA1 = 0;
  }
  //读取指定通道的AD采集数据
  unsigned int Read_AD(unsigned char ch)
  {
  unsigned int adtemp;
  PIR1bits.ADIF = 0;
  ADCON0 = (ch
  ADCON0bits.GO = 1;
  while(ADCON0bits.GO); //等待转换的结束
  PIR1bits.ADIF = 0;
  // adtemp = ADRESL + (ADRESH
  adtemp = ADRESH; //读取AD的转换值
  adtemp = (adtemp
  return adtemp;
  }
  //软件延时函数
  void wait(unsigned char t)
  {
  unsigned char i;
  unsigned int j;

  for(i=0;i  for(j=0;j
  }
  //主控制函数
  void main()
  {
  unsigned int adtempdat;
  // TRISAbits.TRISA0=0;
  // LATAbits.LATA0=1;
  initial();
  EUSART_Init();
  AD_Init();
  while(1)
  {
  adtempdat = Read_AD(0); //选择通道0
  send_ch(0xFF); //发送间隔标志
  send_ch(adtempdat); //发送数字低八位
  send_ch(adtempdat >> 8); //发送数字高八位
  if(adtempdat
  {
  LATAbits.LATA1 = 1;//如果亮度小于阈值,开灯,否则关灯
  }
  else
  {
  LATAbits.LATA1 = 0;
  }
  Nop();
  wait(10);
  }
  }

来源:网络转载

 

                                                   转载请注明:电子人社区

0条回复
跳转到指定楼层

发表回复

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

本版积分规则

QQ|电子人物联网  

Copyright 2013 最新最精彩-社区论坛 版权所有 All Rights Reserved.

QQ|电子人物联网  

GMT+8, 2024-5-2 02:46 , Processed in 0.103282 second(s), 33 queries.

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