📄 realmain.c
字号:
#include<p18f452.h>
#include"delays.h"
#include"pwm_sound.h"
#include"ds1302.h"
#include"i2c.h"
#include"lcd.h"
#include"ds18b20.h"
#define zlg7290 0x70 // zlg7290的器件地址
#define zlgchildaddr 0x01 // zlg7290的键值寄存器地址
#define at2416 0xA0 // eeprom at2408的器件地址
#define uprestrctflag 0x01 // 温度上限符号位地址
#define downrestrctflag 0x06 // 温度下限符号位地址
#define at2416temup 0x02 // 温度上限数据地址
#define at2416temdown 0x07 // 温度上限数据地址
#define enter 32 //确认键
#define escape 38 //推出键
#define just 22 //+
#define bear 23 //-
#define lift 36 //左
#define right 34 //右
#define up 27 //上
#define down 35 //下
#define key0 0 // 0
#define key9 9 // 8
#define key_m 10 // 小数点
char choose; //菜单选择变量
char keyflag=0; //按键标志
char key=0; //键值
extern char year; //年
extern char month; //月
extern char date; //日
extern char day; //星期
extern char hour; //小时
extern char minute; //分钟
extern char second; //秒
extern char y; //十位
extern char z; //各位
void int1(void);
void int1_initial(void);
void initial_sys(void);
void int1_initial(void);
void displaywelcome(void);
void displaymainpage(void);
void displaymainpage_cursor(char);
void readkey(void);
void applydisplay(void);
void timesset(void);
void timesettemp(void);
void temperaturerestrct(void);
void temperaturerestrcttemp(void);
void replaytemperature(void);
#pragma code InterruptVectorHigh=0x08
void InterruptVectorHigh(void)
{
_asm
goto int1
_endasm
}
#pragma code
#pragma interrupt int1
void int1(void)
{
keyflag=1;
key=read_i2c_date(zlg7290,zlgchildaddr )-1; //读取键值
INTCON3bits.INT1IF=0; //清中断标志
}
void main()
{
initial_sys();
int1_initial();
lcd_initial();
pwm_initial();
displaywelcome(); //显示欢迎界面面
initial_i2c();
readkey();
while(key!=enter); //等待按键
choose=2;
while(1)
{
clearlcd(); //清屏
clearlcd();
displaymainpage(); //显示主菜单
displaymainpage_cursor(choose);
while(1)
{
readkey();
if(key==up)
{ if (choose==1) { choose=4; displaymainpage_cursor(choose);}
else { --choose; displaymainpage_cursor(choose);}
}
if(key==down)
{ if (choose==4) { choose=1; displaymainpage_cursor(choose);}
else { ++choose; displaymainpage_cursor(choose);}
}
if(key==enter) break;
}
switch(choose)
{
case 1: applydisplay(); break;
case 2: timesset(); break;
case 3: temperaturerestrct(); break;
case 4: replaytemperature(); break;
}
}
writecmdlcd(0x0f); // 光标开
}
/*****************************************************************************
******函 数 名 称 : initial_sys()
******函 数 功 能 : 系统初始化
******输 入 :
******输 出 :
******************************************************************************/
void initial_sys()
{
INTCON=0x00; //关中断
ADCON1=0b00000110; //RA端口设定为数字
PIE1=0;
PIE2=0;
}
/*****************************************************************************
******函 数 名 称 : initial_sys()
******函 数 功 能 : int1电平变化中断
******输 入 :
******输 出 :
******************************************************************************/
void int1_initial()
{
INTCON2 &=0xDF; // INT1=0 下降沿的时候中断
RCONbits.IPEN=1; // 使能中断优先级
INTCON=0XC0; // GIE=1,PEIE=1
INTCON3bits.INT1IP=1; //高优先级
INTCON3bits.INT1IF=0; //未发生int1中断
INTCON3bits.INT1IE=1; //使能int1外部引脚中断
TRISBbits.TRISB1=1; // INT1 (RB1)设置为输入
}
/*****************************************************************************
******函 数 名 称 : readkey(void)
******函 数 功 能 : 读键值函数
******输 入 :
******输 出 :
******************************************************************************/
void readkey(void)
{
while(!keyflag);
keyflag=0;
}
/*****************************************************************************
******函 数 名 称 : displaywelcome(void)
******函 数 功 能 : 进入欢迎界面
******输 入 :
******输 出 :
******************************************************************************/
void displaywelcome(void)
{
char welcome1[]="数字温度计";
char welcome2[]="制作:";
char welcome3[]="陈强";
char welcome4[]="董向远";
char welcome5[]="张宁";
char welcome6[]="2008年 6月";
clearlcd();
lcd_set_cursor(1,3);
putslcd(welcome1);
lcd_set_cursor(2,1);
putslcd(welcome2);
lcd_set_cursor(2,6);
putslcd(welcome3);
lcd_set_cursor(3,6);
putslcd(welcome4);
lcd_set_cursor(3,3);
putslcd(welcome5);
lcd_set_cursor(4,1);
putslcd(welcome6);
}
/*****************************************************************************
******函 数 名 称 : displaymainpage()
******函 数 功 能 :
******输 入 :
******输 出 :
******************************************************************************/
void displaymainpage()
{
char mainpage1[]="数字时间显示";
char mainpage2[]="系统时间设定";
char mainpage3[]="温度限制设定";
char mainpage4[]="历史温度回显";
lcd_set_cursor(1,2);
putslcd(mainpage1);
lcd_set_cursor(2,2);
putslcd(mainpage2);
lcd_set_cursor(3,2);
putslcd(mainpage3);
lcd_set_cursor(4,2);
putslcd(mainpage4);
}
/*****************************************************************************
******函 数 名 称 : displaymainpage_cursor(unsigned x)
******函 数 功 能 :
******输 入 :
******输 出 :
******************************************************************************/
void displaymainpage_cursor(char x)
{
char cursorblock[]=" ";
switch(x)
{
case 1:{
lcd_set_cursor(1,1); writedatalcd( 0x10);
lcd_set_cursor(2,1); putslcd(cursorblock);
lcd_set_cursor(3,1); putslcd(cursorblock);
lcd_set_cursor(4,1); putslcd(cursorblock);
break;
}
case 2:{
lcd_set_cursor(1,1); putslcd(cursorblock);
lcd_set_cursor(2,1); writedatalcd( 0x10);
lcd_set_cursor(3,1); putslcd(cursorblock);
lcd_set_cursor(4,1); putslcd(cursorblock);
break;
}
case 3:{
lcd_set_cursor(1,1); putslcd(cursorblock);
lcd_set_cursor(2,1); putslcd(cursorblock);
lcd_set_cursor(3,1); writedatalcd( 0x10);
lcd_set_cursor(4,1); putslcd(cursorblock);
break;
}
case 4:{
lcd_set_cursor(1,1); putslcd(cursorblock);
lcd_set_cursor(2,1); putslcd(cursorblock);
lcd_set_cursor(3,1); putslcd(cursorblock);
lcd_set_cursor(4,1); writedatalcd( 0x10);
break;
}
}
}
/*****************************************************************************
******函 数 名 称 : applydisplay()
******函 数 功 能 : 进入应用界面
******输 入 :
******输 出 :
******************************************************************************/
void applydisplay(void)
{
char k=0; //存储总数设定变量
int i=0; //存储时间间隔控制
char tempdisplay1[]="数字温度显示";
char tempdisplay2[]="温度";
char tempdisplay3[]="时刻:";
clearlcd(); //清屏
lcd_set_cursor(1,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -