📄 lcd.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 + -