?? 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 + -