⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 一款恒温控制器,已用在老化室工作半年多,M16+10K热敏电阻...
💻 C
字号:
#include <mega16.h>
#include <delay.h> 
#include <char_tab.h>
#include <Lcd_display.h>
#include <Ntc_tab.h>
#include <ADC.h>
#include <Timer.h> 

unsigned int Seconds=0;
unsigned int Minuts=0;

#define Buzzer PORTB.6               //嘀一声报警
void tone(unsigned int Buzzer_time)  //X定义为报警时间的长短
{
unsigned int i;
  for(i=0;i<Buzzer_time;i++)
   {      
     Buzzer=~Buzzer;
     delay_us(250);
     }
}  

void Set_temp_display(unsigned char Set_temp_view)
{
Written_char(0,9,(Set_temp_view/10));
Written_char(0,10,(Set_temp_view%10));
}

#define key_up      PIND.0
#define key_down    PIND.1
#define key_stop    PIND.2

unsigned char Set_temp=40; 

void Key_scan(void)
{ 
 if(key_up==0) 
   {
   delay_ms(35);     //加
   if(key_up==0)
     {
     tone(200);       //报警
     Set_temp=Set_temp+1;
       if(Set_temp>70) Set_temp=0;
      }
   }
   
  if((key_down==0)&&(Set_temp>0)) 
    {
    delay_ms(35); 
    if(key_down==0)    //减
     {
     tone(200);        //报警
     Set_temp--;
       if(Set_temp<=0) Set_temp=0;
      }
    }
    
 if(key_stop==0) 
   {
    delay_ms(35);
    if(key_stop==0)
     { 
      tone(1500);       //报警
     //delay_stop();
      }
    }
      
 Set_temp_display(Set_temp);
}
 
void time_to_display(unsigned int Work_time)   //运行时间
{
Written_char(1,5,(Work_time/1000));
Written_char(1,6,(Work_time%1000/100));
Written_char(1,7,(Work_time%1000%100/10));
Written_char(1,8,(Work_time%1000%100%10));
}

#define Control_delay PORTB.7 

unsigned char state_delay=0;

void Set_temp_compare(void)
{
  if((Set_temp+1)>Search_tab()&&(state_delay==0))
    { 
     delay_ms(100);  //防止继电器的抖动
     Control_delay=0;
     delay_ms(300);  //防止继电器的抖动
     state_delay=1;
     }
  else if((Set_temp+1)<=Search_tab()&&(state_delay==1))
    { 
     delay_ms(100);  //防止继电器的抖动
     Control_delay=1;
     delay_ms(300);  //防止继电器的抖动
     state_delay=0;
     }
}

void Display_juck(void)
{ 
if(key_up==0) 
 {
   delay_ms(30);      
   if(key_up==0)
     {
     start_3();       //显示设计者名字
     tone(200);       //报警
     delay_ms(1000);
      }
  }
}

void main(void)   //主函数
{
DDRA=0xFE;  
PORTA=0xFE;       //PORT初始化

DDRB=0xff; 
PORTB=0x10;

DDRC=0xff;
PORTC=0x00;        

DDRD=0xf8;       // PIND.0 PIND.1 PIND.2输入
PORTD=0xff;      //内部上拉无效 

Time_init();     //定时器初始化

Adc_init();      //ADC初始化

#asm("sei")      //使能全局中断

POWER_EN=1;      //stand moudle,all output to gnd level
POWER_EN=0;      //OPEN POWER FOR IC

light=1;         //LCD's light open   

Lcd_inint();     //LCD ininteally

tone(400);       //报警
delay_ms(1000);
 
display_clear();

start_1();          //开机字幕1,"恒温控制器"
delay_ms(1000); 
//display_clear();  //清除LCD的所有显示

start_2();          //开机字幕2,"厦门顶尖电子"
delay_ms(1000);

Display_juck();
//delay_ms(2000);

display_clear();  //清除LCD的所有显示
start_display();  //固定LCD某些不变字符的显示
//delay_ms(1000);

while(1)          
 { 
 if(time_Adc_ok)    //ADC转换
  {
   time_Adc_ok=0;   
   display_temp();
  }
 if( time_1s_ok)    //计时器
    { 
     time_1s_ok=0;
     Seconds++;
     if(Seconds>=60) 
      {
       Seconds=0;
       Minuts++;
       }
     time_to_display(Minuts);
    }
 Key_scan();
 Set_temp_compare();
  }  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -