word文档整理分享
DIO = (bit)(temp&0x01); //每次传输低字节 addr >>= 1; //右移一位 SCLK = 1; }
//读取数据
for ( i=8; i>0; i-- ) {
ACC_7=DIO; SCLK = 1; ACC>>=1; SCLK = 0; } CE=0;
dat1=ACC;
dat2=dat1/16; //数据进制转换
dat1=dat1; //十六进制转十进制 dat1=dat1+dat2*10; return (dat1); }
//初始化DS1302 void Initial(void) {
Write1302 (WRITE_PROTECT,0X00); //禁止写保护 Write1302 (WRITE_SECOND,0x56); //秒位初始化 Write1302 (WRITE_MINUTE,0x34); //分钟初始化 Write1302 (WRITE_HOUR,0x12); //小时初始化 Write1302 (WRITE_PROTECT,0x80); //允许写保护 }
4.显示驱动模块
系统运行过程中的数据显示是人机交互对话的一个重要通道。通过的显示系统数据,我们才可以更好的了解系统运行的状态,从而方便对整个系统进行必要的操作。本系统中采用共阳极的数码管,其中采用ULN2803作为驱动数码管的段选的芯片,采用简单又便宜的9012三极管来驱动数码管的位选,节约成本,程序编写简单。 考虑到数码管驱动信号要求的电流较大,采用功率驱动器件ULN2803芯片。此芯片是八组NPN型达林顿功放三极管集成芯片,典型的输入电压是5V,集电极输出功率可达50V×0.6A。因此采用ULN2803共阳极数码管的段信号驱动器。而共阳极数码管的位信号驱动则采用8个晶体管9012来实现。又由于ULN2803为低电平驱动,所以数据送到单片机端口前,应在程序中先将数据取反。然后将数据送到ULN2803输入端相连接单片机的P0端口即可。
每次先送一位要显示的数据字节,然后再送该位数码管的地址字节,直到8位显示完全。 本系统在运行过程中需要显示查看的数据有时钟及显示数值。正常工作中8位显示器显示实时时钟,显示小时、分钟、秒,其中有两位用来显示“—”,用以分隔显示小时、分钟和秒,这样显示更加清晰。
参考资料
word文档整理分享
五、系统调试运行及问题分析
1.单片机系统调试方法及步骤
单片机系统的调试应包括硬件及软件两部分,主要是通过调试发现硬件及软件中存在的问题,查看其运行结果是否符合设计要求。
在对系统进行实际调试时,首先应对硬件进行静态调试,同时对系统软件进行初步调试,此后再对软件和硬件进行动态调试,最后才能使系统进入正常工作.
(1)静态调试:静态调试主要是排除明显的硬件故障。在将芯片、传感器等元件连接到电路板上时,要保证各处电源极性、电压正确,以防止因电源极性接反或电压过高损坏芯片或传感器。此外,插入芯片必须在断电的情况下进行,特别注意芯片的方向不要插反。 (2)软件调试:在软件调试时采用在计算机上利用模拟软件实现对单片机的硬件模拟、指令模拟及运行状态模拟,从而完成应用软件开发的全过程。调试过程中的运行状态、各寄存器状态、端口状态等都可以在指定的窗口区域显示出来,通过这些显示结果随时跟踪程序运行状态,以确定程序运行无错误。
(3)动态调试:控制系统的软件和硬件是密切相关的,由于软件模拟开发系统不能对硬件部分进行诊断,同时也不能实时在线仿真,所以用户程序还需跟硬件连接起来进行联调,同时对软件和硬件进行检查和诊断。整个单片机系统进行在线调试时,需借助仿真开发工具来对用户软件及硬件电路进行诊断、调试。 在应用系统各模块电路调试成功后,将程序加载到在线仿真器上,这时就能单步或连续地执行目标程序,同时也可以根据需要分段设置断点执行程序。而对于一些与硬件相关的用户程序,如接口驱动程序等,则需要配合硬件,进行在线调试,如果有逻辑错误,也要及时纠正修改。
程序调试完毕后,利用编程器将程序固化到单片机中,使整个系统运行起来。 各模块电路调试流程图如下示:
图4-1电源调试 图4-2单片机最小系统调试
参考资料
word文档整理分享
图4-3按键电路调试 图4-4显示电路调试
图4-5采集电路调试
2.主要问题分析
在本系统的调试过程中遇到的主要问题的分析与解决方案。 1. 电源供电电路中集成稳压器温度过高。
参考资料
word文档整理分享
分析解决:稳压器温度过高的原因之一是:变压器整流滤波后加到集成稳压器上的电压较高,使7805上的压降过大。此问题可通过选用输出电压低些的变压器,并在集成稳压器前串入两只二极管降压,同时增大散热片来解决。
2.人体存在传感器有人存在时输出高电平的电压偏低
分析解决:人体存在传感器输出高电平的电压偏低,单片机会产生误判,或采集不到正确的信号,于是在人体存在传感器的输出端加一个100KΩ的上拉电阻。
3.人存在的教室中,若人体超过十秒没有活动,人体传感器是不会有信号输出的,那么如何判定教室此时有人的问题。 分析解决 :此问题在系统软件设计时,可将采集有人体信号存在的状态适当延长保持二至五分钟,并加以后续处理。
4.单片机控制信号输出后,继电器没按预定设计产生动作。
分析解决:单片机输出控制信号,在控制继电器时,必须加三极管来驱动,否则信号电流过小将不能使继电器产生吸合动作,而且必须采用三极管的集电极来驱动继电器,最后再带动负载。继电器驱动电路中还需注意的是要与继电器线圈并联一个续流二极管,增加对驱动三极管的保护。
5.每次开机插上电源后,硬件时钟显示的时间都从所设初始值开始计时。
分析解决:硬件时钟显示的时间不正常。 解决办法:一方面是充电电池没有充电功能;另一方面是应对硬件时钟进行自检。
六、总结
该教室灯光系统的控制是以AT89S51单片机芯片为核心,通过相关电路的驱动,完成对系统设备(电灯)的控制,采用一个二极管闪烁显示整个系统的工作状态,实现了对教室灯光的自动开灯、关灯控制。系统控制单元的硬件电路中多采用集成电路(ULN2803,DS1302,X5045等),简化了电路设计,同时节省了单片机I/O口资源,为系统进一步扩展留下了空间。系统的硬件及软件设计,经实验初步证实了系统具有很好的稳定性,提高了电能的利用率。 在保证稳定、可靠工作的前提下,硬件设计上尽量采用性价比高的元器件,以降低成本。软件设计上采用多任务形式对信号的采集、处理,达到最终控制灯光的目的。
参考资料