毕业设计(文)
行车测速仪设计
Design of the Bicycle Speedometer
学生姓名 *********
学 号 **********
专业班级 *********
指导教师 **********
2013年X月
作者声明
声明呈交文导师指导进行研究工作取研究成果文中特加标注方外没剽窃抄袭造假等违反学术道德学术规范行没侵犯组织科研成果专利工作志研究做贡献均已文中作明确说明表示谢意毕业设计(文)引起法律结果完全承担
毕业设计(文)成果XX学邮电信息工程学院
特声明
作者专业:
作者学号:
作者签名:
年 月 日
摘
着居民生活水断提高行车仅仅普通运输代步工具成娱乐休闲锻炼首选行车测速仪够满足基需求清楚知道前速度里程时间温度等物理量文阐述种基霍尔元件行车测速仪设计
文STC89C54RD+单片机核心霍尔传感器测转数实现行车里程速度时间温度测量统计行车里程速度LCD实时显示文章详细介绍行车测速仪硬件电路软件设计硬件部分利霍尔元件行车转圈脉数传入单片机系统然单片机系统信号处理送LCD显示软件部分C语言进行编程采模块化设计思想该系统硬件电路简单子程序具通性已达设计目标
关键词:速度温度霍尔元件单片机
目 录
第1章 绪 1
11 国外行车测速仪发展现状趋势 1
12 文研究容 2
第2章 行车测速仪总体设计方案 4
21 单片机选型 4
211 单片机介绍 4
212 单片机性较 4
213 终方案 5
22 测速传感器选型 5
221 测速传感器介绍 5
222 测速传感器较 6
223 终结 6
23 温度传感器选型 7
231 温度传感器介绍 7
232 温度传感器性较 8
233 终方案 9
24 显示器选型 9
241 显示器介绍 10
242 显示器性 10
243 终方案 11
25 时钟芯片选型 12
第3章 硬件设计 13
31 单片机外围电路 13
311 单片机介绍 13
312 单片机外围电路图 15
32 速度模块设计 15
321 霍尔元件介绍 16
322 霍尔传感器硬件电路图 17
33 温度模块设计 18
331 温度传感器介绍 18
332 DS18B20硬件电路图 21
34 时钟模块设计 22
341时钟芯片介绍 22
342 DS1302硬件电路图 25
35 显示模块设计 25
351 LCD芯片介绍 26
352 LCD硬件电路图 27
第4章 软件设计 28
41 程序设计 28
42 计算速度里程程序设计 29
43 温度显示程序设计 30
44 时钟芯片程序设计 30
45 LCD1602软件设计 32
451 LCD1602时序介绍 32
452 LCD1602具体软件设计 33
第5章 测试 35
51 ProteusKeil软件简介 35
511 Proteus软件 35
512 Keil软件 35
52 应Keil软件进行程序调试 36
53 Proteus软件仿真 36
54 硬件软件联合调试 37
541 联调步骤 37
542 硬件静态调试 38
第6章 结展 40
致谢 41
参考文献 42
附录1 PROTREUS仿真图 43
附录2 源程序 44
第1章 绪
行车发明现已两百年历史两百年间类断尝试研发程中玩具式木马车转换日式新颖休闲运动行车行车发展目早交通代步工具转换成休闲娱乐运动途着居民生活水断提高行车仅仅普通运输代步工具成娱乐休闲锻炼首选希行车功更强带更方便行车里程速度表作行车辅助工具正着求迅速发展功逐渐单里程显示发展速度时间显示甚具测量骑车心跳显示骑车热量消耗等功设计采STC89C54RD+系列单片机设计种体积操作简单便携式行车速度里程表动显示前行车行走距离运行速度
11 国外行车测速仪发展现状趋势
着微型计算机性提高价格降单片机测量电机转速技术已成熟种技术目前工业生产方面测速装置生活中少少欲提高测量精度必须先测出准确转速原先控硅调速电路中采测速发电机方式已满足求必须采数字测速方法转速测量方法根脉计数实现转速测量方法M法(测频法)T法(测周期法)MPT法(频率周期法)
需采霍尔传感器应领域汽车电机手机电脑已采该器件市场未年增长较稳定新应市场足述市场相霍尔传感器全球总市场份额较稳定年增长率基保持510间种应电机部件节气门位置检测种阀体位置检测者电磁感应位置会霍尔传感器中国市场中国外厂商降低成陆续零部件中国进行设计生产进步提升中国市场霍尔传感器量着电子消费市场应越越广控制功耗成厂商面挑战面生产测试技术方面挑战
国外现已生产销售类似行车测速仪里程表简单产品功较单单单测速里程功然复杂产品测速里程功外集成GPS全球定位单次行车里程均速度时钟行车时间车轮转数未发展趋势加入MP3短信收发新闻播报通讯功等行车测速仪更加性化现代化生活化相信未测速仪会受更青睐成类社会生活中必需品
12 文研究容
课题利霍尔元件单片机等部件设计LCD液晶显示器实时显示里程速度行车速度里程表文介绍行车速度里程表设计思想电路原理方案证元件选择等容整体分硬件部分设计软件部分设计
文首先扼该课题务进行方案证包括硬件方案软件方案设计继具体介绍行车速度里程表硬件设计包括传感器选择单片机选择显示电路设计然阐述该行车速度里程表软件设计包括数处理子程序设计显示子程序设计针仿真程遇问题进行具体说明分析次设计进行系统总结
具体硬件电路包括STC89C54RD+单片机外围电路LCD显示电路等软件设计包括:芯片初始化程序定时中断采样子程序显示子程序等软件采汇编语言编写软件设计思想顶模块化设计子模块逐设计控制系统方案设计框图图11示
速度传感器
单片机
显示器
键
时钟芯片
温度传感器
图11系统框图
第2章 行车测速仪总体设计方案
行车测速仪基单片机测速系统该系统包括转速测量模块温度测试模块显示模块电源模块
21 单片机选型
单片机行车测速仪核心部分决定项设计指标关键素单片机着优势缺点通分析证选取相该设计讲相较优方案
211 单片机介绍
AT89C52美国ATMEL公司生产低电压高性CMOS 8位单片机片置通8位中央处理器(CPU)Flash存储单元功强AT89C52单片机适合许较复杂控制场合应
STC89C54RD+深圳宏晶科技生产低功耗高性价单片机采8051核部分单片机兼容功普通单片机强存储器(包括数存储器程序存储器)容量普通51 单片机更程序存储器采flash存储器方便擦写程序时带8位AD转换器采ISP线编程配备专门程序载软件直接通串口程序载单片机flash程序存储区掉电会丢失途非常广泛
212 单片机性较
AT89C52片含8K Bytes反复擦写读程序存储器(EPROM)256 字节机存取数存储器(RAM)器件采ATMEL公司高密度非易失性存储技术生产标准MCS51指令系统8052产品引脚兼容片置通8位中央处理器(CPU)Flash存储单元功强AT89C52单片机适合许较复杂控制场合应
STC89C54RD+具16K系统编程Flash 存储器1280B机存取数存储器片程序存储器含16KBFlash程序存储器片数存储器含1280字节RAM具3编程定时器具32根编程IO口线串行口具全双工编程串行通信口中断系统具8中断源4级优先权中断结构具数指针DPTR低功耗工作模式空闲模式掉电模式具编程3级程序锁定位STC89C54RD+工作电源电压典型值5VSTC89C54RD+工作频率0~80MHz
213 终方案
兼容性讲两种单片机兼容51单片机存储容量讲STC89C54RD+具更存储容量存储更数换句话说行车行驶更远距离价格功耗说STC89C54RD+具低功耗正满足现低碳理念STC89C54RD+国产AT89C52美国进口STC89C54RD+更加便宜选STC89C54RD+降低系统成文选STC89C54RD+单片机作系统控制核心
22 测速传感器选型
测速传感器行车重硬件部分测物运行速度进行测量转化成输出信号传感器测速传感器包括测量线速度传感器测量转速度传感器测量转速方式常见:霍尔传感器(例提种)光电传感器(分反射式透射式)旋转编码器等等
221 测速传感器介绍
LG916传感器投光部受光部放器组成体构造传感器发出光(红外线)旋转轴产生反射光检测反射光非接触式转速传感器
霍尔传感器44E系列Allegro MicroSystems公司生产宽温开关型霍尔效应传感器工作温度范围达40℃~150℃电压调整电路反相电源保护电路霍尔元件温度补偿电路微信号放器施密特触发器OC门输出极构成通拉电阻输出接入CMOS逻辑电路测量动化计算机信息技术等领域广泛应
222 测速传感器较
LG916传感器传感器发出光(红外线)旋转轴产生反射光检测反射光非接触式转速传感器旋转轴通常贴反射标签LG916尖端部玻璃纤维束玻璃纤维束发出红外线光时接受反射回光传感器装型放器波形整形矩形波输出信号处理输出计数器脉计数装置进行转速测量测量距离20mm (12mm见方专反射标签)
霍尔效应原理块永久磁钢固定电机转轴转盘边转盘侧轴旋转磁钢着步旋转转盘方安装霍尔器件转盘轴旋转时受磁钢产生磁场影响霍尔器件输出脉信号频率转速成正脉信号周期电机转速式11关系:
VN×L (11)
式中:V行车车速N车轮单位时间脉数L车轮周长根式计算出行车前速度
223 终结
综述LG916传感器玻璃纤维束发出红外线光玻璃纤维束较脆容易坏便长期测量距离20mm (12mm见方专反射标签)测量距离太短加反射标签面积较易脱落利固定长期霍尔器件作种转速测量系统传感器结磁场敏感结构简单体积频率响应宽输出电压变化结构牢固重量轻寿命长安装方便等优点文采霍尔传感器检测脉信号
23 温度传感器选型
温度传感器行车测速仪体格拓展功重硬件温度传感器利物质种物理性质温度变化规律温度转换电量传感器品种繁工业应中温度传感器分类方式方法种
231 温度传感器介绍
DS18B20美国DALLAS半导体公司继DS1820新推出种改进型智温度传感器传统热敏电阻相够直接读出测温度根实际求通简单编程实现9~12位数字值读数方式DS18B20数字温度传感器接线方便封装成应种场合道式螺纹式磁铁吸附式锈钢封装式型号种样LTM8877LTM8874等等根应场合改变外观封装DS18B20电缆沟测温高炉水循环测温锅炉测温机房测温农业棚测温洁净室测温弹药库测温等种非极限温度场合耐磨耐碰体积方便封装形式样适种狭空间设备数字测温控制领域
AD590AD公司利PN结正电流温度关系制成电流输出型两端温度传感器适150°C目前采传统电气温度传感器温度检测应低成单芯片集成电路需支持电路特点成许温度测量应种吸引力备选方案应AD590时需线性化电路精密电压放器电阻测量电路冷结补偿温度测量外分立器件温度补偿校正绝温度成例偏置流速测量液位检测风速测定等AD590裸片形式提供适合受保护环境混合电路快速温度测量
232 温度传感器性较
DS18B20分9375 ms750 ms完成9位12位数字量DS18B20读出信息写入DS18B20信息仅需根口线(单线接口)读写温度变换功率源数总线总线身挂接DS18B20供电需额外电源DS18B20系统结构更趋简单性更高测温精度转换时间传输距离分辨率等方面较DS1820改进户带更方便更令满意效果
特点:
(1)独特单线接口仅需端口引脚进行通信
(2)DS18B20联惟总线实现点组网功
(3)通数线供电电压范围30~55V
(4)测温范围-55℃~+125℃固测温误差(注意分辨率里前错误)05℃
(5)零机功耗
(6)报警搜索命令识标志超程序限定温度(温度报警条件)器件
(7)负电压特性电源极性接反时温度计会发热烧毁正常工作
AD5904V30 V电源电压范围该器件充高阻抗恒流调节器调节系数1µAK片薄膜电阻激光调整校准器件该器件2982K (25°C)时输出2982 µA电流适150°C目前采传统电气温度传感器温度检测应低成单芯片集成电路需支持电路特点成许温度测量应种吸引力备选方案应AD590时需线性化电路精密电压放器电阻测量电路冷结补偿温度测量外分立器件温度补偿校正绝温度成例偏置流速测量液位检测风速测定等AD590裸片形式提供适合受保护环境混合电路快速温度测量AD590具特征:
(1)流器件电流(μA) 等器件处环境热力学温度(开尔文) 度数式12:
IrT1 (12)
式中Ir—流器件(AD590) 电流单位μAT—热力学温度单位K
(2)AD590测温范围 55℃~+150℃
(3)AD590电源电压范围4~30 V承受44 V正电压20 V反电压器件反接会损坏
(4)输出电阻710 mΩ
(5)精度高AD590 55℃~+150℃范围非线性误差仅±03℃
233 终方案
电路构造讲AD590需模拟转数字电路电路繁DS18B20需元件电路简单测量精度测温点数说AD590测量精确度较差测温点数量少DS18B20采单总线构造时连接温点信号线长度讲AD590线阻求适合长距离传输DS18B20信号线距离远适合长距离传输成角度说DS18B20AD590便宜DS18B20减少成然DS18B20温度范围-55℃~+125℃间测量行车行驶时环境温度已足够总体说DS18B20优点弥补AD590缺点文采DS18B20温度传感器设计测温芯片
24 显示器选型
显示器行车测速仪重组成部分没显示器系统测出参数法显示供者知显示器性行显示位数够法达测量精度显示器选取关重
241 显示器介绍
深圳市晶美光电科技限公司家集研发设计生产销售体专业研制生产数码LED数码led数码实际七发光组成8字形构成加数点8段分字母abcdefgdp表示数码特定段加电压特定段会发亮形成眼睛字样楼体墙面广告招牌高档DISCO酒吧夜总会会门头广告牌等特适合应广告牌背景立交桥河湖护栏建筑物轮廓等型动感光带中产生彩虹般绚丽效果 护栏装饰建筑物轮廓起突出美彩亮化建筑物效果
1602液晶1602字符型液晶种专门显示字母数字符号等点阵型液晶模块干5X7者5X11等点阵字符位组成点阵字符位显示字符位间点距间隔行间间隔起字符间距行间距作正显示图形(定义CGRAM显示效果)1602LCD指显示容16X2显示两行行16字符液晶模块(显示字符数字)市面字符液晶数基HD44780液晶芯片控制原理完全相基HD44780写控制程序方便应市面部分字符型液晶
242 显示器性
LED数码般亮超亮等分05寸1寸等尺寸尺寸数码显示笔画常发光二极组成尺寸数码二发光二极组成般情况单发光二极压降18V左右电流超30mA发光二极阳极连接起连接电源正极称阳数码发光二极阴极连接起连接电源负极称阴数码常LED数码显示数字字符0123456789ABCDEF性:防水防尘防紫外线耐压耐破裂耐高低温耐燃超强抗击老化防护等级:IP65级工作电压范围:24V~220V工作功率:8~12W工作环境:40度~+75度正常寿命:>80000时
图21 LED外形图 图 22 LCD1602外形图
1602采标准16脚接口中:第1脚:VSS电源第2脚:VCC接5V电源正极第3脚:V0液晶显示器度调整端接正电源时度弱接电源时度高(度高时会 产生鬼影时通10K电位器调整度)第4脚:RS寄存器选择高电1时选择数寄存器低电0时选择指令寄存器第5脚:RW读写信号线高电(1)时进行读操作低电(0)时进行写操作第6脚:E(EN)端(enable)端高电(1)时读取信息负跳变时执行指令第7~14脚:D0~D78位双数端第15~16脚:空脚背灯电源15脚背光正极16脚背光负极33V5V工作电压度调含复位电路提供种控制命令:清屏字符闪烁光标闪烁显示移位等种功80字节显示数存储器DDRAM建1925X7点阵字型字符发生器CGROM8户定义5X7字符发生器CGRAM微功耗体积显示容丰富超薄轻巧常袖珍式仪表低功耗应系统中
243 终方案
完全数码做显示该方案求少2排6位数码占空间适合便携式设备耗费资源1602般显示字母数字符号显示16×2字符具显示效果字符显示字符左右右左显示等等显示效果简单价格低廉考虑设计中需汉字显示显示字符足够系统采1602液晶显示
25 时钟芯片选型
时钟芯片行车测速仪重器件整系统否正常运行取决时钟芯片时钟设置系统单片机程序运作首先设置时钟面介绍系统时钟芯片选取
时钟芯片种类非常置晶振充电电池类型外置晶振类型现流行DS1302 DS1307PCF8485SB2068等等DS1302时钟芯片电路接口简单价格低廉方便广泛采系统中采DS1302时钟芯片该实时时钟电路DALLAS公司种具涓细电流充电力电路特点采串行数传输掉电保护电源提供编程充电功关闭充电功采普通32768kHz晶振
DS1302时钟芯片美国DALLAS公司推出种高性低功耗带RAM实时时钟电路年月日周日时分秒进行计时具闰年补偿功工作电压25V~55VDS1302部31×8时性存放数RAM寄存器DS1302DS1202升级产品DS1202兼容增加电源背电源双电源引脚时提供背电源进行涓细电流充电力
第3章 硬件设计
系统分成四模块分速度模块温度模块时钟模块显示模块温度速度模块通外部传感器相应参数进行测量物理信号转换电信号输入单片机单片机输入电信号进行处理通显示器输出显示
31 单片机外围电路
单片机部分设计核心部分单片机部分设计坏直接影响整设机工作情况单片机选择电路设计非常重节单片机介绍单片机外围电路设计两部分进行介绍
311 单片机介绍
STC89C54RD+具16K系统编程Flash 存储器1280B机存取数存储器
(1)片程序存储器含16KBFlash程序存储器
(2) 片数存储器含1280字节RAM
(3) 具3编程定时器
(4) 具32根编程IO口线
(5) 串行口具全双工编程串行通信口
(6) 中断系统具8中断源4级优先权中断结构
(7) 具数指针DPTR
(8) 低功耗工作模式空闲模式掉电模式
(9) 具编程3级程序锁定位
(10) STC89C54RD+工作电源电压典型值5V
(11) STC89C54RD+工作频率0~80MHz
STC89C54RD+单片机40 脚双列直插封装8 位通微处理器图31示引脚功分四部分面进行简单介绍
(1) 电源引脚VCCVSS
(2) 外接晶体引脚XTAL1XTAL2
(3) 控制电源复引脚RSTALEPSENEAVPP
(4) 输入输出(IO)引脚P0P1P2P3(32根)
P0口双8位三态IO口外接存储器时址总线低8位数总线复吸收电流方式驱动8LS型TTL负载P0口作输入输出口时需外界接入拉电阻P1口准双8位IO口种接口输出没高阻状态输入锁存真正双IO口P1口驱动(吸收输出电流)4LS型TTL负载P10引脚第二功T2定时计数器外部输入P11引脚第二功T2捕捉重装触发T2外部控制端Flash编程程序验证时接收低8位址 P2口准双8位IO口访问外部存储器时作扩展电路高8位址总线送出高8位址Flash编程程序验证期间接收高8位址P2驱动(吸收输出电流)4LS型TTL负载P3口准双8位IO口MCS51中8引脚第二功复双功口P3驱动4LS型TTL负载
图31 STC89C54RD+引脚图
312 单片机外围电路图
单片机外围电路图图32示设计采STC单片机系列单片机具掉电动复位功单片机中未设计复位电路仿真中单片机晶振属性中调仿真电路中没晶振电路实际硬件电路中晶振必须接入系统采12MHz晶振图中两键调节时钟芯片时间仿真图中没霍尔元件功模拟P32接入数字激励源代实际电路中霍尔传感器
图32 单片机外围电路图
32 速度模块设计
速度模块设计缺少部分速度模块设计坏直接影响设计测试结果测速芯片电路选择尤重节两方面进行讲解分:霍尔元件介绍霍尔元件硬件电路电路
321 霍尔元件介绍
根霍尔效应半导体材料制成元件霍尔元件该芯片具尺寸稳定性灵敏度高等特点A3144E系列单极高温霍尔效应集成传感器稳压电源霍尔电压发生器差分放器施密特触发器输出放器组成磁敏传感电路输入磁感应强度输出数字电压讯号种单磁极工作磁敏电路适矩形者柱形磁体工作应汽车工业军事工程中霍尔传感器外形图磁场作关系图33示
a 霍尔元件磁钢 b 脚图
图33 霍尔传感器外形图
磁场磁钢提供霍尔传感器磁钢需配霍尔传感器测量原理转速测量方法:
1 霍尔传感器测量原理
测量电机转速第步电机转速表示单片机识脉信号进行脉计数霍尔器件作种转速测量系统传感器结构牢固体积重量轻寿命长安装方便等优点选霍尔传感器检测脉信号基测量原理图34示电机转动时带动传感器运动产生应频率脉信号信号处理输出计数器脉计数装置进行转速测量
图34霍尔传感器测量原理
2 转速测量方法
转速测量方法根脉计数实现转速测量方法M法(测频法)T法(测周期法)MPT法(频率周期法)系统采第种方法(测频法)转速单位时间转数衡量变换程中数规律重复运动根霍尔效应原理块永久磁钢固定行车轮毂着行车轮子转动磁钢着轮子步转动行车车体安装霍尔传感器车轮转动时受磁钢影响霍尔传感器会输出脉信号频率转速成正脉信号周期电机转速试(11)关系:
VN×L (11)
式中:V行车车速N车轮单位时间脉数L车轮周长根式计算出行车前速度
霍尔器件半导体材料制成种薄片垂直面方施加外磁场B面方两端加外电场电子磁场中运动结果器件两侧面间产生霍尔电势外磁场电流成例霍尔开关传感器体积触点动态特性寿命长等特点测量转动物体旋转速度领域广泛应
322 霍尔传感器硬件电路图
霍尔传感器硬件电路图图35示测量外界磁信号车轮转圈霍尔传感器感应固定车轮磁钢发出信号中out引脚霍尔传感器脉输出引脚必须接入拉电阻
图35 霍尔传感器电路图
33 温度模块设计
温度模块设计拓展部分样重部分节温度传感器介绍DS18B20硬件电路图两部分进行阐述
331 温度传感器介绍
DS18B20引脚图36示
图36 DS18B20
DS18B20引脚定义:
(1) DQ数字信号输入输出端
(2) GND电源
(3) VCC外接供电电源输入端(寄生电源接线方式时接)
DS18B20数部件:
(1) 光刻ROM中64位序列号出厂前光刻作DS18B20址序列码
(2) DS18B20中温度传感器完成温度测量表31示00625℃LSB形式表达中S符号位
表31 DS18B20温度值格式表
LS Byte
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
26
25
24
23
22
21
20
21
MS Byte
bit15
bit14
bit13
bit12
bit11
bit10
bit9
bit8
S
S
S
S
S
S
S
S
12位转化12位数存储DS18B20两8特RAM中二进制中前面5位符号位果测温度05位0测数值00625实际温度果温度05位1测数值需取反加100625实际温度 例+125℃数字输出07D0H250625℃数字输出FF6FH表32DS18B20温度表
表32 DS18B20温度表
TEMPERATURE
DIGITAL OUTPUT (Binary)
DIGITAL OUTPUT (Hex)
+855℃
0000 0000 1010 1010
00AAh
+250℃
0000 0000 0011 0010
0032h
+05℃
0000 0000 0000 0001
0001h
0℃
0000 0000 0000 0000
0000h
05℃
1111 1111 1111 1111
FFFFh
250℃
1111 1111 1100 1110
FFCEh
550℃
1111 1111 1001 0010
FF92h
DS18B20温度传感器部存储器包括高速暂存RAM非易失性电擦EEPROM者存放高温度低温度触发器THTL结构寄存器高速暂存存储器配置寄存器外8字节组成分配图37示中温度信息(第12字节)THTL值(第34字节)第6~8字节未表现全逻辑1第9字节读出前面8字节CRC码保证通信正确
温度灵敏元件
低温触发器TL
高温触发器TH
配置寄存器
存储器控制器
8位CRC生成器
高速缓存储存器
64位ROM单线接口
电源检测
图37 DS18B20部储存器结构图
根DS18B20通讯协议机(单片机)控制DS18B20完成温度转换必须三步骤:次读写前DS18B20进行复位操作复位成功发送条ROM指令发送RAM指令样DS18B20进行预定操作复位求CPU数线拉500微秒然释放DS18B20收信号等16~60微秒左右发出60~240微秒存低脉CPU收信号表示复位成功面具体讲述复位读写时序ROM指令表明机寻址者DS18B20中某某者读取某DS18B2064位址RAM指令机DS18B20部RAM操作指令集表33表34示
表33 RAM指令表
指令
约定代码
100功
温度转换
44H
启动DS18B20进行温度转换12位转换时长750ms(9位9375ms)结果存入部9字节ROM中
读暂存器
0BEH
读部RAM 9字节容
写暂存器
4EH
发出部RAM34字节写限温度数命令紧该命令传送两字节数
复制暂存器
48H
RAM第34字节容复制EEPROM中
重读EEPROM
0B8H
EEPROM中容复制RAM中第34字节
读供电方式
0B4H
读DS18B20供电模式寄生供电时DS18B20发送0外接电源供电DS18B20发送1
表34 ROM指令表
指令
代码
操作说明
温度转换
44H
开始启动DS18B20温度转换
读ROM
33H
读ROM容
匹配ROM
55H
指定器件操作
跳
CCH
跳器件识
读暂存器
BEH
读暂存器容
写暂存器
4EH
数写入暂存器THTL字节
复制暂存器
48H
暂存器THTL字节写ROM
重写调RAM
B8H
RAM中THTL字节写暂存器THTL字节
332 DS18B20硬件电路图
DS18B20电路图图38示测量外界环境温度模块通串行通信数送单片机处理显示中DQ串行数输出口必须加入拉电阻VCCGND分接入电源接电路连接简单数输出口编程较复杂
图38 DS18B20电路图
34 时钟模块设计
时钟模块式设计运作非常重部分设计部分工作先序部分配合需时钟模块统调配时钟模块设计中着取代位结时钟芯片DS1302介绍DS1302硬件电路两方面进行介绍
341时钟芯片介绍
DS1302引脚排列中VCC1电源VCC2备电源电源关闭情况保持时钟连续运行DS1302VCC1VCC2两者中较者供电X1X2振荡源外接32768kHz晶振RST复位片选线通RST输入驱动置高电启动数传送RST输入两种功:首先RST接通控制逻辑允许址命令序列送入移位寄存器次RST提供终止单字节字节数传送手段RST高电时数传送初始化允许DS1302进行操作果RST置低电会终止次数传送IO引脚变高阻态电运行时VCC>20V前RST必须保持低电SCLK低电时RST置高电IO串行数输入输出端面详细说明SCLK时钟输入端DS1302引脚功图图39示
图39 DS1302引脚图
DS1302控制字表35示
表35 DS1302控制字
7
6
5
4
3
2
1
0
1
RAM
A4
A3
A2
A1
A0
RD
(1) 控制字高效位位7:必须逻辑1果0数写入DS1302中
(2) 位6:果0表示存取日历时钟数1表示存取RAM数
(3) 位5位1(A4~A0):指示操作单元址
(4) 位0(低效位):0表示进行写操作1表示进行读操作
控制字总低位开始输出控制字指令输入SCLK时钟升时数写入DS1302数输入低位(0位)开始样紧8位控制字指令SCLK脉降读出DS1302数读出数低位高位
DS1302关日历时间寄存器表36示
表36 DS1302日历时间寄存器
R
W
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
RANGE
81h
80h
CH
10Seconds
Seconds
0059
83h
82h
10Minutes
Minutes
0059
85h
84h
1224
0
10
Hour
Hour
112023
AM PM
87h
86h
0
0
10Date
Date
131
89h
88h
0
0
0
10Mon
Mon
112
8Bh
8Ah
0
0
0
0
0
Day
17
8Dh
8Ch
10Year
Year
0099
8Fh
8Eh
WP
0
0
0
0
0
0
0
—
91h
90h
TCS
TCS
TCS
TCS
DS
DS
RS
RS
—
表36DS1302部7时间日期关寄存器图写保护寄存器做初始设置时间数写入寄存器然断读取寄存器获取实时时间寄存器说明:
(1) 秒寄存器(81h80h)位7定义时钟暂停标志(CH)初始电时该位置1时钟振荡器停止DS1302处低功耗状态秒寄存器该位置改写0时时钟开始运行
(2) 时寄存器(85h84h)位7定义DS1302运行12时模式24时模式高时选择12时模式12时模式时位51时表示PM24时模式时位5第二时十位
(3) 控制寄存器(8Fh8Eh)位7写保护位(WP)7位均置0时钟RAM写操作前WP位必须0WP位1时写保护位防止寄存器写操作说电路电初始态WP1时改写面时间寄存器首先WP改写0进行寄存器写操作
谓突发模式指次传送字节时钟信号RAM数突发模式寄存器表37示
表37 DS1302工作模式寄存器
工作模式寄存器
读寄存器
写寄存器
时钟突发模式寄存器
CLOCK BURST
BFh
BEh
RAM突发模式寄存器
RAM BURST
FFh
FEh
DS1302 微处理器进行数交换时首先微处理器电路发送命令字节命令字节高位Write Protect(D7)必须逻辑1果D70禁止写DS1302写保护D60指定时钟数D61指定RAM数D5~D1指定输入输出特定寄存器低位LSB(D0)逻辑0指定写操作(输入)D01指定读操作(输出)
DS1302时钟日历RAM进行数传送时DS1302必须首先发送命令字节进行单字节传送8位命令字节传送结束2SCLK周期升输入数字节8SCLK周期降输出数字节
DS1302RAM相关寄存器分两类:类单RAM单元31单元组态8位字节命令控制字C0H~FDH中奇数读操作偶数写操作类突发方式RAM寄存器方式次性读写RAM31字节
特说明备电源B1电池者超级电容器(01F)然DS1302电源掉电耗电果长时间保证时钟正常选型充电电池老式电脑板36V充电电池果断电时间较短时漏电较普通电解电容器代100 μF保证1时正常走时DS1302第次加电必须进行初始化操作初始化正常方法调整时间DS1302 存时钟精度高易受环境影响出现时钟混乱等缺点
342 DS1302硬件电路图
DS1302电路图图310示系统时钟模块实时显示时间实际DS1302引脚图仿真图中引脚排列仿真功基样仿真图排列方式更便电路连接图中X1(引脚2)X2(引脚3)接入晶振晶振振荡频率32768Hz
图310VCC1(引脚1)VCC2(引脚8)电源引脚实际电路中VCC1接入5V电源VCC2接入电压3V纽扣电池
图310 DS1302电路图
35 显示模块设计
显示模块设计重部分节两方面显示模块进行介绍首先介绍LCD1602芯片特性优点稍介绍LCD1602 外部电路图
351 LCD芯片介绍
1602液晶显示器点收信号直保持种色彩亮度恒定发光阴极射线显示器(CRT)样需断刷新新亮点液晶显示器画质高会闪烁显示器数字式单片机系统接口更加简单操作更加方便通显示屏电极控制液晶分子状态达显示目重量相显示面积传统显示器轻功耗消耗部电极驱动IC耗电量显示器少LCD接口表38示
(1)显示容量16×2字符
(2)芯片工作电压45—55V
(3)工作电流20mA(50V)
(4)模块佳工作电压50V
(5)字符尺寸295×435(W×H)mm
表38 LCD引脚引脚说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源
9
D2
数
2
VDD
电源正极
10
D3
数
3
VL
液晶显示偏压
11
D4
数
4
RS
数命令选择
12
D5
数
5
RW
读写选择
13
D6
数
6
E
信号
14
D7
数
7
D0
数
15
BLA
背光源正极
8
D1
数
16
BLK
背光源负极
352 LCD硬件连接图
图311 LCD电路连接图
图311中引脚3(VEE)液晶显示偏压调节显示屏亮度仿真电路中需接入电位器实际硬件电路连接图中必须接入电位器调节显示亮度否LCD法正常显示
仿真图中LCD1602元件14引脚实际LCD160216引脚仿真图中LCD元件缺少BLA(第15引脚)BLK(第16引脚)实际电路中两引脚必须分接电源正极电源负极否LCD显示屏亮度足正常显示数
第4章 软件设计
软件设计课题控制核心部分说软件硬件相辅相成光软件没硬件系统法运作光硬件没软件系统法运作课题软件设计包括三部分分计算速度里程程序设计温度显示程序设计时钟芯片程序设计面便逐介绍系统部分软件设计
41 程序设计
软件设计根实际工艺求进行编写求DS18B20温度传感器霍尔传感器DS1302参数值送单片机中温度值时间速度等参数送LCD显示器中进行显示
程序工作程图41示
初始化
开中断
温度时钟工作
计算速度里程
显示时间温度速度里程
开始
图41 程序流程图
42 计算速度里程程序设计
单片机获取霍尔传感器感应脉数时立马算出行车速度里程数学计算出系统中默认车轮直径22m者根行车直径更改程序里数理知识水限没成功设计外界输入设定者行车车轮直径数设计根单片机秒钟接收脉数计算行车速度秒速度相加出行车里程Proteus仿真结果计算结果完全相
程序设计流程图图42示
读秒寄存器位
判断否秒
读计数器
开计数器
否
子程序开始
子程序结束
开始计数
关计数器
计算速度里程
图42计算速度里程流程图
43 温度显示程序设计
温度传感器采DS18B20进行温度测试通LCD1602进行显示DS18B20数输出线条必须采位读取读取温度值分存入高八位低八位寄存器中输出显示时必须十六进制数值转换成十进制输出LCD显示屏中
程序流程图图43示
准备
初始化
复位
写命令
读温度
显示
计算
图43温度显示流程图
44 时钟芯片程序设计
时钟芯片采DS1302该时钟芯片置年月日星期时分秒寄存器时间数分存储寄存器中外置晶振作芯片时钟周期外部晶振频率32768KHz工作频率时间应读取时间时时间寄存器中读取数然进行显示调时功通脉检测键次该数口电零数加键者松手颤抖现象需进行抖松手检测统称抖般进行抖松手检测两种方法:硬件抖二软件抖硬件抖电路复杂繁琐设计中采软件抖法该法通软件延时方法软件抖法颤抖时间延时掩盖似颤抖现象设计时欠考虑调时键设计2分时分钟键直加直0未设计减键调试中发现较麻烦未实现性化设计求
时间显示调试控制程序流程图图44示
准备
初始化
复位信号置0
时钟脉信号置0
数读取
复位信号置1
时钟脉信号置1
显示
数分离转换
结束
准备
键
数读取
初始化
松手检测
数加
数分离转换
结束
显示
图44 时间显示调试控制程序流程图
45 LCD1602软件设计
LCD1602软件设计系统软件设计重部分进行软件编程LCD1602正常完成显示设计参数功LCD1602软件设计包括两部分分:LCD1602时序介绍LCD1602具体软件设计面分介绍两方面
451 LCD1602时序介绍
图45LCD1602读操作时序图
图45 LCD1602读操作时序图
图46LCD1602写操作时序图
图46 LCD1602写操作时序图
表41LCD1602时序参数
表41 LCD1602时序参数
时序参数
符号
极限值
单位
测试条件
值
典型值
值
E信号周期
t
400
ns
引脚E
E脉宽度
t
150
ns
E升降时间
tt
25
ns
址建立时间
t
30
ns
引脚ERSRW
址保持时间
t
10
ns
数建立时间(读操作)
t
100
ns
引脚DB0~DB7
数保持时间(读操作)
t
20
ns
数建立时间(写操作)
t
40
ns
数保持时间(写操作)
t
10
ns
452 LCD1602具体软件设计
LCD1602软件设计系统软件设计重部分图47LCD1602液晶显示器软件设计流程图根图清楚LCD1602液晶显示器工作流程便轻松LCD1602进行编程实现实时显示速度里程温度骑车时间
继续扫描发出警报
开始
LCD1602初始化
卡接?
扫描键
延时消抖
确定键值
密码正确?
释放键?
键值转化ASII码存入寄存器
键值入栈保护
结束
显示
LCD1602写命令
扫描卡效性
N
N
N
N
Y
Y
Y
Y
Y
图47 LCD1602液晶显示器软件设计流程图
第5章 测试
测试设计重部分检验改设计否够达预期性指标确定方案行性介绍仿真软件仿真测试方法
51 ProteusKeil软件简介
511 Proteus软件
Proteus软件种低投资电子设计动化软件提供仿真数字模拟交流直流等数千种元器件达30元件库Proteus软件提供种现实存虚拟仪器仪表外Proteus提供图形显示功线路变化信号图形方式实时显示出虚拟仪器仪表具理想参数指标例极高输入阻抗极低输出阻抗减少仪器测量结果影响Proteus软件提供丰富测试信号电路测试测试信号包括模拟信号数字信号提供Schematic DrawingSPICE仿真PCB设计功时仿真单片机周边设备仿真51系列AVRPIC等常MCU提供周边设备仿真例LED示波器等Proteus提供量元件库RAMROM键盘马达LEDLCDADDA部分SPI器件部分IIC器件编译方面支持KeilMPLAB等编译器台计算机套电子仿真软件加虚拟实验教程相设备先进实验室虚代实软代硬建立完善虚拟实验室计算机学电工基础模拟电路数字电路单片机应系统等课程进行电路设计仿真调试等
512 Keil软件
KeilC51美国Keil Software公司出品51系列兼容单片机C语言软件开发系统汇编相C语言功结构性读性维护性明显优势易学易汇编语言C开发体会更加深刻
KeilC51软件提供丰富库函数功强集成开发调试工具全Windows 界面外重点编译生成汇编代码体会KeilC51 生成目标代码效率非常高数语句生成汇编代码紧凑容易理解开发型软件时更体现高级语言优势UvisionIshell分C51 for WindowsFor Dos集成开发环境(IDE)完成编辑编译连接调试仿真等整开发流程开发员IDE 身编辑器编辑C汇编源文件然分C51A51编译器编译生成目标文件(OBJ)目标文件LIB51创建生成库文件库文件起L51连接定位生成绝目标文件(ABSABS文件OH51转换成标准Hex文件供调试器DScope51TScope51进行源代码级调试仿真器直接目标板进行调试直接写入程序存贮器EPROM中
52 应Keil软件进行程序调试
软件调试必须开发系统支持进行先分调试通模块程序然调试中断服务程序调试程序部分连接进行调试调试范围逐步增加必中间信号先做设定通常交叉单步运行断点运行连续运行等种方式次执行完毕检查CPU执行现场RAM关容IO接口状态等发现问题解决问题直全部通
首先新建工程项目文件次工程选择目标器件次工程项目设置软硬件调试环境创建源程序文件输入程序代码保存创建源程序项目文件源程序文件添加项目中
53 Proteus软件仿真
原理图原理图编辑窗口中蓝色方框绘制完成通文件中新建设计选项调整原理图设计页面绘制原理图时首先应根需选取元器件Proteus库中提供量元器件原理图符号利Proteus搜索功方便查找需元器件
首先根需选择器件单击元器件列表窗口边钮P弹出图31示元器件选择窗口该窗口左方关键字栏键入STC89C54RD+窗口中间结果栏显示出元器件库中STC89C54RD+单片机芯片选择中STC89C54RD+窗口右方显示出STC89C54RD+图形符号时显示该器件虚拟仿真模型单击确定钮STC89C54RD+ 出现器件列表窗口方法选择需元器件
器件选择完毕开始绘制原理图先鼠标器件选择窗口选中需器件预览窗口出现该器件图标鼠标指编辑窗口单击左键选中器件放置原理图中
放置电源线端时终端钮栏中选取两元器件间进行连线方式
简单先鼠标指第器件连接点单击左键鼠标移器件连接点单击左键两点连接起相隔较远直接连线方便器件标号方式进行连接
连接部分硬件电路参见附录
54 硬件软件联合调试
硬软件联调测试核心步奏节介绍硬软件联调方法步奏
541 联调步骤
第步安装KeilProteus
第二步Proteus安装目录VDM51dll文件复制Keil安装目录C51 BIN 目录中
第三步修改Keil安装目录Toolsini文件 C51字段加入
TDRV5BINVDM51DLL(Proteus VSM Monitor51 Driver)开Proteus画出相应电路Proteus Tools 菜单中选中Use remote debug monitor
第四步Keil中编写MCU程序进入KeilProteus菜单Option for target工程名Debug选项中右栏部拉菜选中Proteus VSM Monitor51 Driver进入setting果台机IP名127001台机填台IP址端口号定8000注意:台机器运行Keil台中运行Proteus进行远程仿真
第五步Keil中进行Debug时Proteus中查直观结果硬件调试电路图买元件首先检查买回元件坏元件检测方法分进行检测定仔细认真电路图位置元件安置首先放置核心元件然放元件特注意序颠倒保证电路元器件完元器件放置误合理情况开始电路连接布线设计面包板搭件布线跨线工整硬件设计布线焊接安装完成开始进入硬件调试阶段
542 硬件静态调试
(1) 排逻辑障
显示器部分调试调试利进行首先STC89C54RD+LCD显示分离样静态方法先测试LCD显示规定电加位显示引脚显示否理致致般LCD显示器接触良致必须找出障检测STC89C54RD+电路工作否正常STC89C54RD+进行编程调试时分两步骤:第进行初始化第二STC89C54RD+LCD结合起助开发机通编制程序进行调试调试通编制应程序逻辑障说类障设计焊接程中失误造成包括错线开路短路排方法首先焊接电路板认真原理图两者否致应特注意电源系统检查防止电源短路极性错误重点检查系统总线否存相互间短路信号线路短路必时利数字万表短路测试功缩短排错时间
(2) 排元器件失效
造成类错误原两:元器件买时已坏安装错误造成器件烧坏采取检查元器件设计求型号规格安装否致保证安装误换方法排错误
(3) 排电源障
通电前定检查电源电压幅值极性否容易造成集成块损坏加电检查插件引脚电位般先检查VCCGND间电位5V~48V 间属正常高压联机仿真器调试时会损坏仿真器等时会应系统中集成块发热损坏
第6章 结展
系统设计制作工作已全部完成基达预期目求系统调试仿真结果满意动态显示显示容实时更新数准确度等方面做较时间仓促条件限设计结果存诸:显示容单数波动抗干扰力差等问题准备工作实践程积累知识验学更新知识新技术进步完善设计
文选题现已半年时间设计历程:广泛查阅资料文献综述总体思路确定方案具体化证方案确定设计制板硬件电路完成软件调试系统调试包括文定搞整程联系非常紧密程前程结果程奠定基础
致谢
首先感谢导师杨老师杨老师渊博学识认真治学态度衷钦佩段时间杨老师教诲悉心指导圆满完成毕业设计仅学知识懂许做道理相信生活裨益文导师直接关怀指导完成文选题展开文形成导师予充分关心倾注量心血导师致崇高敬意衷心感谢感谢XX学邮电信息学院感谢学校培养三年学校完善理制度良学风学知识学会做
衷感谢帮助支持关心老师学朋友表示深深谢意美祝福
参考文献
[1] 佘新 数字电子技术[第二版][M] 华中科技学出版社 20098
[2] 童诗白 华成英 模拟电子技术基础[第四版][M] 高等教育出版社 20011
[3] 韦建英 徐安静 模拟电子技术基础[M] 华中科技学出版社 20108
[4] 宋受俊 基单片机电机运动控制系统设计[J] 机电产品开发创新 2006 25(23) 5658
[5] 樊尚春 传感器技术应[M] 北京航空航天学出版社 20048
[6] 李华 单片机通接口技术[M] 北京 北京航空航天学出版社 1999
[7] 潘永雄 新编单片机原理应[M] 西安 西安电子科技学出版社 2003
[8] 楼然苗 51系列单片机设计实例[M] 北京航空航天学出版社 200303
[9] 陈享成 耿长青 基单片机LCD显示终端设计[J] 电力动化设备 2007 14 (9):1416
[10] 胡汉 单片机原理接口技术[M] 北京 清华学出版社 1999
[11] 陈伯时 电力拖动动控制系统[M] 北京 机械工业出版社 2003 103107
[12] 陈兴文 刘燕 单片机应系统硬件调试技巧[J] 中国测控网 20093 (23) 2325
[13] 立民 单片机高级教程应设计[M] 北京航空航天学出版社 20071
[14] 邵显涛 DS18B20集成温度传感器原理应[J] 电子测试 20082 (12) 4042
[15] 徐爱钧 单片机原理实教程基Proteus虚拟仿真[M] 北京 电子工业出版社 2009
[16] 李学礼 基Proteus8051单片机实例教程[M] 北京 电子工业出版社 2008
附录1 Protreus仿真图
附录2 源程序
#include
#include
typedef unsigned char uchar
typedef unsigned int uint
typedef bit BOOL
sbit lcdrsP2^6
sbit lcdenP2^7
sbit lcdrwP2^1
sbit ds_rstP2^5
sbit ds_ioP2^4
sbit ds_clkP2^3
sbit ACC0ACC^0
sbit ACC7ACC^7
sbit dqP2^2
sbit scan P3^2 低电输入
sbit key0P1^2
sbit key1P1^3
uchar cominfnum0
int temper0
uchar code table[]0123456789
uchar ncounter 转数
long int scounter
uchar T0counter T0 50ms计数
uchar SECsign 秒信号
uchar speed 速度
uchar cflag 计数允许
uchar s0 米单位路程
uchar sk0 千米单位路程
uchar t_sec0x00sec1sec2
uchar t_min0x59min1min2
uchar t_hr0x20hr1hr2
***************************************
lcd1602初始化程序
***************************************
void delay(uint z) lcd延时程序
{
uchar xy
for(xzx>0x)
for(y110y>0y)
}
BOOL lcd_bz()
{ 测试LCD忙碌状态
BOOL result
lcdrs 0
lcdrw 1
lcden 1
_nop_()
_nop_()
_nop_()
_nop_()
result (BOOL)(P0&0x80)
lcden 0
return result
}
void write_com(uchar com) 写命令
{
lcd_bz()
lcdrs0
lcdrw0
lcden0
P0com
delay(12)
lcden1
delay(12)
lcden0
}
void write_dat1(uchar dat1) 写数
{
lcd_bz()
lcdrs1
lcdrw0
lcden0
P0dat1
delay(60)
lcden1
delay(60)
lcden0
}
void init_lcd() lcd初始化
{
lcden0
write_com(0x38)
write_com(0x0c) 光标控制
write_com(0x06)
write_com(0x01) 清屏
}
ds18b20控制程序
**
void delay18b20(uint time) ds18b20延时程序
{
uint ij
for(i0i
}
uchar reset() 复位子程序
{
uchar presence
dq0
delay18b20(29)
dq1
delay18b20(3)
presencedq
delay18b20(25)
return(presence)
}
uchar read_bit() 读位
{
uchar i
dq0
dq1
for(i0i<3i++)
return(dq)
}
void write_bit(uchar dat) 写位
{
dq0
if(dat1)
dq1
delay18b20(5)
dq1
}
uchar read_byte() 读字节
{
uchar dat0
uchar i
for(i0i<8i++)
{
if(read_bit())
dat|0x01< delay18b20(5)
}
return(dat)
}
void write_byte(uchar dat) 写字节
{
uchar ij
for(i0i<8i++)
{
j((dat>>i)&0x01)
write_bit(j)
delay18b20(5)
}
}
int read_temp() 读温度
{
uchar templtemph
int temp
reset()
write_byte(0xcc)
write_byte(0x44)
delay18b20(1000)
reset()
write_byte(0xcc)
write_byte(0xbe)
templread_byte()
temphread_byte()
temptempl+temph*256
return(temp)
}
************************************* ds1302程式模块
***************************************
void input_1byte(uchar td)
{
uchar i
ACCtd
for(i8i>0i)
{
ds_ioACC0
ds_clk1
ds_clk0
ACCACC>>1
}
}
uchar output_1byte()
{
uchar i
for(i8i>0i)
{
ACCACC>>1
ACC7ds_io
ds_clk1
ds_clk0
}
return(ACC)
}
void write_ds1302(uchar ds_adduchar ds_dat)
{
ds_rst0
ds_clk0
ds_rst1
input_1byte(ds_add)
input_1byte(ds_dat)
ds_clk1
ds_rst0
}
uchar read_ds1302(uchar ds_add)
{
uchar ds_inf
ds_rst0
ds_clk0
ds_rst1
input_1byte(ds_add)
ds_infoutput_1byte()
ds_clk1
ds_rst0
return(ds_inf)
}
***************************************ds1302初始化程序
**************************************
void init_1302()
{
write_ds1302(0x8e0x00)关闭写保护
write_ds1302(0x900xAA)定义充电
write_ds1302(0x8e0x80)开写保护
}
***************************************
测速程式
**************************************
void initialize( void ) 初始化程序
{
ncounter 0
T0counter 0
SECsign 1
speed 0
cflag 1
}
void init_timer0( void ) 定时器0初始化
{
TMOD 0x01
TH0 (6553650000)256
TL0 (6553650000)256
EA 1
IT01
EX01
ET0 1
TR0 1
}
void dis_speed( void )
{
uchar bai speed100
uchar shi speed10010
uchar ge speed10
uchar dian (speed&0x0f)*625100
write_com( 0x80+0x00 )
write_dat1( 0x30+bai )
write_dat1( 0x30+shi )
write_dat1( 0x30+ge )
write_dat1('')
write_dat1(0x30+dian)
}
void dis_mileage( void ) 里程计算
{
unsigned char qiankmbaikmshikmgekmdiankm
qiankm(110*scounter)100000000
baikm((110*scounter)100000000)10000000
shikm(((110*scounter)100000000)10000000)1000000
gekm((((110*scounter)100000000)10000000)1000000)100000
diankm(((((110*scounter)100000000)10000000)1000000)100000)10000
write_com( 0x80+0x40 ) write_dat1( 0x30+qiankm)
write_dat1( 0x30+baikm)
write_dat1( 0x30+shikm)
write_dat1( 0x30+gekm)
write_dat1('')
write_dat1(0x30+diankm)
}
unsigned char TOBCD(unsigned char asc) 十进制转换成BCD码
{
unsigned char shiweigeweiBCD
geweiasc10
shiweiasc10
BCDshiwei*16+gewei
return BCD
}
lcd_display()
{
***********************************
时间显示控制程序
************************************
t_secread_ds1302(0x81)
sec1t_sec&0x0f
sec2t_sec>>4
t_minread_ds1302(0x83)
min1t_min&0x0f
min2t_min>>4
t_minmin2*10+min1
t_hrread_ds1302(0x85)
hr1t_hr&0x0f
hr2t_hr>>4
t_hrhr2*10+hr1
write_com(0x80+0x4e)
write_dat1(table[sec2])
write_com(0x80+0x4f)
write_dat1(table[sec1])
write_com(0x80+0x4d)
write_dat1('')
write_com(0x80+0x4c)
write_dat1(table[min1])
write_com(0x80+0x4b)
write_dat1(table[min2])
write_com(0x80+0x4a)
write_dat1('')
write_com(0x80+0x49)
write_dat1(table[hr1])
write_com(0x80+0x48)
write_dat1(table[hr2])
*测速静态显示*
write_com( 0x80+0x46 )
write_dat1( 'k' )
write_com( 0x80+0x47 )
write_dat1( 'm' )
write_com( 0x80+0x05 )
write_dat1( 'm' )
write_com( 0x80+0x06 )
write_dat1( '' )
write_com( 0x80+0x07 )
write_dat1( 's' )
***************************************
温度显示控制程序
***************************************
write_com(0x80+0x09)
write_dat1('T')
delay(200)
write_com(0x80+0x0a)
write_dat1('')
delay(200)
temperread_temp()
if(temper<0)
{
temper0temper
write_com(0x80+0x0b)
write_dat1('')
delay(200)
write_com(0x80+0x0f)
write_dat1(((temper+0x01)&0x000f)*625100+0x30)
}
else
{
write_com(0x80+0x0b)
write_dat1('+')
delay(200)
write_com(0x80+0x0f)
write_dat1((temper&0x000f)*625100+0x30)
}
write_com(0x80+0x0c)
write_dat1((temper>>4)10010+0x30)
write_com(0x80+0x0d)
write_dat1((temper>>4)10+0x30)
write_com(0x80+0x0e)
write_dat1('')
***************************************
测速控制程序
*************************************
if( SECsign ) \
{
dis_mileage( )
speed 11* ncounter 周长22M两霍尔传感器圈两信号
ncounter 0
dis_speed( )
SECsign 0
TR0 1
显示完启动计数减误差
EA1
}
}
***************************************
函数
************************************
void main()
{
initialize( )
init_lcd( )
init_timer0( )
init_lcd()
delay(5)
init_1302()
delay(5)
P10xff
P30xff
while(1)
{
if(key00)
{
delay(50)
if(key00)
{
t_hr++
delay(20)
if(t_hr>24)
{
t_hr0
}
t_hrTOBCD(t_hr)
while(key0)
write_ds1302(0x8e0x00)关闭写保护
write_ds1302(0x84t_hr)时
write_ds1302(0x8e0x80)开写保护
}
}
if(key10)
{
delay(50)
if(key10)
{
t_min++
delay(20)
if(t_min>60)
{
t_min0
t_hr++
}
t_minTOBCD(t_min)
while(key1)
write_ds1302(0x8e0x00)关闭写保护
write_ds1302(0x82t_min)分
write_ds1302(0x8e0x80)开写保护
}
}
lcd_display()
}
}
void INT_timer0( void ) interrupt 1 定时计数器0中断函数
{
TH0 (6553650000)256
TL0 (6553650000)256
T0counter++
if( T0counter >20 ) 1秒发生次中断
{
TR0 0 计时1s停止
T0counter 0
SECsign 1
EA0
}
}
void INT_int0(void) interrupt 0
{
ncounter++
scounter++
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档