(完整word版)单片机测速仪的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CHANGZHOU INSTITUTE OF TECHNOLOGY
科研实践
题目:基于单片机的测速器设计
二级学院(直属学部):延陵学院
专业:电气工程及其自动化班级:10电Y1 学生姓名:张凯强学号:10120733 指导教师姓名:范力旻职称:副教授
2013年12月30日至2014年1月10日
目录
1.绪论 (2)
1.1 课题研究背景及意义 (2)
1.2 课题研究的内容 (2)
2.测速器的系统概论 (4)
2.1 系统的主要功能 (4)
2.2 系统需求分析 (4)
2.3 测速器的工作流程 (4)
3总体设计方案 (6)
3.1 单片机的选择 (6)
3.1.1单片机的引脚功能介绍 (6)
3.2测速器方案论证 (7)
3.2.1方案的提出 (7)
3.2.2方案的比较及确定 (8)
4.软件设计 (9)
4.1主程序流程图 (9)
4.2按键分析 (9)
4.3数码管显示电路 (10)
4.4速度比较与报警 (12)
4.5测速程序分析 (13)
5.Proteus和keil仿真 (15)
5.1 proteus软件的介绍及使用 (15)
5.2测速器proteus软件的仿真 (18)
6.实物制作 (20)
6.1电路板焊接 (20)
6.2电路板调试 (21)
7.总结和展望 (21)
7.1科研实践总结 (21)
7.2对未来的展望 (22)
附录 (23)
1.参考文献 (23)
2.元器件清单 (24)
3原理图 (25)
4.程序代码(C语言): (25)
5实物图 (35)
1.绪论
1.1 课题研究背景及意义
近年来随着科技的飞速本设计是发展,为了克服传统模拟车速显示仪表显示数不准确及没有超速提示的缺点,数字化仪表迅速的进入汽车仪表行业,成为一种趋势,本文从驾驶员自身安全角度出发,设计了一种检测车辆超速的报警系统。
该报警系统允许驾驶员通过自带键盘设置本车辆安全行驶的最高速度当车辆处于行驶状态中,该系统通过速度传感器时刻监测机动车辆。
并通过LED显示车辆的实际车速和用户设置的安全参数.当发现车辆速度超过驾驶员设置的最高值时,蜂鸣器开始报警,警告灯不断闪烁,提醒驾驶员减速。
达到防患于未然的目的。
单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。
此设计就是一种利用8051单片机对机动车超速行驶情况进行蜂鸣报警和灯光报警的系统。
该系统结构简单,可靠性高,操作方便,可广泛应用于摩托车、汽车等机动车辆。
1.2 课题研究的内容
本文要求设计一个具有数字显示功能的单片机系统,实现车辆当前速度输出,当达到所设定的速度上限时并报警,以保证驾驶人员的人身安全。
首先要进行系统的总体方案设计,在设计中一般应考虑以下几点:
(1) 遵循从整体到局部的设计原则。
在过程中,应遵循从整体到局部的设计原则,把复杂难处理的问题分为若干个较为简单的、容易处理的问题,分别加以解决。
(2) 经济性要求。
为了获得较高的性能价格比,设计时不应盲目追求复杂高级的方案。
在满足性能指针的前提下,应尽可能采用简单的方案,因为方案简单意味着所用的元器件少,可靠性高,而且比较经济。
(3) 可靠性要求。
所谓可靠性是指产品在规定的条件下和规定的时间内完成规定功能的能力。
可靠性指针除了可用完成功能的概率表示外,还可以用平均无故障时间、故障率、失效率或平均寿命等来表示。
2.测速器的系统概论
2.1 系统的主要功能
软件分为主程序、数据处理子程序、按键子程序、中断服务子程序、LED数码显示子程序、声光报警器报警程序等。
主程序主要完成硬件初始化、子程序调用以及显示、报警等功能。
数据处理子程序主要完成监测车辆速度即主要是计算出车辆的时速,为报警子程序提供参考数据;按键中断子程序主要实现合法参数的输入;报警子程序主要实现在车辆超速行驶状态下发出报警信号,包括SPEAKER输出子程序和警报灯的闪烁子程序;显示子程序设计采用数字化显示用户设定的最高时速和车辆实际时速,用MAX7219芯片驱动LED进行动态显示
2.2 系统需求分析
1. 利用霍尔传感器产生里程数的脉冲信号。
2. 对脉冲信号进行计数。
实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。
3. 对数据进行处理,要求用LED显示里程总数和即时速度。
实现:利用软件编程,对数据进行处理得到需要的数值。
最终实现目标:自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。
2.3 测速器的工作流程
对于本课题所研制的车速报警系统而言,其基本出发点就是利用现有工艺条件,采用现代计算机软件处理技术,提高系统的精度等级和工作的稳定性,拓展其功能,并赋予其智能化特征,使报警器不仅能够及时准确地显示车辆的当前速度信息,同时尽可能地减少不必要的人工操作,使报警能随时随地不间断进行并保证报警的工作效率。
有鉴于此,同时根据系统的要求,确定系统总设计方案如图所示:
抢答器工作流程图如图2-1所示
图2-1 速度仪工作流程图
3总体设计方案
3.1 单片机的选择
由于单片机的种类很多,在选择单片机时要依据实际设计要求选择合适的单片机。
例如当设计仅仅需要一个单片机定时器那么选择89C1051或89C2051即可,而不选择89C52,因为后者的价格较高一些。
当然若程序和数据区的要求较高那么选择的单片机还要满足程序空间的要求。
表3-1 51和52的比较
用52系列单片机,即选用ATMEL公司的AT89C52。
3.1.1单片机的引脚功能介绍
AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8K Bytes的可反复擦写的只读程序存储器(EPROM)和256 字节的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大,AT89C52单片机适合于许多较为复杂控制场合应用。
AT89C52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,5个中断源,一个全双工串行通信口,片内具有振荡器及时钟电路。
3.2测速器方案论证
车速报警系统系统组成主要由单片机控制模块、霍尔传感器、LED数码显示器
及声光报警器组成。
针对任务要求,我们发现此项设计在单片机接口芯片以及按键电路上有不同的选择。
因此,设计方案的比较主要对此展开。
3.2.1方案的提出
方案一:采取通过带有I/O接口和计时器的静态RAM8155芯片与设定速度的键盘电路,速度显示电路,8155芯片具有256个字节的RAM,两个8位、一个6位的
可编程I/O口和一个14为计数器。
霍尔传感器用来产生脉冲方波,键盘输入用来设定限制速度,当车速超过最大速度Vm时,声光报警电路将发出报警信号。
单片机外部中断口接霍尔传感器的输出,车轮每转一圈产生一次INT0中断请求,单片机对INT0中断请求的次数进行计数。
并将在1秒内的计数值转换成机动车的时速,送至显示缓冲区以供显示程序调用。
具体算法如下:设单片机每秒计数值为n,即n r/s。
设机车车轮的周长为d m,则机车的时速V=d×n×3.6km/h。
硬件电路方框图霍尔传感器的输出信号经AT89C51的INT0口输入并存储在内部R0M 中,AT89C51外扩一片8155芯片,其PB口作为LED数码管的段选线,
PA4~PA0作为LED的位选线和键盘的列线,PCO和PC1口作为键盘的行线,从而组成10个按键的键盘。
AT89C51的P2.6口外接三极管放大器用来驱动声光报警电路,P2.6不断地输出101010⋯⋯的高低电平,驱动声光报警电路报警。
只要使声光报警电路报警重复输出256Hz及350Hz的叫声各0.73s,便可以模拟警车的叫声,产生警示作用。
机车的上限速度Vm通过键盘设置并存储起来。
单片机检测霍尔传感器输出的信息,计算出机车当前的速度v,并送LED显示。
当V≥Vm时,控制声光报警电路报警发出警示音。
方案二:利用高集成化的串行输入/输出的共阴极LED驱动显示器MAX7219及按键电路实现。
MAX7219芯片用来显示当前及设定速度,当速度超过最大速度Vm时,声光报警电路发出报警,按键设定用来设定报警速度(最大速度Vm)。
3.2.2方案的比较及确定
方案一和方案二比较,方案一采用8155芯片使用单片机引脚较多,采用键盘电路较复杂,而且只能显示当前速度,驾驶员对速度上限透明度不高,总体电路较复杂;方案二采用的MAX7219是一个高集成化的串行输入/输出的共阴极LED驱动显示器,每片可驱动8位7段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需3根线,且速度设定只需通过几个按钮实现即可,并且可以实时实现速度上限的增减,因而硬件电路简单,人眼视觉效果好,可以方便的为驾驶员提供信息,易于实现维护,且MAX7219内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了MCU有限的运行时间和程序资源。
4.软件设计
4.1主程序流程图
图4-1 主程序流程图
4.2按键分析
模式键扫描部分:由于单片机扫描的速度很快,所以依次用if判断每一个按键即可,当有一个按键被按下时实现对输出信号变量赋值,同时跳出循环即可。
按键功能分析
功能键是控制系统功能的按键,由于电压和电流都比较小所以选择普通的按钮开关,如型号为:TD-03B,可以满足条件。
功能键及对应的功能见表4-2:
表4-2 功能键及对应功能
4.3数码管显示电路
图4-3 设置显示时间数函数流程图
//显示秒
void display_S(uchar S)
{
write_com(0x80);
write_date('0'+S/10);
write_date('0'+S%10);
}
//显示分
void display_F(uint F1,uint F2)
{
write_com(0x80+0x05);
write_date('0'+F1/100);
write_date('0'+F1/10%10);
write_date('0'+F1%10);
write_date('0'+F2/100);
write_date('0'+F2/10%10);
write_date('0'+F2%10);
}
//显示里程
void display_LC(uint L1,uint L2,uint L3,uint L4) {
write_com(0x80+0x40+0x01);
write_date('0'+L1%10);//显示湿度
write_date('0'+L2/1000);
write_date('0'+L2/100%10);
write_date('0'+L2/10%10);
write_date('0'+L2%10);
write_date('0'+L3/1000);
write_date('0'+L3/100%10);
write_date('0'+L3/10%10);
write_date('0'+L3%10);
write_date('0'+L4/1000);
write_date('0'+L4/100%10);
write_date('0'+L4/10%10);
write_date('0'+L4%10);
}
4.4速度比较与报警
图4-4速度比较与报警
当手动按键测速未达到预先设置速度,显示速度当手动按键测速超过预先设置速度,显示并报警
4.5测速程序分析
//LCD写命令
void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
//LCD写数据
void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_date(table0[num]);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table1[num]);
}
}
计时器使用一个中断计算每100毫秒的中断输出,所以在这种情况下,计时器程序计算的数字将是400,被除数是600000,结果是1500这就是每分钟转数。
这些数字显示在4位七段数码管上。
子过程UDIV32被调用,这是一个8051系列32位数字除以16位数字的标准过程。
该测速仪的误差为6000rpm+/-5rpm。
5.Proteus和keil仿真
5.1 proteus软件的介绍及使用
5.1.1什么是Proteus软件
Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。
Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如按键、LED、数码管等等。
通过Proteus仿真软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。
5.1.2 怎样操作Proteus仿真软件
我使用的Proteus软件是7.10版本的,仿真时只需在AT89C52单片机中加载Keil软件生成的.HEX格式文件,即可启动仿真。
Keil仿真:
(1)程序编译
(2)生成hex文件
5.2测速器proteus软件的仿真
绘制抢答器的软件仿真图步骤分一下四步:
(1)查找所需要的元器件;
(2)根据电路图进行连线;
(3)是用来写线所对应的坐标,即下图所示的P11等坐标;
(4)加载所写完的C程序生成的.HEX文件即可以仿真。
通过以上步骤,来实现抢答器设计的仿真实现,仿真如下图所示:仿真开始时的仿真如图6-1:
图5-1 开始时的proteus仿真图测速器开始时用按键来调制速度上限的仿真如图5-2:
5-2 设置速度上限的proteus仿真图
测速器开始按键测速仿真如图5-3:
图5-3 测速器按键测速的proteus仿真图测速器速度超过速度上限的仿真如图5-4:
图5-4 测速器速度超过速度上限的proteus仿真图
6.实物制作
6.1电路板焊接
一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。
造成焊接质量不高的常见原因是:
①焊锡用量过多,形成焊点的锡堆积;焊锡过少,不足以包裹焊点。
②冷焊。
焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同豆腐渣一样!)。
③夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。
若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温度太高,则焊点下有一层碳化松香的黑色膜。
对于有加热不足的松香膜的情况,可以用烙铁进行补焊。
对形成的黑膜,要"吃"净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。
④焊锡连桥。
指焊锡量过多,造成元器件的焊点之间短路。
这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。
⑤焊剂过量,焊点明围松香残渣很多。
当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。
⑥焊点表面的焊锡形成尖锐的突尖。
这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。
6.2电路板调试
最小系统的电路不工作,首先应该确认电源电压是否正常。
用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。
接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。
如果补焊电源后最小系统还是不能工作,有可能是AT89C52单片机坏掉了,重新选择一个AT89C52单片机焊接。
如果是工作但是不能按需要的功能执行,也可用更换AT89C52单片机方法调试,但在此之前可以选择检查对应的模块是否有焊接问题,若没有再进行更换。
7.总结和展望
7.1科研实践总结
本次课程设计是我到目前为止觉得最有意义也是收获最大的一次实践,可以说是有苦也有甜。
身为电气工程系的学生,设计是我们将来必须的技能。
而这次课程设计恰恰给我们提供了一个应用自己所学知识的平台。
从通过理论设计,到确定具体方案,再到仿真软件仿真,最后到调试电路、显示结果。
整个过程都需要我充分利用所学的知识进行思考、借鉴。
可以说,本次课程设计是针对前面所学知识进行的一次比较综合的检验。
总的来说,这次课程设计虽然很累,但非常充实。
在这次实践中,正确的思路是很重要的,只要设计思路是正确的,那么才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础。
如果说前面的电路的理论设计是多么令人头痛的事,那么安装、调试过程则是一个考验人的耐心的过程,对电路的安装、分析调试要一步一步来,不能急躁。
这次课程设计对以前学过的理论知识起到了很好的回顾作用,同时还弥补了之前对单
片机知识的相关漏洞。
刚开始,我对课程设计是一无所知,就连按照硬件图来写汇编程序,都是一个很大的问题。
后来在范老师的耐心指导下,我终于知道了如何使用Proteus软件,以及如何用visio绘图工具栏来画流程图。
在设计过程中,遇到了很多疑难点,通过组员的讨论,并在教师指导下,综合运用所学知识,最终完成基于单片机的篮球比赛计时器设计。
是一个24秒和3秒计时电路,并具有时间显示的功能。
当然,要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。
而且这次的课程设计老师在验收时还要求学生进行现场操作,答辩。
这就更加促进了我们去认真的去完成这次课程设计,同时也只有这样才能督促学生对设计中出现的问题进行一定的分析和调试。
虽然这次课程设计过程中我们遇到了很多问题,比如说程序、流程图以及Proteus的仿真,我们还不能如鱼得水,还不是很熟练,经常熬夜对程序进行修改和仿真调试,但是我仍然非常感谢有这么一个机会,老师的耐心指导也让我们懂得了不少知识。
总体来说,这次课程设计让我受益匪浅。
在摸索改如何设计电路使之实现所需功能的过程中培养了我的设计思维,增加了实际动手能力,在让我体会到了设计电路的艰辛的同时,更让我体会到了成功的喜悦.
7.2对未来的展望
单片机的应用还是很广泛的,使用比较灵活,尤其是在对成本要求较为苛刻的地方,可以说在中国的社会主义初级阶段时间里,单片机还是能够占有一席之地的。
经过两周的科研实践,我深刻明白了理论知识与社会实践相结合的道理,也得到了以前书本知识所不曾得到的知识,更加明白了如今信息时代电子技能知识的重要性。
本设计增强了我对单片机、C语言等技能方面的认识,掌握了分析、处理问题的方法、逻辑思维能力等基本技能的训练,具有了一定程度的实际工作能力。
面对如此激烈的市场竞争体系,只有努力掌握好单片机知识方可在竞争中立于
不败之地,我对从事电子设计、C语言编程和研究产生了浓厚的兴趣。
希望自己以
后能通过自己的不懈努力取得更大的进步。
从上述单片机计术的发展现状与趋势来看,可以认为单片机又一次进入了蓬勃发展的新高潮。
而这一次发展高潮涉及的范围更广,技术更新更难,影响力和影响面也更宽,势必对整个信息产业产生更加深远的影响,也将对下一世纪的社会经济发展产生巨大影响,值得密切注视和研究。
附录
1.参考文献
[1]范力旻.《单片机原理及应用技术》.电子工业出版社.
[2]张齐朱宁西.单片机应用系统设计实验(C51).电子工业出版社,2013年.
[3]高伟.单片机原理及应用[M].北京:国防工业出版社,2008年.
[4] 李增生.对《抢答器》的改进[J].电子制作,2008年.
[5] 蔡朝阳.单片机控制实习与专题制作
[6].北京:北航出版社,2006年. 胡文金杨健.《单片机应用技术实训教程》.
重庆大学出版社.
[7] 杨加国.《单片机原理与应用及C51程序设计》.清华大学出版社,2006年.
[8] 胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1998年.
[9] 郭培源.电子电路及电子器件.高等教育出版社,2003年.
[10]何立民.单片机实验与实践教程. 北京:北京航空航天大学出版社,出版年:2004年
[11]童诗白.模拟电子技术基础[M]. 北京:北京高等教育出版社,出版年:2001年
[12]李朝青.单片机原理及接口技术. 北京:北京航空航天大学出版社,出版年:1999年
2.元器件清单
1
X1 晶振 1 CRYSTA
1
VCC 电源 1 5V
1
2
1
Key1 开关 1 控制电源3
3原理图
4.程序代码(C语言):
//宏定义
#define uchar unsigned char #define uint unsigned int
//头函数声明
#include <reg52.h>
#include "Lcd.h"
//光耦
sbit GO=P3^3;
//键盘定义
sbit K=P1^2;
//采集转速完成标志
uchar DOK=0;
uchar DFOK=0;
//时间
//S
uint time=0;
//F
uint time_F=0;
//电机转速
uint DZ1=0;
uint DZ2=0;
uint DZ3=0;
uint DZ4=0;
//uchar DZ_S=0;
//每秒钟圈数
uchar QS=0;
uint QF1=0;
uint QF2=0;
void Init(void);
//主函数
void main()
{
uchar i=0;
//寄存器初始化
Init();
Init_LCD();
while(1)
{
if(DOK==1)
{
DOK=0;
time=0;
display_S(QS);
QS=0;
}
if(DFOK==1)
{
DFOK=0;
time_F=0;
display_F(QF1,QF2);
QF1=0;
QF2=0;
}
display_LC(DZ1,DZ2,DZ3,DZ4);
if(K==0)
{
delay(100);
while(K==0);
DZ1=0;
DZ2=0;
DZ3=0;
DZ4=0;
QS=0;
QF1=0;
QF2=0;
}
}
}
//初始化
void Init(void)
{
//定时器0开
TMOD = 0x01;
//50ms
TH0 = 0x3C;
TL0 = 0x0B0;
ET0 = 1;
TR0 = 1;
//总中断开
EA = 1;
//T0计数器优先级最高
PT0=1;
//低电平有效
IT1=0;
//外部中断1开
EX1=1;
}
//外部中断1
void INT1_Init() interrupt 2 {
DZ4++;
if(DZ4==10000)
{
DZ4=0;
DZ3++;
if(DZ3==10000)
{
DZ3=0;
DZ2++;
if(DZ2==10000)
{
DZ2=0;
DZ1++;
}
}
}
//数据读取完毕
if(DOK==0)
QS++;
//数据读取完毕
if(DFOK==0)
{
QF2++;
if(QF2==1000)
{
QF2=0;
QF1++;
if(QF1==1000)
{
QF1=0;
}
}
}
//等待中断结束
while(GO==0);
}
//T0计数器中断
void T0_Init() interrupt 1
{
//0初始化50ms
TH0 = 0x4C;
TL0 = 0x00;
time++;
time_F++;
if(time==20&&DOK==0)//1s转速采集完毕
{
time=0;
DOK=1;
}
if(time_F==1200&&DFOK==0)//1Fen转速采集完毕 {
time_F=0;
DFOK=1;
}
}
//此函数提供与屏幕显示相关的函数及声明
//管脚定义
sbit rs=P2^7;
sbit lcden=P2^6;
//屏幕初始化
//待机开始寻找温湿度传感器
uchar code table0[]="00R/S 00000R/Min"; uchar code table1[]=" 0000000000000R ";
//等待函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//LCD写命令
void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
//LCD写数据
void write_date(uchar date) {
rs=1;
lcden=0;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
//初始化ok
void Init_LCD()
{
uchar num;
lcden=0;
//屏幕初始化
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_date(table0[num]);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table1[num]);
}
}
//显示秒
void display_S(uchar S)
{
write_com(0x80);
write_date('0'+S/10);
write_date('0'+S%10);
}
//显示分
void display_F(uint F1,uint F2)
{
write_com(0x80+0x05);
write_date('0'+F1/100);
write_date('0'+F1/10%10);
write_date('0'+F1%10);
write_date('0'+F2/100);
write_date('0'+F2/10%10);
write_date('0'+F2%10);
}
//显示里程
void display_LC(uint L1,uint L2,uint L3,uint L4) {
write_com(0x80+0x40+0x01);
write_date('0'+L1%10);//显示湿度
write_date('0'+L2/1000);
write_date('0'+L2/100%10);
write_date('0'+L2/10%10);
write_date('0'+L2%10);
write_date('0'+L3/1000);
write_date('0'+L3/100%10);
write_date('0'+L3/10%10);
write_date('0'+L3%10);
write_date('0'+L4/1000);
write_date('0'+L4/100%10);
write_date('0'+L4/10%10);
write_date('0'+L4%10);
}
5实物图
叶翔10120731
张凯强10120733。