标题:
模拟路灯控制系统仿真及程序 12864菜单显示
[打印本页]
作者:
wfc
时间:
2017-4-25 22:31
标题:
模拟路灯控制系统仿真及程序 12864菜单显示
模拟路灯控制系统仿真原理图:
0.png
(41.42 KB, 下载次数: 42)
下载附件
2017-4-26 02:04 上传
0.png
(88.79 KB, 下载次数: 33)
下载附件
2017-4-26 02:05 上传
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)
2017-4-25 22:30 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
dnf648222
时间:
2017-7-9 15:22
这个怎么做的
作者:
zj007
时间:
2018-1-3 13:27
学习学习,谢谢分享
作者:
51单片机小白龙
时间:
2020-4-26 12:34
有用,拿走了,,,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1