}
if(rom >24 && rom <100){ rom = 0;}//当 if(rom >200){ rom = 24;}
LCM2402_Init();//LCM2402初始化 DT = 0xff; } }
//------------------------------------------------------------------99 帮助菜单 if(menu == 99){ uint8 i;
if (DT != 0xff){ if(DT == 0x2F){ i++;
if(i >6){i=0;}
DelayS(500); }
if(DT == 0x1D){ i = 0; menu = 0; }
LCM2402_Init();//LCM2402初始化
DT = 0xff; }
switch (i){
case 0: print(0x80,\case 1: print(0x80,\Set The Real Time\Controller NO.\
case 2: print(0x80,\case 3: print(0x80,\Alarm +/-5\Set Alarm\case 4: print(0x80,\case 5: print(0x80,\
case 6: print(0x81,\ default:break; } }
//------------------------------------------------------------------11 调时输入 if(menu == 11){
static unsigned char i=0; bit k;//定义静态
RealTime_Display(); //在第一行显示时间部分 for(i=1;i<8;){//8个时钟数据的循环加位 switch (i){//显示设置项的说明
case 7: print(0xc0,\
26
case 6: print(0xc4,\ case 5: print(0xc3,\ case 4: print(0xcc,\ case 3: print(0xc8,\ case 2: print(0xc5,\ case 1: print(0xc2,\
}
print(0x97,\
if(DT>=0x00 && DT < 0x0a){//DT办数据键码时动作
if(i == 4){//如果是星期设置则不必输入“十位”数据 k = 1; }
Set_time(i,k);//在这里调用写时间的程序项 if(k==0){//第一次按键输入到“十位” k = 1; }
else{//否则是第二次按键,输入到“个位” k = 0; i++; }
LRDD();//清屏+刷新显示+延时+清空DT 一体函数 }
if(DT == 0x11 || DT == 0x17){ i++; LRDD(); }
if(DT == 0x1A){
i--;if(i < 1){ i =7;}; LRDD(); }
if (DT == 0x1D){//按 AV 键退回到主界面 LRDD(); menu = 0;
i = 9;//用于退出上一级的for循环 } } }
//----------------------------------------------------------------12 定时值输入
27
if(menu == 12){
static unsigned char i=0; bit k;//定义静态
alarm_Display(); //在第一行显示时间部分 for(i=1;i<9;){//8个时钟数据的循环加位 switch (i){//显示设置项的说明
case 8: print(0xc3,\ case 7: print(0xc7,\ case 6: print(0xc4,\ case 5: print(0xc3,\ case 4: print(0xcc,\ case 3: print(0xc8,\ case 2: print(0xc5,\ case 1: print(0xc2,\
}
print(0x97,\
if(DT>=0x00 && DT < 0x0a || DT == 0x12){//DT办数据键码时动作
if(i == 4 || DT == 0x12){//如果是星期设置则不必输入“十位”数据 k = 1; }
Set_alarm(rom,i,k);//在这里调用写时间的程序项 if(k==0){//第一次按键输入到“十位” k = 1; }
else{//否则是第二次按键,输入到“个位” k = 0; i++; }
LADD();//清屏+刷新显示+延时+清空DT 一体函数 }
switch (DT){//显示设置项的说明
case 0x11: //i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
case 0x12: //i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
case 0x17: i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
case 0x1A: i--;if(i < 1){ i =8;};LADD();break;////VOL- 跳回上一项 //循环设备
case 0x1D: LADD();menu = 0;i = 19;break;////按 AV 键退回到主界面//i = 9;用于退出上一级的for循环 }}}
LED1 = 1;//关LED1}}
28
第5章 系统测试及分析
5.1 系统测试
系统运行稳定,各部分模块都能够按照预期的要求正常工作,总体能够达到设计的要求。在上电状态下,LCD2402显示dalin-lcd2402 Welcome to used,并且伴随蜂鸣器的20秒的鸣响,红外遥控也能正常工作,当按下按键,系统接收到数据时,发光二极管会闪亮一次,当按键能符合菜单按下时(操作如4.1节—系统说明),屏幕能够显示菜单里说明的功能。
5.2 各模块初始化现象
1电源模块
原来的系统是直接接到直流5V的电源上的,没有任何的保护措施,在经过考虑后,采用三端稳压芯片LM7805。用其设计的是线性开关,线性稳压电路,具有结构简单、调节方便、输出电压稳定性强、文波电压小等优点,但是,在负载电流较大且输出电压较低时,其自身的功耗很大。但如果给本系统供电,完全满足要求。所以便加上了LM7805.使系统更加的稳定可靠。当系统通上12V直流电源时,LM78015芯片模块就开始工作,并且芯片会发热,滤波电容为了改善波纹特性,在稳压电源的输入端加接电容C1(电解电容470uf 25v),C2(陶瓷电容104);在其输出端加接电容C3(电解电容470uf 25v),C4(陶瓷电容104),目的是为了改善负载的瞬态响应、防止自激振荡和减少高频噪声,当电源工作正常时,发光二极管持续发光。说明输入系统的电源是5V。在调试过程中,电源模块一开始就工作良好。 2 时钟芯片模块
当系统通电后,检测时钟芯片是否未被初始化,如是则设置1302的初始时间(2007年1月1日00时00分00秒星期一),所以系统刚通上电时,要是DS1302芯片工作正常,则显示屏会显示2007/01/01[一]00:00:00_00, 时钟/RAM 的读/写数据以一个字节或多达31 个字节的字
符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW,因为在设计板上我加了一个3V的电池,所以保证了系统在掉电时再上电后可以不要调时间了,在调试时,DS1302芯片能运行的很好,并且屏幕显示和理想中的一样。当断电后过段时间再通电时,系统显示的时间和一直通电时是保持一致的(说明了电池也接触良好,芯片工作正常)。 3 红外遥控模块
在调试时,按下按键伴随提示二极管发光一次(正是预期的效果),说明HS0038芯片能够接收遥控器上发出信息,这一现象说明遥控模块能够收发信息,工作正常,当按键按下符合菜单键的设置时,LCD2402显示与红外遥控发送的数据同步,所以能够利用红外遥控很好的设置打铃时间点和实时时间。 4 AT24C02模块
在调试系统的时候,一切都很正常的工作着,红外遥控和显示都行,但就是不能把打铃时间点写进AT24C02芯片中,所以肯定了问题是出现在AT24C02芯片中,一开始先是认真的去对照系统PCB图,但做的板和图上的电路是一致的,然后就开始检查软件部分,也检查不出什么问题,还以为是芯片出了问题,在换了几块芯片后结果还是一样的,最后就重新的去检查AT24C02芯片的中文资料,才最终发现了是在用芯片的时候把7 8 脚都接了电源,而AT24C02芯片的管脚正确的接发是把1,2,3,4,7脚都接地,8脚接电源,第5 脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,第6 脚SCL为串行时钟输入线。在经过改进后,AT24C02芯片终于能够正常的工作了,系统也能达到预期的效果了。 5 LCD2402模块
LCD2402在初始化后显示dalin-lcd2402 Welcome to used,由于是认真了查阅了有关的
29
资料,在画原理图和PCB图的时候工作认真的原因,所以在调试时,LCD2402上电就能够工作正常。
所以,在各个模块调试工作正常之后,整个系统上电之后就能够运行稳定,正常工作。
5.3 系统测试结果表
表5-1 整天系统测试结果表(?表示忽略值,采用忽略功能的定时器有多种样式的组合功能)
设置的打铃 时间点 ?/?/?[?]8:00:00 ?/?/?[?]8:45:00 ?/?/?[?]8:55:00 ?/?/?[?]9:40:00 ?/?/?[?]10:00:00 ?/?/?[?]10:45:00 ?/?/?[?]10:55:00 ?/?/?[?]11:40:00 ?/?/?[?]2:30:00 ?/?/?[?]3:15:00 ?/?/?[?]3:25:00 ?/?/?[?]4:10:00
现实测得的打铃 时间点 ?/?/?[?]8:00:00 ?/?/?[?]8:45:00 ?/?/?[?]8:55:00 ?/?/?[?]9:40:00 ?/?/?[?]10:00:00 ?/?/?[?]10:45:00 ?/?/?[?]10:55:00 ?/?/?[?]11:40:00 ?/?/?[?]2:30:00 ?/?/?[?]3:15:00 ?/?/?[?]3:25:00 ?/?/?[?]4:10:00 是否响铃 (蜂鸣器响20S) 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 误差 (毫秒级) 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 表5-2 整个星期系统测试结果表
设置的打铃时间点 ?/?/?[一]8:00:00 ?/?/?[一]2:30:00 ?/?/?[二]8:00:00 ?/?/?[二]2:30:00 ?/?/?[三]8:00:00 ?/?/?[三]2:30:00 ?/?/?[四]8:00:00 ?/?/?[四]2:30:00 ?/?/?[五]8:00:00 ?/?/?[五]2:30:00 ?/?/?[六]8:00:00 ?/?/?[六]2:30:00 ?/?/?[日]8:00:00 ?/?/?[日]2:30:00 现实测得打铃时间点 ?/?/?[一]8:00:00 ?/?/?[一]2:30:00 ?/?/?[二]8:00:00 ?/?/?[二]2:30:00 ?/?/?[三]8:00:00 ?/?/?[三]2:30:00 ?/?/?[四]8:00:00 ?/?/?[四]2:30:00 ?/?/?[五]8:00:00 ?/?/?[五]2:30:00 ?/?/?[六]8:00:00 ?/?/?[六]2:30:00 ?/?/?[日]8:00:00 ?/?/?[日]2:30:00 是否响铃 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 鸣响 误差(毫秒级) 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 低于0.1% 以上两个表格表明,系统虽然存在着一些误差,但不会影响系统运行的稳定性及可行性,由表一整天系统测试结果表在系统整天的运行中,误差的影响是可以忽略的,所以,到点的打铃的精确度都还是高于99.9%,再又表二整个星期系统测试结果表可以看出,系统虽然经过一星期的运行,但到每个打铃时间点的打铃误差还是都低于0.1%,而且实时显示的时间是经过和广播的整点报时进行了对比而测得的,误差都精确到几毫秒的范围内,所以整个系统是稳定可行的,能够应用到实际的控制中。
30