模拟路灯控制系统仿真原理图:
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;//确认索引号 z
- uchar back;// 返回索引号 w
- void (*current_operation)();
- } key_table;
- key_table code table[10]=
- {
- // x,y,z,w
- {0,0,0,1,0,(*fun0)},//第一层,显示、按确认键继续
- {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)},//第二层,执行光控程序
- {6,6,6,6,2,(*fun6)},//第二层,执行时间控制程序
- {7,7,7,7,3,(*fun7)},//第二层,执行物位控制程序
- {8,8,8,8,4,(*fun8)},//第二层,执行故障检测程序
- // {9,9,9,9,2,(*fun9)},//第二层,执行清屏函数
-
- };
- 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; //确认
- 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)();//执行当前操作函数
-
- }
- }
复制代码
- #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; // 时间调整选择键
- 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的计数器
- //*****************************************************************************
- 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; //调整年后两位
- 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))//在定时时间内灯就亮
- { //秒、分、时、日、月、星期、年
- 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() //第二层,北京大学层下显示历史、【政治】、简介、返回
- //{
- // 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() //第二层,北京大学层下显示历史、政治、【简介】、返回
- //{
- // 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() //第二层,北京大学层下显示历史、政治、简介、【返回】
- ////{
- //// 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() //第二层,重庆三峡学院层下显示【简介】、最佳院系、最佳实验室、返回
- //{
- // 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() //第二层,重庆三峡学院层下显示简介、【最佳院系】、最佳实验室、返回
- //{
- // 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() //第二层,重庆三峡学院层下显示简介、最佳院系、【最佳实验室】、返回
- //{
- // 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() //第二层,重庆三峡学院层下显示简介、最佳院系、最佳实验室、【返回】
- ////{
- //// 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() //第三层,清华大学地点层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS5+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun18() //第三层,清华大学创建时间层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<8;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS6+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun19() //第三层,清华大学简介层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS7+i*32);
- //
- //}
- //
- ////***************************************************************************//
- //
- //void fun20() //第三层,北京大学历史层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS8+i*32);
- //
- //}
- ////***************************************************************************//
- //
- //void fun21() //第三层,北京大学政治层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS9+i*32);
- //
- //}
- ////***************************************************************************//
- //
- //void fun22() //第三层,北京大学简介层
- //{
- // uchar i;
- // InitializeLCD();
- //
- // for(i=0;i<7;i++)
- // Hanzi(0,0+i*16,DATE_TIME_WORDS10+i*32);
- //
- //}
- // //***************************************************************************//
- //
- //void fun23() //第三层,重庆三峡学院简介层
- //{
- // 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() //第三层,重庆三峡学院最佳院系层
- //{
- // 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() //第三层,重庆三峡学院最佳实验室层
- //{
- // 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黑下载附件…………
复制代码
下载:
模拟路灯控制系统.rar
(151.8 KB, 下载次数: 161)
|