bbxyliyang01 发表于 2023-8-26 15:31:00

AVR128 智能风扇设计-proteus-程序

AVR128 智能风扇设计-proteus-程序一、系统方案模拟的电风扇的工作状态有3种:自然风、常风及睡眠风。使用三个按键S1-S3设置自然风、常风及睡眠风。
再使用两个按键S4和S5,S4用于定时电风扇定时时间长短的设置,每按一次S4键,定时时间增加10秒,最长60秒,超过60秒回到0秒重新开始。按下S5键表示定时倒计时开始。
按下相应的风类键,使用处理器ATmega128定时/计数器的PWM功能生成不同占空比的1KHz的PWM信号来驱动直流电动机MOTOR-DC(模拟电风扇电机)。“自然风”:生成占空比为30%的PWM信号,“睡眠风”: 生成占空比为20%的PWM信号,“常风”:生成占空比为70%的PWM信号.
使用8LED数码管或液晶显示屏显示电风扇的工作状态、动态显示使用电风扇的定时功能时的剩余定时时间。使用8LED数码管和液晶显示屏LM041L时,“自然风”显示“1”、“常风”显示“2”及“睡眠风”显示“3”,使用12864液晶显示屏LGM12641BS1R LM3228时使用中文显示。 二、硬件设计原理图如下: 三、单片机软件设计1、首先是系统初始化        DDRA = 0xFF;   PORTA= 0xFF; DDRC = 0xFF;   PORTC= 0xFF;   DDRF = 0x00;   PORTF= 0xFF;      DDRE&= 0xFC;   PORTE= 0x03;    //init_devices();   timer0_pwm();    // 初始化PWM   timer1_init();   // 初始化定时器LCD_init();// LCD12864_init(); // 初始化LCD   OCR0 = 0X46;      // OCR0/0XFF=OCR0/256,占空比可调 //TCCR0=0X0A;   // PWM关闭2、液晶显示程序void LCD_write_com(unsigned char com) {                RS_CLR;        RW_CLR;        EN_SET;        Data_IO = com;        delay_nms(5);        EN_CLR;}//***********************************************************************//        显示屏数据写入函数//*********************************************************************** void LCD_write_data(unsigned char data) {        RS_SET;        RW_CLR;        EN_SET;        Data_IO = data;        delay_nms(5);        EN_CLR;}3、按键程序    if((PINF&0x01)==0x00)       //自然风按下           {               Mode = 1;                   OCR0 = 0X46;            //占空比 30%           }            if((PINF&0x02)==0x00)       //常风按下           {               Mode = 3;                   OCR0 = 0X26;            //占空比 20%           }            if((PINF&0x04)==0x00)       //睡眠风按下           {               Mode = 2;                   OCR0 = 0XA6;            //占空比 70%           }                              if((PINF&0x08)==0x00)       //设置当前时间           {              delay(10);                   if((PINF&0x08)==0x00)    //设置当前时间              {                    Timer = Timer+10;                    while(!(PINF&0x08));   //按键释放                        if(Timer > 60)                        {                           Timer = 0;                        }                }           } 4、核心算法程序   #pragma interrupt_handler timer1:15/*定时器溢出中断向量标号*/ void timer1(void){   static u16 Tmr = 0;   TCNT1H=(65536-1000)/256;   TCNT1L=(65536-1000)%256; // 定时4ms         if(++Tmr >= 250)   {      Tmr= 0;                if(Start == 1) // 启动标志位启动                {                if(--Timer > 60)                {                       Timer = 0;                           Start = 0;                }                }   }    }四、proteus仿真设计Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

duoboss 发表于 2023-11-7 11:00:12

作者可以求一下源码吗,学习:lol
页: [1]
查看完整版本: AVR128 智能风扇设计-proteus-程序