打印

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

[复制链接]
493|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AVR128 智能风扇设计-proteus-程序
[size=12.0000pt]一、系统方案
模拟的电风扇的工作状态有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;
                  }
                }
   }
   
}
[size=12.0000pt]四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

使用特权

评论回复

相关帖子

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

本版积分规则

21

主题

28

帖子

0

粉丝