作业帮 > 综合 > 作业

用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊?急求使用avr电路与程序,谢谢

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/29 13:06:26
用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊?急求使用avr电路与程序,谢谢
用发光二极管和光敏电阻怎样组成一组光电开关啊,能在什么环境下使用啊?急求使用avr电路与程序,谢谢
常用的是将光敏电阻放在三极管基极,和另一上拉电阻分压,根据光线的强弱不同可导通和接至.如果用AVR单片机的话感觉有点点浪费,不过还是给你设计下下,用的mega8:#include <iom8v.h>#include <macros.h>#define  uchar    unsigned char#define  uint     unsigned int//uchar  adc_time  = 0 ;                        //定义累加时间uchar  adc_num   = 0 ;                        //用于AD通道选择的计数uchar  vlo_eer   = 0 ;                        //用于检测光敏电阻的电灯点unsigned int voltage;unsigned int voltage1;//端口初始化void port_init(void){ PORTB = 0x00; DDRB  = 0xFF; PORTC = 0xFE; DDRC  = 0xFE; PORTD = 0x00; DDRD  = 0xFF;}// 定时器0分频: 8// 定时初值   : 100uSec// 真实定时值 : 100.000uSec (0.0%)void timer0_init(void){ TCCR0  = 0x00;//停止定时器 TCNT0  = 0x9C;//初始值 //OCR0   = 0x9B;//匹配值 TIMSK |= 0x01;//中断允许 TCCR0  = 0x02;//启动定时器}#pragma interrupt_handler timer0_ovf_isr:10void timer0_ovf_isr(void){    TCNT0 = 0x9C;                                  //重装100us定时初值   adc_time++;    if(adc_time==10)                               //控制AD转换的速度   {        adc_time=0;                                 //清零AD计数时间  ADCSRA=0xEE;                                //打开AD使能  ADMUX = ADC0 ;                              //选择ADC0通道     else   {      ADCSRA= 0x00;                               //关闭AD转换,这样做的目的是防止   }                                              //AD转换过频而导致系统堵塞}// ADC初始化// 转换时间  : 52uSvoid adc_init(void){ //adc转换初始化 ADCSRA= 0x00;//禁止AD转换 SFIOR |= 0x00; ACSR= 0x80; //禁止模拟比较器}unsigned int adc_calc(void){   //计算实际电压   unsigned long value=0;   unsigned int voltage1=0;          //电压单位为(mV)   value=ADCL;                 //首先读低位   value|=(int)ADCH << 8;            //然后读高位   voltage1=(value*5000)/1023;   return voltage1;}    #pragma interrupt_handler adc_isr:12void adc_isr(void){ //转换完成后中断处理,对电压值进行区间划分voltage=adc_calc();voltage=adc_calc(); if(voltage<XXX){vol_eer=0;}    //欠压if(vol_eer>XXX){vol_eer=1;}    //过压        //其中XXX是你自己测试的电压值,什么时候亮LED就看他了.        if(vlo_eer==1) LED1_ON;        else  LED1_OF;                                  }//初始化服务函数void init_devices(void){ CLI();                //禁止中断 port_init(); timer0_init(); adc_init(); MCUCR  = 0x00; MCUCSR = 0x80;//禁止JTAG GICR   = 0x00; SEI();                //开中断}void main(void){   init_devices();   while(1)   {      ;                   }}