|
黑龙江农业经济职业学院
毕业论文
模拟路灯控制系统
姓 名: 指导教师: 专 业: 班 级: 200 年 月 日
目 录
绪论······································································································································ 4
1. 方案比较与论证············································································································· 5
1.1 系统模块化·············································································································· 5
1.2 显示模块·················································································································· 5
1.3 时钟模块·················································································································· 5
1.4 传感模块·················································································································· 6
1.5 报警模块·················································································································· 6
2. 理论分析························································································································· 7
2.1 89S52单片机硬件结构································································································· 7
2.2 单片机最小系统··········································································································· 7
2.3 光敏电阻····················································································································· 8
3. 电路和程序设计············································································································· 8
3.1 报警电路·················································································································· 8
3.2 主控制电路·············································································································· 8
3.3 主控制程序流程图···································································································· 9
4. 测试数据与分析············································································································· 9
4.1 ································································································································ 9
4.2 ································································································································· 9
4.3 ································································································································· 9
4.4 ································································································································ 10
4.5 ································································································································ 10
4.6 ································································································································ 10
5. C语言程序设计············································································································ 10
结论···································································································································· 26
参考文献····································································································································
致谢···········································································································································
附录········································································································································ 27
摘 要:设计并制作一套模拟路灯控制系统。支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。能根据环境明暗变化,自动开灯和关灯等。
采用89S52单片机、SMC1602B标准字符点阵液晶显示器显示、时钟芯片、红外发射管和接收管自己制作光电对管传感器等为主要元件构成的控制系统。比较合理的利用现有元件达到比较好的控制效果,并且能直观的显示当前路灯状态。利用时钟芯片能精确的控制路灯的效果到秒。
关键字:液晶显示,时钟芯片,光电传感器
绪论
路灯,已成为我们的城市、我们的生活必不可少的一部分。“华灯初上”时,是谁为你照亮前方的路,让你的脚步没有彷徨?是路灯!这么广泛的应用在平凡中凸显了路灯的重要,而且现在的路灯的自动控制还不是最理想的状态,所以尝试做一个模拟路灯控制系统。
自动控制所追求的是能源的节约、生活的方便、以及去完成人工不能或不方便完成的工作等。现在的路灯大多是点亮就是亮一夜,哪怕有几段时间,没有行人或者是车辆通过也是一样的,这就造成的电能的浪费。如此广泛应用的公共设施,就算一路灯每天浪费一度电,这样累加起来是一个多么庞大的电力能源啊!所以,这个模拟路灯控制系统主要解决的问题是节约电能!本着这个目的,这个模拟路灯控制系统的控制要求是:
1) 有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
2) 能根据环境明暗变化,自动开灯和关灯。
3) 能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图8),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。
4) 能分别独立控制每只路灯的开灯和关灯时间。
5) 当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。
这样能较好的节约电能。当然,一定还有很多不对和不足的地方,望老师不吝批评、指导!
模拟路灯控制系统
1. 方案比较与论证
1.1 系统模块化
题目:设计并制作一套模拟路灯控制系统。控制系统结构如图1所示,路灯布置如图8所示。
图1 路灯控制系统示意图
要求:(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。
(3)支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。
(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。
(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。
根据题目要求,本系统应具有:支路控制器;输入、显示装置;单元控制器1、2;LED灯点亮装置;传感装置;故障报警装置;LED驱动电源装置和控制系统供电装置。构成显示模块、时钟模块、光控路灯模块、LED灯点亮模块、传感模块、报警模块、按键模块、LED驱动电源电源模块、控制系统电源模块。
1.2 显示模块
方案1 采用数码管显示。价格低廉;编程和硬件电路相对简单,制作容易;显示相对单一,不能对信号标注,极容易产生误解。
方案2 采用SMC1602B标准字符点阵液晶显示器显示。价格较高;显示具体方便;能显示实际时间。
综合上面两种方案的比较,我们决定采用方案2。
1.3 时钟模块
方案1 采用89S52单片机,此单片机的运算能力强、实时控制功能特别强、软件编程灵活、自由度大。其CPU可以对I/O端口直接进行操作,位操作能力更是其他计算机无法比拟的,由于CPU存储器及I/O接口集成在同一芯片内,各部件的连接紧凑、且不易于受环境的影响。另外,52单片机体积小、价格低、易于产品化,适用性很强。
方案2 采用凌阳16位SPCE
方案3 单片机与多种外围设备连接时的中间接口芯片采用8255A。它具有3个8位的并行I/O口,3种工作方式,可通过编程改变其功能,因而使用灵活方便通用性强。
方案4 单片机与多种外围设备连接时的中间接口芯片采用8155H。此芯片内包含有256B的RAM存储器(静态),RAM的存取时间为400ns。2个可编程的8为并行口PA和PB,1个可编程的6位并行口PC,以及1个14位减法定时器/计数器。PA口和PB口可工作于基本输入/输出方式或选通输入/输出方式。
综合上面四种方案的比较,我们决定采用方案1和方案3。
1.4 传感模块
方案1 采用光敏电阻自己制作的光电传感器。光敏电阻的阻值可以 随周围环境光线的变化而变化。阻值会发生明显的变化。将阻值的变化直值通过比较器就可以输出高低电平。它具有灵敏度高,误差极小,感应距离很长等优点。
方案2 采用用红外发射管和接收管自己制作光电对管传感器。红外发射管发出红外线,当发出的红外线照射到物体后反射,若红外接收管能接收到反射回的光线则检测出有物体通过继而输出低电平,若接收不到发射管发出的光线则检测出无物体通过继而输出高电平。它具有灵敏度高,感应距离短等特点。
综合上面两种方案的比较,我们决定采用方案1。
1.5 报警模块
方案1 在每个灯的两端引出两条导线分别引入报警电路。灯的点亮电路出现故障后,灯就会在应该亮的时候不亮,也就是灯的两端没有电压,报警电路工作。此方案只考虑到了等的点亮电路发生故障而没有考虑到当灯本身发生故障。
例如灯本身发生断路(发生几率很小)时,此报警器不工作。
方案2 报警电路中应用光敏电阻。光敏电阻近距离的正对着灯,灯在应该亮的时候不亮,光敏电阻接收不到光时电阻阻值还原(接收到光时电阻阻值变小),报警电路输出低电平。此方案只要灯在该亮的时候不亮就会发出报警。
综合上面两种方案的比较,我们决定采用方案2。
经过反复论证,我们最终确定了如图2所示的总体设计方案。
(1)采用SMC1602B标准字符点阵液晶显示器显示,
(2)采用89S52单片机控制,
(3)单片机与多种外围设备连接时的中间接口芯片采用8255A,
(4)采用光敏电阻自己制作的光电传感器,
(5)采用光敏电阻式报警电路
图2 总体设计框图
2. 理论分析
根据设计要求我们经过仔细分析与研究最综确定采用SMC1602B标准字符点阵液晶显示器,AT89S52单片机作为主控制器,220V交流电经变压器变压和7805稳压后为单片机系统和其他芯片供电,采用光敏电阻自己制作的光电传感器。
一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等能量不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统配置,既按照系统功能要求配置外围设备,如键盘显示器﹑打印机﹑A/D﹑D/A转换器等,要设计合适的接口电路。
2.1 89S52单片机硬件结构
89S52单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。
2.2 单片机最小系统
89S52是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用89S52单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如附录一图9所示。
图3 晶振电路
89S52单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图3所示。在89S51单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容C1和C1的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。
2.2.2 复位电路
图4 复位电路
按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。按键手动复位电路见图4。时钟频率选用6MHZ时,C取22uF,R2取200Ω,R1取1KΩ。
2.3 光敏电阻
光敏电阻是一种典型的光电导器件。所谓光电导效应是表示材料(或器件)受到光辐射后,材料(或器件)的电导率发生变化。光敏电阻具有灵敏度高,光谱特性好,使用寿命长,稳定性高, 无极性之分,使用方便,体积小以及制造工艺简单等特点。基于此,在本系统中的光控路灯电路,传感电路,报警电路上都有应用。
3. 电路和程序设计
3.1 报警电路
如图5,在电灯电路发生故障(灯在该亮的时候熄灭)时,报警电路中的光敏电阻近距离的正对着所有的LED灯,某个灯不亮,都会使报警电路运作,发出响亮的蜂鸣声,并点亮与路灯相对应的小灯,同时,液晶屏上显示出发生故障的路灯电路的标号。
图5 报警电路
3.2 主控制电路(在时钟模块内)
主控制电路是时钟模块的重要组成部分,如图6所示,它是由单片机最小系统、单片机、锁存器(74LS373)还有
图6 主电路控制电路图
3.3 主控制程序流程图
图7 主控制流程图
4. 测试数据与分析
4.1 按照电路图连接电路,传感器、移动物体——小车等放在合适的位置。
4.2 设定开关灯时间,看能否显示开关灯时间并且检查能否控制整条支路按时开灯和关灯(基本要求1),还有能否独立控制每只路灯的开灯和关灯时间(基本要求4)。
分析:由于DS12C887时钟芯片的使用通过它支路控制器无论是独立还是整体控制路灯的开关时间都可以精确到秒。还有正常的时间显示。
4.3 挡住/光照光控路灯电路中的光敏电阻,模拟黑天/白天,观察此灯能否自动开/关(基本要求2)。
LED灯亮灭对照表 | ||||
|
灯1 |
灯2 | ||
M |
向右 |
向左 |
向右 |
向左 |
S |
亮 |
灭 |
灭 |
灭 |
B |
灭 |
亮 |
亮 |
灭 |
S’ |
灭 |
灭 |
灭 |
亮 |
分析:有光时,光敏电阻阻值减小,光控路灯电路输出高电平,单片机控制路灯熄灭;无光时,光敏电阻阻值恢复,光控路灯电路输出低电平,单片机控制路灯点亮。
4.4 如图8所示:可移动物体M(小车)先向右,然后向左移动,观察LED灯的亮灭情况(基本要求3)。正确情况如《LED灯亮灭对照表》所示。
图8 路灯布置示意图(单位:cm)
分析:小车前端的定位点移动到感应位置(S,B,S’)使传感器中的光敏电阻不能接收到对面的集合光束,传感电路产生信号传给主控制电路,主控制电路控制LED灯的亮灭。
4.5 拔掉任意一个LED灯,观察报警电路中的指示灯是否点亮和有无响亮的蜂鸣声,还有液晶屏上是否显示出发生故障的路灯电路的标号(基本要求5)。都发生才是正确的。
分析:由于报警电路中的光敏电阻近距离的正对着所有的LED灯,拔掉任意一个灯,导致某个灯不亮,都会使报警电路运作,发出响亮的蜂鸣声,并点亮与路灯相对应的小灯,同时,液晶屏上显示出发生故障的路灯电路的标号。
4.6 关掉控制电路电源一段时间后,再接通电,观察是否有准确的时间显示和历史定时。有为正确。
分析:通过DS12C887时钟芯片可以掉电保存时钟信息长达三个月。并且还可以记录单片机开机次数(单片机复位一次也相当于一次关机)。
5. C语言程序设计
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define PA XBYTE[0x7ffc]
#define PB XBYTE[0x7ffd}
#define PC XBYTE[0x7ffe]
#define PJ XBYTE[0x7fff]
#define miaob XBYTE[0xb000]
#define miaon XBYTE[0xb001]
#define fenb XBYTE[0xb002]
#define fenn XBYTE[0xb003]
#define shib XBYTE[0xb004]
#define shin XBYTE[0xb005]
#define xingb XBYTE[0xb006]
#define rib XBYTE[0xb007]
#define yueb XBYTE[0xb008]
#define nianb XBYTE[0xb009]
#define jcqA XBYTE[0xb00a]
#define jcqB XBYTE[0xb00b]
#define jcqC XBYTE[0xb00c]
#define jcqD XBYTE[0xb00d]
#define yong1 XBYTE[0xb00e]
#define yong2 XBYTE[0xb00f]
#define uint unsigned int
#define uchar unsigned char
uchar code tab0[]={"time:- SDZ "};
uchar code tab1[]={"0123456789abcde"};
uchar code tab2[]={"MonTueWedThuFriSatSun"};
uchar dsread1,dsread3,shi,fen,miao,xingqi,yue,ri,niangao;
uchar q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,num;
uchar biao,biao1,biao2,biao3,ek,tt,bzw1,bzw3,kkk,bzw4,ddd,t1,t2,t3,t4;
uint nian;
sbit yrs=P1^1;
sbit ye=P1^2;
sbit deng=P1^0;
sbit ling=P3^0;
sbit ling1=P3^1;
sbit h=P1^3;
sbit h1=P1^6;
sbit h2=P1^7;
sbit baojing=P3^2;// 灯一报警
sbit baojing1=P3^3;//灯二报警
sbit baojing2=P3^4;
sbit baojing3=P3^5;
void xzl(uchar com);
void xsj(uchar com2);
void yjreday();
void anjian();
void readtime();
void delay(uint k);
void chaizi();
void dsreday();
void xianshi();
void sheding();
void cgq();
void yjxs(uchar tabnum,hang,lie,xsgs,wordnum);
void main()
{
delay(1000);
t1=0;
t2=0;
t3=0;
biao=0;
biao1=0;
PJ=0x81;
niangao=2;
ling=1;
ling1=1;
yjreday();
jcqB=0x16;
if(yong1==0x88)
{yjxs(0,0,0x0d,3,7);}
yjxs(0,0,0,5,0);
yjxs(0,0,0x07,1,4);
yjxs(0,0,0x0a,1,4);
yjxs(0,1,0x04,1,5);
yjxs(0,1,0x07,1,5);
yjxs(0,1,0x0a,1,6);
EA=1;
EX0=1;
while(1)
{
if(baojing2==0)
{yjxs(1,1,0x0f,1,1);baojing1=0;}
else if(baojing3==0)
{yjxs(1,1,0x0f,1,2);baojing1=0;}
chaizi();
xianshi();
anjian();
if(num==0x0a)
{bzw1=0x66;bzw3=0x99;jcqB=0x84;sheding();}
else if(num==0x0b)
{
num=0;
jcqB=0x16;
if(bzw4==0x36)
{jcqB=0x36;bzw4=0;}
bzw1=0x00;
}
else if(num==0x0c)
{
num=0;
baojing1=1;
}
else if(num==0x0d)
{kkk++;
num=0;
if(kkk==1)
deng=0;
else if(kkk==2)
{deng=1;kkk=0;}
}
else if(num==0x0e)
{ num=0;
ddd++;
if(ddd==1)
{yong1=0x88;bzw3=0x33;bzw1=0x66;bzw4=0x36;jcqB=0x24;yjxs(0,0,0x0d,3,7);sheding();}
else if(ddd==2)
{ddd=0;yong1=0x00;bzw3=0x00;bzw1=0x00;bzw4=0x00;jcqB=0x16;yjxs(0,0,0x0d,3,10);}
}
else if(num==0x0f)
{
num=0;
t1++;
if(t1==1)
{biao=0x77;biao1=0;biao2=0;biao3=0; yjxs(1,0,0x0f,1,10);}//第一个灯亮
else if(t1==2)
{biao1=0x22;biao=0;biao2=0;biao3=0; yjxs(1,0,0x0f,1,11);}//第二个灯亮
else if(t1==3)
{biao2=0x11;biao=0; biao1=0;biao3=0; yjxs(1,0,0x0f,1,12);}//第一个灯灭
else if(t1==4)
{biao3=0x34;biao=0;biao1=0;biao2=0; yjxs(1,0,0x0f,1,13);}//hh第二个灯灭
else if(t1==5)
{biao=0;biao1=0;biao2=0;biao3=0;t1=0;yjxs(1,0,0x0f,1,14);}
}
cgq();
}
}
void cgq()
{
if(h==0)
{
t2++;
if(t2==1)
{ling=0;delay(1000);}
else if(t2==2)
{
t2=0;
ling=1;
delay(1000);
}
}
else if(h1==0)
{
t3++;
if(t3==1)
{
ling=1;
ling1=0;
delay(1000);
}
else if(t3==2)
{
t3=0;
ling1=1;
ling=0;
delay(1000);
}
}
else if(h2==0)
{
t4++;
if(t4==1)
{
ling1=1;
delay(1000);
}
else if(t4==2)
{
ling1=0;
t4=0;
delay(1000);
}
}
}
void xzl(uchar com)
{
yrs=0;
PA=com;
delay(1);
ye=1;
delay(1);
ye=0;
}
void xsj(uchar com2)
{
yrs=1;
PA=com2;
delay(1);
ye=1;
delay(1);
ye=0;
}
void yjreday()
{
ye=0;
xzl(0x38);
xzl(0x0f);
xzl(0x04);
xzl(0x01);
xzl(0x80);
}
void dsreday()
{
uchar dsread2;
jcqB=0x80;
miaob=0x00;
miaon=0x00;
fenb=0x00;
fenn=0x00;
shib=0x00;
shin=0x00;
xingb=0x00;
rib=0x00;
yueb=0x00;
nianb=0x00;
dsread2=jcqC;
dsread2=jcqD;
jcqB=0x06;
niangao=2;
}
void readzd() interrupt 0 using 1
{
uchar nian1,lk;
lk=jcqC;
shi=shib;
fen=fenb;
miao=miaob;
xingqi=xingb;
nian1=nianb;
yue=yueb;
ri=rib;
nian=niangao*1000+nian1;
if((lk&0x20)==0x20)
{
ek++;
if(ek==1)
{
if((biao!=0x77)&&(biao1!=0x22)&&(biao2!=0x11)&&(biao3!=0x34))
{ling=0;ling1=0;}
if(biao==0x77)
{biao=0;ling=0;ling1=1;}
if(biao1==0x22)
{biao1=0;ling1=0;ling=1;}
if(biao2==0x11)
{biao2=0;ling=1;}
if(biao3==0x34)
{biao3=0;ling1=1;}
}
else if(ek==2)
{ ek=0;
if((biao!=0x77)&&(biao1!=0x22)&&(biao2!=0x11)&&(biao3!=0x34))
{ling=1;ling1=1;}
if(biao==0x77)
{biao=0;ling=0;ling1=1;}
if(biao1==0x22)
{biao1=0;ling1=0;ling=1;}
if(biao2==0x11)
{biao2=0;ling=1;}
if(biao3==0x34)
{biao3=0;ling1=1;}
}
}
}
void chaizi()
{
q1=shi/10;
q2=shi%10;
q3=fen/10;
q4=fen%10;
q5=miao/10;
q6=miao%10;
q7=niangao;
q8=nian%1000/100;
q9=nian%1000%100/10;
q10=nian%10;
q11=yue/10;
q12=yue%10;
q13=ri/10;
q14=ri%10;
}
void anjian()
{
uchar lie,n,m,zjz;
PC=0x0f;
if((PC&0x0f)!=0x0f)
delay(10);
if((PC&0x0f)!=0x0f)
{
lie=0xef;
n=0;
while((PC&0x0f)!=0x0f)
{
if(n>0x04) n=0;
PC=lie;
zjz=PC;
if((zjz&0x01)==0)
{m=0; num=n+m; while((PC&0x0f)!=0x0f);}
else if((zjz&0x02)==0)
{m=0x04;num=n+m; while((PC&0x0f)!=0x0f);}
else if((zjz&0x04)==0)
{m=0x08;num=n+m; while((PC&0x0f)!=0x0f);}
else if((zjz&0x08)==0)
{m=0x0c;num=n+m; while((PC&0x0f)!=0x0f);}
else
{
lie=_crol_(lie,1);
n++;
PC=0x0f;
}
}
}
}
void sheding()
{
uchar bzw2,jshu;
while(bzw1==0x66)
{
anjian();
if((num==0x0a)||(num==0x0e))
num=0;
jshu++;
if(jshu==0x01)
{
bzw2=0x03;
xzl(0x80+0x00);
while(bzw2==0x03)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q1=num; yjxs(1,0,0x05,1,q1);}
}
}
if(jshu==0x02)
{
bzw2=0x06;
xzl(0x80+0x05);
while(bzw2==0x06)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q2=num; yjxs(1,0,0x06,1,q2);}
}
}
if(jshu==0x03)
{
bzw2=0x09;
xzl(0x80+0x07);
while(bzw2==0x09)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q3=num; yjxs(1,0,0x08,1,q3);}
}
}
if(jshu==0x04)
{
bzw2=0x0b;
xzl(0x80+0x08);
while(bzw2==0x0b)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q4=num; yjxs(1,0,0x09,1,q4);}
}
}
if(jshu==0x05)
{
bzw2=0x0c;
xzl(0x80+0x0a);
while(bzw2==0x0c)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q5=num; yjxs(1,0,0x0b,1,q5);}
}
}
if(jshu==0x06)
{
bzw2=0x0d;
xzl(0x80+0x0b);
while(bzw2==0x0d)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q6=num; yjxs(1,0,0x0c,1,q6);}
}
}
if(jshu==0x07)
{
bzw2=0x0e;
xzl(0x80+0x40+0);
while(bzw2==0x0e)
{xzl(0x80+0x40+0);
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q7=2; yjxs(1,1,0,1,q7);}
}
}
if(jshu==0x08)
{
bzw2=0x0f;
xzl(0x80+0x40+0x00);
while(bzw2==0x0f)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q8=num; yjxs(1,1,0x01,1,q8);}
}
}
if(jshu==0x09)
{
bzw2=0x10;
xzl(0x80+0x40+0x01);
while(bzw2==0x10)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q9=num; yjxs(1,1,0x02,1,q9);}
}
}
if(jshu==0x0a)
{
bzw2=0x11;
xzl(0x80+0x40+0x02);
while(bzw2==0x11)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q10=num; yjxs(1,1,0x03,1,q10);}
}
}
if(jshu==0x0b)
{
bzw2=0x12;
xzl(0x80+0x40+0x03);
while(bzw2==0x12)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q11=num; yjxs(1,1,0x05,1,q11);}
}
}
if(jshu==0x0c)
{
bzw2=0x13;
xzl(0x80+0x40+0x05);
while(bzw2==0x13)
{
anjian();
//cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q12=num; yjxs(1,1,0x06,1,q12);}
}
}
if(jshu==0x0d)
{
bzw2=0x14;
xzl(0x80+0x40+0x07);
while(bzw2==0x14)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q13=num; yjxs(1,1,0x08,1,q13);}
}
}
if(jshu==0x0e)
{
bzw2=0x15;
xzl(0x80+0x40+0x08);
while(bzw2==0x15)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{q14=num; yjxs(1,1,0x09,1,q14);}
}
}
if(jshu==0x0f)
{ jshu=0;
bzw2=0x16;
xzl(0x80+0x40+0x09);
while(bzw2==0x16)
{
anjian();
// cgq();
if((num==0x0b)||(num==0x0c)||(num==0x0e)||(num==0x0f))
{bzw2=0;jshu=0;bzw1=0;}
else if(num==0x0a)
{bzw2=0;}
else if(num==0x0d)
{deng=0;}
else
{xingqi=num;
switch(xingqi)
{
case 1:{yjxs(2,1,0x0b,3,0);} break;
case 2:{yjxs(2,1,0x0b,3,3);} break;
case 3:{yjxs(2,1,0x0b,3,6);} break;
case 4:{yjxs(2,1,0x0b,3,9);} break;
case 5:{yjxs(2,1,0x0b,3,12);} break;
case 6:{yjxs(2,1,0x0b,3,15);} break;
case 7:{yjxs(2,1,0x0b,3,18);} break;
}
}
}
}
}
shi=q1*10+q2;
fen=q3*10+q4;
miao=q5*10+q6;
nian=q9*10+q10;
yue=q11*10+q12;
ri=q13*10+q14;
if(bzw3==0x99)
{
bzw3=0x00;
shib=shi;
fenb=fen;
miaob=miao;
nianb=nian%1000;
if(nian==99)
{q8=1;}
yueb=yue;
rib=ri;
xingb=xingqi;
}
else if(bzw3==0x33)
{
shin=shi;
fenn=fen;
miaon=miao;
}
}
void yjxs(uchar tabnum,hang,lie,xsgs,wordnum)
{
uchar jj;
for(jj=0;jj<xsgs;jj++)
{
xzl(0x80+hang*0x40+lie);
if(tabnum==0)
{
xsj(tab0[jj+wordnum]);
}
else if(tabnum==1)
{
xsj(tab1[jj+wordnum]);
}
else if(tabnum==2)
{
xsj(tab2[jj+wordnum]);
}
delay(1);
lie++;
}
}
void xianshi()
{
yjxs(1,0,0x05,1,q1);
yjxs(1,0,0x06,1,q2);
yjxs(1,0,0x08,1,q3);
yjxs(1,0,0x09,1,q4);
yjxs(1,0,0x0b,1,q5);
yjxs(1,0,0x0c,1,q6);
yjxs(1,1,0,1,q7);
if(nianb==0)
{q8=1;}
yjxs(1,1,0x01,1,q8);
yjxs(1,1,0x02,1,q9);
yjxs(1,1,0x03,1,q10);
yjxs(1,1,0x05,1,q11);
yjxs(1,1,0x06,1,q12);
yjxs(1,1,0x08,1,q13);
yjxs(1,1,0x09,1,q14);
switch(xingqi)
{
case 1:{yjxs(2,1,0x0b,3,0);} break;
case 2:{yjxs(2,1,0x0b,3,3);} break;
case 3:{yjxs(2,1,0x0b,3,6);} break;
case 4:{yjxs(2,1,0x0b,3,9);} break;
case 5:{yjxs(2,1,0x0b,3,12);} break;
case 6:{yjxs(2,1,0x0b,3,15);} break;
case 7:{yjxs(2,1,0x0b,3,18);} break;
}
}
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
结论
在经过模拟路灯控制系统的设计与制作后,感触最深的是解决问题的方法、技巧。在这个过程中,我遇到许许多多问题,对待问题要多方法处理,多角度处理。这不但增强了实践能力,而且懂得了联系实际的重要性,我坚信这对以后的学习和工作会有极大的帮助。当然,我的设计还存在着一些缺陷,有待于在将来设计中进一步提高。