|
模擬路燈控制系統(tǒng)仿真原理圖:
12864菜單顯示程序:
- #include "FUN.h"
- #include "LCD12864.h"
- #include "DELAY.h"
- #include "ZK.h"
- #define uchar unsigned char
- sbit keydown=P1^1; //下鍵
- sbit keyenter=P1^3; //確定鍵
- sbit keyup=P1^0; // 上鍵
- sbit keyback=P3^4 ;//返回
- uchar func_index=0;
- void (*current_operation_index)();
- typedef struct
- {
- uchar current;
- uchar up;//向上翻索引號 x
- uchar down;//向下翻索引號 y
- uchar enter;//確認(rèn)索引號 z
- uchar back;// 返回索引號 w
- void (*current_operation)();
- } key_table;
- key_table code table[10]=
- {
- // x,y,z,w
- {0,0,0,1,0,(*fun0)},//第一層,顯示、按確認(rèn)鍵繼續(xù)
- {1,4,2,5,0,(*fun1)},//第一層,顯示【光控】、時間控制、物位控制、故障檢測
- {2,1,3,6,0,(*fun2)},//第一層,顯示光控、【時間控制】、物位控制、故障檢測
- {3,2,4,7,0,(*fun3)},//第一層,顯示光控、時間控制、【物位控制】、故障檢測
- {4,3,1,8,0,(*fun4)},//第一層,顯示光控、時間控制、物位控制、【故障檢測】
-
- {5,5,5,5,1,(*fun5)},//第二層,執(zhí)行光控程序
- {6,6,6,6,2,(*fun6)},//第二層,執(zhí)行時間控制程序
- {7,7,7,7,3,(*fun7)},//第二層,執(zhí)行物位控制程序
- {8,8,8,8,4,(*fun8)},//第二層,執(zhí)行故障檢測程序
- // {9,9,9,9,2,(*fun9)},//第二層,執(zhí)行清屏函數(shù)
-
- };
- void main()
- {
- initLCD();
- clearscreen(0);
- Set_line(0);
- disp_BMP(a);
- delayms(1000);
- clearscreen(0);
- while(1)
- {
- /*******************find index****************************/
- if((keyup==0)||(keydown==0)||(keyenter==0)||(keyback==0))
- {
- delayms(5);//消抖
- if(keyup==0)
- {
- func_index=table[func_index].up; //向上翻
- while(!keyup);//松手檢測
- }
- if(keydown==0)
- {
- func_index=table[func_index].down; //向下翻
- while(!keydown);
- }
-
- if(keyenter==0)
- {
- func_index=table[func_index].enter; //確認(rèn)
- while(!keyenter);
- }
- if(keyback==0)
- {
- func_index=table[func_index].back; //返回
- while(!keyback);
- }
- clearscreen(0);
- InitializeLCD();
- clearscreen(0);
- }
-
- current_operation_index=table[func_index].current_operation;
- (*current_operation_index)();//執(zhí)行當(dāng)前操作函數(shù)
-
- }
- }
復(fù)制代碼
- #include<reg52.h>
- #include "lcd12864.h"
- #include "delay.h"
- #include"FUN.h"
- #include "ZK.h"
- #include"DS1302.h"
- sbit F1=P3^0;
- sbit F2=P3^1;
- sbit BUZZ=P3^3;
- sbit L1=P3^6;
- sbit L2=P3^7;
- sbit EN=P1^4;
- sbit CK0=P1^5;
- sbit CK1=P1^6;
- sbit CK2=P1^7;
- sbit K1=P1^3; // 時間調(diào)整選擇鍵
- sbit K2=P1^0; // 加鍵
- sbit K3=P1^1; // 減鍵
- sbit K4=P1^2; // 確定保存鍵
- sbit K5=P3^4; // 時間控制頁返回
- sbit K6=P3^5; // 方向選擇
- //**************************全局變量申明**********************************//
- //unsigned char code DATE_TIME_WORDS[];
- //unsigned char code WEEKDAY_WORDS[];
- uchar DateTime[7];
- uchar tCount=0; //定時器T0定時50ms的計數(shù)器
- //*****************************************************************************
- void fun0()
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<6;i++)
- Hanzi(0,0+i*16, DATE_TIME_WORDS0+i*32);
- for(i=0;i<6;i++)
- Hanzi(2,0+i*16, DATE_TIME_WORDS0+(i+6)*32);
- for(i=0;i<5;i++)
- Hanzi(4,0+i*16, DATE_TIME_WORDS0+(i+12)*32);
- for(i=0;i<8;i++)
- Hanzi(6,0+i*16, DATE_TIME_WORDS0+(i+17)*32);
-
- }
- //******************************************************************************
- void fun1() // 第一層,顯示【光控】、時間控制、物位控制、故障檢測
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<4;i++)
- Hanzi(0,0+i*16, DATE_TIME_WORDS1+i*32);
- for(i=0;i<4;i++)
- Hanzi(2,16+i*16,DATE_TIME_WORDS1+(i+4)*32);
- for(i=0;i<4;i++)
- Hanzi(4,16+i*16,DATE_TIME_WORDS1+(i+8)*32);
- for(i=0;i<4;i++)
- Hanzi(6,16+i*16,DATE_TIME_WORDS1+(i+12)*32);
- L1=1;
- L2=1;
- }
- //***************************************************************************//
- void fun2() //第一層,顯示光控、【時間控制】、物位控制、故障檢測
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<2;i++)
- Hanzi(0,16+i*16,DATE_TIME_WORDS1+(i+1)*32);
- Hanzi(2,0,DATE_TIME_WORDS1+0*32);
-
- for(i=0;i<4;i++)
- Hanzi(2,16+i*16,DATE_TIME_WORDS1+(i+4)*32);
- Hanzi(2,80,DATE_TIME_WORDS1+3*32);
- for(i=0;i<4;i++)
- Hanzi(4,16+i*16,DATE_TIME_WORDS1+(i+8)*32);
- for(i=0;i<4;i++)
- Hanzi(6,16+i*16,DATE_TIME_WORDS1+(i+12)*32);
- L1=1;
- L2=1;
- }
- ////***************************************************************************//
- void fun3() //第一層,顯示光控、時間控制、【物位控制】、故障檢測
- {
- uchar i;
-
- InitializeLCD();
- for(i=0;i<2;i++)
- Hanzi(0,16+i*16,DATE_TIME_WORDS1+(i+1)*32);
-
- for(i=0;i<4;i++)
- Hanzi(2,16+i*16,DATE_TIME_WORDS1+(i+4)*32);
-
- Hanzi(4,0,DATE_TIME_WORDS1+0*32);
- for(i=0;i<4;i++)
- Hanzi(4,16+i*16,DATE_TIME_WORDS1+(i+8)*32);
- Hanzi(4,80,DATE_TIME_WORDS1+3*32);
- for(i=0;i<4;i++)
- Hanzi(6,16+i*16,DATE_TIME_WORDS1+(i+12)*32);
- L1=1;
- L2=1;
- }
- //***************************************************************************//
- void fun4() //第一層,顯示光控、時間控制、物位控制、【故障檢測】
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<2;i++)
- Hanzi(0,16+i*16,DATE_TIME_WORDS1+(i+1)*32);
-
- for(i=0;i<4;i++)
- Hanzi(2,16+i*16,DATE_TIME_WORDS1+(i+4)*32);
- for(i=0;i<4;i++)
- Hanzi(4,16+i*16,DATE_TIME_WORDS1+(i+8)*32);
-
- Hanzi(6,0,DATE_TIME_WORDS1+0*32);
- for(i=0;i<4;i++)
- Hanzi(6,16+i*16,DATE_TIME_WORDS1+(i+12)*32);
- Hanzi(6,80,DATE_TIME_WORDS1+3*32);
- L1=1;
- L2=1;
- BUZZ=1;
- }
- //////***************************************************************************//
- void fun5() //第二層,顯示光控
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<2;i++)
- Hanzi(0,16+i*16,DATE_TIME_WORDS1+(i+1)*32);
- if(EN==1)
- {
- L1=0;
- L2=0;
- }
- if(EN==0)
- {
- L1=1;
- L2=1;
- }
- }
- //*********************************************************************************
- void T0_Int1()interrupt 1
- {
- uchar i;
- TH0=-50000/256;
- TL0=-50000%256;
- if(++tCount<=20)return;
- tCount=0;
- Reverse_Display=Adjust_Index==6; //調(diào)整年后兩位
- OneChar_int(0,26,DateTime[6]/10);
- OneChar_int(0,34,DateTime[6]%10);
- for(i=4;i>2;i--) //顯示月、日
- {
- Reverse_Display=Adjust_Index==i;
- OneChar_int(0,56+(4-i)*32,DateTime[i]/10);
- OneChar_int(0,64+(4-i)*32,DateTime[i]%10);
- }
- Reverse_Display=Adjust_Index==5; //顯示星期
- Hanzi_int(2,88,WEEKDAY_WORDS+(DateTime[5]%10-1)*32);
- for(i=2;i>0;i--) //顯示時、分
- {
- Reverse_Display=Adjust_Index==i;
- OneChar_int(4,26+(2-i)*32,DateTime[i]/10);
- OneChar_int(4,34+(2-i)*32,DateTime[i]%10);
- }
- Reverse_Display=Adjust_Index==0; //顯示秒
- OneChar_int(4,88,DateTime[0]/10);
- OneChar_int(4,96,DateTime[0]%10);
- //***************************************************************************************
- if ((DateTime[0]/10>=3)&&(DateTime[0]%10>=0))//在定時時間內(nèi)燈就亮
- { //秒、分、時、日、月、星期、年
- L1=0; //( 0、 1、 2、 3、 4、 5、 6 )
- L2=0;
- }
- if ( (DateTime[0]/10<=2)&&(DateTime[0]%10>=0))
- {
- L1=1;
- L2=1;
- }
- }
- //***************************************************************************************
- void Ex_Int0()interrupt 0
- {
- if(K1==0)
- {
- if(Adjust_Index==-1||Adjust_Index==0)Adjust_Index=7;
- else Adjust_Index--;
- }
- else if(K2==0)
- {
- DateTime_Adjust(1); //加1
- }
- else if(K3==0)
- {
- DateTime_Adjust(-1);
- }
- else if(K4==0)
- {
- Set_Time();
- Adjust_Index=-1;
- }
- }
- ////***************************************************************************//
- void fun6() //第二層,時間控制
- {
- uchar i;
- InitializeLCD();
- clearscreen(0);
- OneChar(0,10,2);
- OneChar(0,18,0);
- for(i=0;i<3;i++)
- Hanzi(0,42+i*32,DATE_TIME_WORDS+i*32);
- Hanzi(2,42,DATE_TIME_WORDS+3*32);
- Hanzi(2,58,DATE_TIME_WORDS+4*32);
- // Hanzi(2,90,WEEKDAY_WORDS+4*32);
- for(i=0;i<3;i++)
- Hanzi(4,42+i*32,DATE_TIME_WORDS+(i+5)*32);
-
- IE=0X83;
- IP=0X01;
- IT0=0X01;
- TH0=-50000/256;
- TL0=-50000%256;
- TR0=1;
- while(1)
- {
- if(K5==0)
- {
- TR0=0;
- // IE=0;
- break;
- }
- else if(Adjust_Index==-1)Get_Time();
- }
- // clearscreen(0);
- // InitializeLCD();
-
- }
- //***************************************************************************************
- //***************************************************************************************
- ////***************************************************************************//
- void fun7() //第二層,物位控制
- {
- uchar i;
- InitializeLCD();
-
- for(i=0;i<4;i++)
- Hanzi(0,0+i*16,DATE_TIME_WORDS1+(i+8)*32);
- if((CK0==0)&&(K6==1))
- {
- L1=0;
- L2=1;
- }
- if((CK1==0)&&(K6==1))
- {
- L1=1;
- L2=0;
- }
- if((CK2==0)&&(K6==1))
- {
- L1=1;
- L2=1;
- }
- ////***************************************************************************//
- if((CK2==0)&&(K6==0))
- {
- L1=1;
- L2=0;
- }
- if((CK1==0)&&(K6==0))
- {
- L1=0;
- L2=1;
- }
- if((CK0==0)&&(K6==0))
- {
- L1=1;
- L2=1;
- }
- }
- //***************************************************************************//
- void fun8() //第二層,故障檢測
- {
- uchar i;
- InitializeLCD();
- for(i=0;i<4;i++)
- Hanzi(0,0+i*16,DATE_TIME_WORDS1+(i+12)*32);
- //*********************************************************************************
- if( (F1==1)&&(F2==0) ) //聲光報警
- {
- BUZZ=0;
- InitializeLCD();
- for(i=0;i<5;i++)
- Hanzi(4,0+i*16,DATE_TIME_WORDS1+(i+16)*32); //顯示1號燈故障
- }
- if((F1==0)&&(F2==1))
- {
- BUZZ=0;
- InitializeLCD();
- for(i=0;i<5;i++)
- Hanzi(4,0+i*16,DATE_TIME_WORDS1+(i+21)*32); //顯示2號燈故障
- }
- if( (F1==1)&&(F2==1) )
- {
- BUZZ=0;
- InitializeLCD();
- for(i=0;i<5;i++)
- Hanzi(4,0+i*16,DATE_TIME_WORDS1+(i+26)*32); //顯示全故障
- }
- if((F1==0)&&(F2==0))
- {
- BUZZ=1;
- InitializeLCD();
- for(i=0;i<5;i++)
- Hanzi(4,0+i*16,DATE_TIME_WORDS1+(i+31)*32); //無故障
- }
- }
- ////***************************************************************************//
- //
- // void fun9() //第二層,顯示時間控制
- //{
- // uchar i;
- // for(i=0;i<4;i++)
- // Hanzi(2,0+i*16,DATE_TIME_WORDS1+(i+4)*32);
- //
- //
- //}
- ////***************************************************************************//
- // void fun10() //第二層,北京大學(xué)層下顯示歷史、【政治】、簡介、返回
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<2;i++)
- // Hanzi(0,16+i*16,DATE_TIME_WORDS3+(i+1)*32);
- //
- // Hanzi(2,0,DATE_TIME_WORDS3+0*32);
- //
- // for(i=0;i<2;i++)
- // Hanzi(2,16+i*16,DATE_TIME_WORDS3+(i+4)*32);
- //
- // Hanzi(2,48,DATE_TIME_WORDS3+3*32);
- //
- // for(i=0;i<2;i++)
- // Hanzi(4,16+i*16,DATE_TIME_WORDS3+(i+6)*32);
- //
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS3+(i+8)*32);
- //
- //
- //}
- //
- ////***************************************************************************//
- // void fun11() //第二層,北京大學(xué)層下顯示歷史、政治、【簡介】、返回
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<2;i++)
- // Hanzi(0,16+i*16,DATE_TIME_WORDS3+(i+1)*32);
- //
- //
- // for(i=0;i<2;i++)
- // Hanzi(2,16+i*16,DATE_TIME_WORDS3+(i+4)*32);
- //
- //
- // Hanzi(4,0,DATE_TIME_WORDS3+0*32);
- //
- // for(i=0;i<2;i++)
- // Hanzi(4,16+i*16,DATE_TIME_WORDS3+(i+6)*32);
- //
- // Hanzi(4,48,DATE_TIME_WORDS3+3*32);
- //
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS3+(i+8)*32);
- //
- //
- //}
- //
- ////***************************************************************************//
- ////
- //// void fun12() //第二層,北京大學(xué)層下顯示歷史、政治、簡介、【返回】
- ////{
- //// uchar i;
- //// InitializeLCD();
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(0,16+i*16,DATE_TIME_WORDS3+(i+1)*32);
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(2,16+i*16,DATE_TIME_WORDS3+(i+4)*32);
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(4,16+i*16,DATE_TIME_WORDS3+(i+6)*32);
- ////
- ////
- //// Hanzi(6,0,DATE_TIME_WORDS3+0*32);
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS3+(i+8)*32);
- ////
- //// Hanzi(6,48,DATE_TIME_WORDS3+3*32);
- ////
- ////}
- //
- ////***************************************************************************//
- //
- // void fun13() //第二層,重慶三峽學(xué)院層下顯示【簡介】、最佳院系、最佳實驗室、返回
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<4;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS4+i*32);
- // for(i=0;i<4;i++)
- // Hanzi(2,16+i*16,DATE_TIME_WORDS4+(i+4)*32);
- // for(i=0;i<5;i++)
- // Hanzi(4,16+i*16,DATE_TIME_WORDS4+(i+8)*32);
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS4+(i+13)*32);
- //
- //}
- //
- ////***************************************************************************//
- // void fun14() //第二層,重慶三峽學(xué)院層下顯示簡介、【最佳院系】、最佳實驗室、返回
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<2;i++)
- // Hanzi(0,16+i*16,DATE_TIME_WORDS4+(i+1)*32);
- //
- // Hanzi(2,0,DATE_TIME_WORDS4+0*32);
- //
- // for(i=0;i<4;i++)
- // Hanzi(2,16+i*16,DATE_TIME_WORDS4+(i+4)*32);
- //
- // Hanzi(2,80,DATE_TIME_WORDS4+3*32);
- //
- // for(i=0;i<5;i++)
- // Hanzi(4,16+i*16,DATE_TIME_WORDS4+(i+8)*32);
- //
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS4+(i+13)*32);
- //
- //
- //}
- //
- ////***************************************************************************//
- // void fun15() //第二層,重慶三峽學(xué)院層下顯示簡介、最佳院系、【最佳實驗室】、返回
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<2;i++)
- // Hanzi(0,16+i*16,DATE_TIME_WORDS4+(i+1)*32);
- //
- //
- // for(i=0;i<4;i++)
- // Hanzi(2,16+i*16,DATE_TIME_WORDS4+(i+4)*32);
- //
- //
- // Hanzi(4,0,DATE_TIME_WORDS4+0*32);
- //
- // for(i=0;i<5;i++)
- // Hanzi(4,16+i*16,DATE_TIME_WORDS4+(i+8)*32);
- //
- // Hanzi(4,96,DATE_TIME_WORDS4+3*32);
- //
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS4+(i+13)*32);
- //
- //
- //}
- ////***************************************************************************//
- ////
- //// void fun16() //第二層,重慶三峽學(xué)院層下顯示簡介、最佳院系、最佳實驗室、【返回】
- ////{
- //// uchar i;
- //// InitializeLCD();
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(0,16+i*16,DATE_TIME_WORDS4+(i+1)*32);
- ////
- //// for(i=0;i<4;i++)
- //// Hanzi(2,16+i*16,DATE_TIME_WORDS4+(i+4)*32);
- ////
- //// for(i=0;i<5;i++)
- //// Hanzi(4,16+i*16,DATE_TIME_WORDS4+(i+8)*32);
- ////
- ////
- //// Hanzi(6,0,DATE_TIME_WORDS4+0*32);
- ////
- //// for(i=0;i<2;i++)
- //// Hanzi(6,16+i*16,DATE_TIME_WORDS4+(i+13)*32);
- ////
- //// Hanzi(6,48,DATE_TIME_WORDS4+3*32);
- ////
- ////
- ////}
- //
- //////***************************************************************************//
- //
- //void fun17() //第三層,清華大學(xué)地點層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS5+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun18() //第三層,清華大學(xué)創(chuàng)建時間層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<8;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS6+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun19() //第三層,清華大學(xué)簡介層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS7+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun20() //第三層,北京大學(xué)歷史層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS8+i*32);
- //
- //}
- ////***************************************************************************//
- //
- //void fun21() //第三層,北京大學(xué)政治層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS9+i*32);
- //
- //}
- ////***************************************************************************//
- //
- //void fun22() //第三層,北京大學(xué)簡介層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS10+i*32);
- //
- //}
- // //***************************************************************************//
- //
- //void fun23() //第三層,重慶三峽學(xué)院簡介層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<8;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS11+i*32);
- // Hanzi(2,0,DATE_TIME_WORDS11+8*32);
- //
- //}
- // //***************************************************************************//
- //
- //void fun24() //第三層,重慶三峽學(xué)院最佳院系層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<8;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS12+i*32);
- // for(i=0;i<3;i++)
- // Hanzi(2,0+i*16,DATE_TIME_WORDS12+(i+8)*32);
- //
- //}
- //
- // //***************************************************************************//
- //
- //void fun25() //第三層,重慶三峽學(xué)院最佳實驗室層
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<8;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS13+i*32);
- // for(i=0;i<4;i++)
- // Hanzi(2,0+i*16,DATE_TIME_WORDS13+(i+8)*32);
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
下載:
模擬路燈控制系統(tǒng).rar
(151.8 KB, 下載次數(shù): 161)
2017-4-25 22:30 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|