?? all.c
字號:
{
ISP_ADDRL=0x00+i; //送地址低字節,均從每個扇區的起始地址開始
ISP_TRIG=0x46;
ISP_TRIG=0xB9; //觸發ISP指令
Delay_short(1); //短暫延時
ID[Num][i]=ISP_DATA; //讀一個字節
}
ISP_CONTR=0x00; //關ISP功能
}
/*ISP寫DS18B20 ID程序 */
/*入口參數:1,DS18b20編號(0-4) */
/*全局變量:DS18B20的ID號存儲區:ID[5][8] */
/*功 能:將某個DS18B20的8字節ID寫入某個扇區內(扇區必須為空)*/
void ISP_Write8(unsigned char Num)
{
unsigned char i;
ISP_CONTR=0x81; //允許ISP功能,并配制等待時間
ISP_CMD=ISP_WeiteByte ; //送ISP字節寫指令
ISP_ADDRH=0x20+Num*0x02; //送地址高字節
for(i=0;i<8;i++) //寫8字節
{
ISP_ADDRL=0x00+i; //送地址低字節,均從每個扇區的起始地址開始
ISP_DATA=ID[Num][i]; //送待寫入的一個字節
ISP_TRIG=0x46;
ISP_TRIG=0xB9; //觸發ISP指令
Delay_short(1); //短暫延時
}
ISP_CONTR=0x00; //關ISP功能
}
/*ISP擦除扇區指令 */
/*入口參數:對應扇區的器件號(0-4) */
/*全局變量:無 */
/*功 能:將某個扇區擦除 */
void ISP_Eraser(unsigned char Num)
{
ISP_CONTR=0x81; //允許ISP功能,并配制等待時間
ISP_CMD=ISP_Erase ; //送ISP擦除扇區指令
ISP_ADDRH=0x20+Num*0x02; //送地址高字節
ISP_ADDRL=0x00; //送地址低字節,均從每個扇區的起始地址開始
ISP_TRIG=0x46;
ISP_TRIG=0xB9; //觸發ISP指令
Delay_short(1); //短暫延時
ISP_CONTR=0x00; //關ISP功能
}
////////////////////////////////////////////////
/******************程序預定義******************/
////////////////////////////////////////////////
void Auto_Mode(void); //自動模式程序
void Hand_Mode(viod); //手動模式程序
void ID_Mode(void); //顯示ID模式程序
void Alarm_Set(void); //報警設置程序
void Menu_Function(void);//菜單處理功能
/****自動切換溫度顯示模式程序****/
/*功能:自動從切換顯示溫度 */
void Auto_Mode()
{ unsigned char i;
LCD_Initial();
GotoXY(12,1);
Print("Auto");
while(1)
{
for(i=0;i<5;i++)
{
DS_ReadTemp(i); //循環顯示溫度和TH,TL
TempDisp(i);
ThTlDisp(i,2);
Alarm();
Menu_Function(); //菜單處理
Delay_long(200); //延時
Delay_long(200);
Delay_long(200);
Delay_long(200);
}
}
}
/****手動切換溫度顯示模式程序****/
/*功能:按Down鍵切換顯示 */
void Hand_Mode()
{
LCD_Initial();
GotoXY(0,1);
Print("Hand Mode");
GotoXY(9,2);
Print("S U D Q");
while(1) //主菜單循環
{
unsigned char Key1=Key_scan();
if(Key1==SET) //如果按SET鍵
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //釋放后操作
{
unsigned char i=0;
LCD_Initial();
GotoXY(12,1);
Print("Hand"); //顯示模式
while(1)
{
unsigned char Key2=Key_scan();
DS_ReadTemp(i);
TempDisp(i); //顯示NO.i的溫度
ThTlDisp(i,2);
Alarm();
if(Key2==DOWN) //如果按DOWN鍵
{
Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //按鍵抬起后執行
{
i=i+1; //指針加1
if(i>4)
i=0;
}
}
else if(Key2==QUIT) //按QUIT返回自動模式
{Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
}
else if(Key1==DOWN)
{Delay_long(50);
if(Key_scan()==0)
{
ID_Mode();
}
}
else if(Key1==UP)
{Delay_long(50);
if(Key_scan()==0)
{
Alarm_Set();
}
}
else if(Key1==QUIT)
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //釋放后操作
{
Auto_Mode();
}
}
}
}
/****顯示DS18B20序列號模式程序****/
/*功能:顯示或替換器件ID */
void ID_Mode(void)
{
LCD_Initial();
GotoXY(0,1);
Print(" ID Mode ");
GotoXY(9,2);
Print("S U D Q") ;
while(1) //主菜單循環
{
unsigned char Key1=Key_scan();
if(Key1==SET) //如果按SET鍵
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //釋放后操作
{
unsigned char i=0;
LCD_Initial();
GotoXY(0,1);
Print("Please Press D");
GotoXY(10,2);
Print("C D Q "); //顯示有效按鍵
while(1) //進入二級菜單循環
{
unsigned char Key2=Key_scan();
if(Key2==DOWN) //如果按DOWN鍵
{
Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //按鍵抬起后執行
{
i=i+1;
switch(i)
{
case 1 :Show_ID(0);break;
case 2 :Show_ID(1);break;
case 3 :Show_ID(2);break;
case 4 :Show_ID(3);break;
case 5 :Show_ID(4);break;
case 6 :i=0;break;
}
}
}
else if(Key2==CHANGE) //如果按CHANGE鍵
{Delay_long(200);
Delay_long(200); //延時兩秒
if(Key_scan()==0)
{
DS_ReadID(i-1);
Show_ID(i-1);
ISP_Eraser(i-1);
ISP_Write8(i-1);
}
}
else if(Key2==QUIT) //按QUIT返回自動模式
{Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
}
else if(Key1==DOWN) //按DOWN鍵切換至報警設置模式
{Delay_long(50);
if(Key_scan()==0)
{
Alarm_Set();
}
}
else if(Key1==UP) //按DOWN鍵切換至報警設置模式
{Delay_long(50);
if(Key_scan()==0)
{
Hand_Mode();
}
}
else if(Key1==QUIT) //按QUIT返回自動模式
{Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
/*修改器件TH和TL程序 */
/*入口參數:器件序號(0-4) */
/*全局變量:DS_Tl[5] DS_Th[5]*/
void SetThTl(unsigned char Num)
{
LCD_Initial();
GotoXY(5,2);
Print("S C UD LR Q"); //顯示有效按鍵
GotoXY(0,2);
Print("NO.");
LCD_Write(LCD_DATA,Num+1+'0');
ThTlDisp(Num,1);
while(1)
{
unsigned char Key2=Key_scan(); //二級菜單掃描
if(Key2==CHANGE)
{
Delay_long(50);
if(Key_scan()==0)
{
unsigned char i=0; //左右指示
GotoXY(8,1);
LCD_Write(LCD_DATA,0x7f);
while(1)
{
unsigned char Key3=Key_scan(); //三級菜單掃描
if(Key3==LEFT)
{
Delay_long(50);
if(Key_scan()==0)
{
i=0; //選擇TH
GotoXY(15,1);
LCD_Write(LCD_DATA,0x20);
GotoXY(8,1);
LCD_Write(LCD_DATA,0x7f);
}
}
else if(Key3==RIGHT)
{
Delay_long(50);
if(Key_scan()==0)
{
i=1; //選擇TL
GotoXY(8,1);
LCD_Write(LCD_DATA,0x20);
GotoXY(15,1);
LCD_Write(LCD_DATA,0x7f);
}
}
else if(Key3==UP)
{
Delay_long(100);
if(i==0)
DS_Th[Num]=DS_Th[Num]+1;
else
DS_Tl[Num]=DS_Tl[Num]+1;
ThTlDisp(Num,1);
}
else if(Key3==DOWN)
{
Delay_long(100);
if(i==0)
DS_Th[Num]=DS_Th[Num]-1;
else
DS_Tl[Num]=DS_Tl[Num]-1;
ThTlDisp(Num,1);
}
else if(Key3==SET)
{
Delay_long(50);
if(Key_scan()==0)
{
DS_Reset();
Match_ID(Num); //匹配ROM
DS_WriteByte(WRITE_SCR); //
DS_WriteByte(DS_Th[Num]);
DS_WriteByte(DS_Tl[Num]);
DS_WriteByte(0x7f);
DS_Reset();
Match_ID(Num);
DS_WriteByte(COPY_SCR);
SetThTl(Num);
}
}
else if(Key3==QUIT)
{
Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
}
else if(Key2==DOWN)
{
Delay_long(50);
if(Key_scan()==0)
{
Num=Num+1;
if(Num>4)
Num=0;
SetThTl(Num);
}
}
else if(Key2==QUIT)
{
Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
/****報警設置模式程序*****/
/*功能:設置Th和Tl */
void Alarm_Set()
{
LCD_Initial();
GotoXY(0,1);
Print("Alarm Set");
GotoXY(9,2);
Print("S U D Q") ;
while(1) //主菜單循環
{
unsigned char Key1=Key_scan() ;
if(Key1==SET) //如果按SET鍵
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //釋放后操作
{
SetThTl(0);
}
}
else if(Key1==DOWN) //按DOWN鍵切換至手動模式
{Delay_long(50);
if(Key_scan()==0)
{
Hand_Mode();
}
}
else if(Key1==UP) //按DOWN鍵切換至手動模式
{Delay_long(50);
if(Key_scan()==0)
{
ID_Mode();
}
}
else if(Key1==QUIT) //按QUIT鍵返回AUTO模式
{Delay_long(50);
if(Key_scan()==0)
{
Auto_Mode();
}
}
}
}
/////////////////////////////////////////////////
/*****************菜單選擇部分******************/
/////////////////////////////////////////////////
void Menu_Function(void)
{
if(Key_scan()==MENU) //如果菜單鍵按下
{
Delay_long(200);
Delay_long(200); //延時2S(長按有效)
if(Key_scan()==MENU) //菜單鍵有效
{
LCD_Initial(); //初始化LCD
GotoXY(0,1);
Print("Boot Menu"); //顯示"Boot Menu"
GotoXY(10,2);
Print(" D Q "); //顯示有效按鍵
while(1)
{
unsigned char Key=Key_scan() ;
if(Key==DOWN) //如果按DOWN鍵
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //按鍵抬起后執行
{
Hand_Mode();
}
}
else if(Key==QUIT) //如果QUIT鍵按下
{Delay_long(50); //延時0.25S等待釋放按鍵
if(Key_scan()==0) //按鍵抬起后執行AUTO模式
{
Auto_Mode(); //返回自動模式
}
}
}
}
}
}
////////////////////////////////////////////////////////
/**********************主程序**************************/
////////////////////////////////////////////////////////
main()
{
unsigned char i;
LCD_Initial();
GotoXY(2,1);
Print("Sun Yunhui");
GotoXY(3,2);
Print("04021313"); //開機顯示畫面
for(i=0;i<5;i++) //將EEPROM中的ID載入RAM
ISP_Read8(i);
for(i=0;i<5;i++)
DS_ReadTemp(i); //讀出器件Th和Tl
Delay_long(200);
Delay_long(200);
Auto_Mode();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -