出租车计价器毕业设计论文


     编号

    XX职业技术学院

    毕业文

    题 目
    功出租车计价器

    学生姓名

    学 号

    系 部
    电 子 工 程 系
    专 业
    应 电 子
    班 级

    指导教师

    顾问教师



    二〇XX 年 X 月


    摘 着生活水提高科技断进步新代功出租车计价器应运生介绍种单片机AT89S52 核心功出租车计价器设计阐述软硬件设计程中关键技术处理该计价器具集计程计时计费存储查统计等种计量功具超速提醒防止司机作弊语音印显示电子钟电子温度计实现出租车计价月统计时采AT24C64 实现系统掉电时候保存单价系统时间等信息等种功已系统相该系统具超速提醒等更强功电路设计计价器实现基计价根白天黑夜中途等调节单价时计价时候作时钟司机志提供方便
    关键词:AT89S52单片机 电子温度 数黑匣子 显示 查询 票印


















    目 录
    摘 I
    第章 绪 1
    11整体方案 1
    第二章 系统硬件设计 2
    21核心控制器选择介绍 2
    22 引脚介绍 3
    23 硬件电路设计 3
    231 电源部分设计 3
    232 测量部分设计 4
    233 数显示部分设计 5
    234 时钟部分设计 11
    235 语音提醒部分设计 12
    236 票印部分设计 14
    237 数存储部分设计 16
    238 超速提醒键设置部分设计 19
    239 DS18B20电子温度计设计 20
    第三章 系统软件设计 22
    31 程序设计 22
    311程序功介绍 22
    32 关键子程序设计 23
    321 中断T1 里程计数程序设计 23
    322 T0 中途等计时程序设计 24
    323 键盘服务程序设计 25
    324门狗应 26
    33 时钟程序计 27
    35语音提印醒程序设计 33
    36电子温度计程序设计 33
    第四章 系统调试 37
    第五章 未展结 38
    致 谢 39
    参 考 文 献 40
    附录 41


    第章 绪
    11整体方案
    整体方案设计方框图图1 示整系统单片机A T89S52 控制电路A44E 霍尔传感器电路AT24C64 存储电路DS1302 时钟电路ISD2560 语音播报电路票印电路键调整电路MAX7219 驱动显示电路电源电路组成


    图11 整体硬件设计电路示意图
    片机采集判断空车灯信号路程检测传感器信号出租车启动时单片机检测霍尔传感器脉信号进行里程计算客时单片机调实时时间芯片DS1302 程序MAX7220串口显示驱动程序12864液晶屏进行时钟等数显示空车灯掰客车时 ISD2560 语音播报电路进行语音播报1 (欢迎客坐出租车⋯) 通DS1302 获取时间信息分辨白天 晚然调A TAT24C64 程序获取白天 晚单价起始价便开始计价显示时间里程金额等信息空车灯客车时进行播报2 (谢谢次坐出租车请交金额 ⋯) 印票单片机营运数信息存储AT24C64 中等出租车次启动单次金额里程等信息清零复位 完成次计价


    第二章 系统硬件设计
    21核心控制器选择介绍
    1 AT89S52性
    A l MCS51单片机产品兼容
    B l 8K字节系统编程Flash存储器
    C l 1000次擦写周期
    D l 全静态操作:0Hz~33Hz
    E l 三级加密程序存储器
    F l 32编程IO口线
    G l 三16位定时器计数器
    H l 八中断源
    I l 全双工UART串行通道
    J l 低功耗空闲掉电模式
    K l 掉电中断唤醒
    L l 门狗定时器
    M l 双数指针
    N 掉电标识符
    2功特性描述
    AT89S52种低功耗高性CMOS8位微控制器具8K 系统编程Flash 存储器Atmel 公司高密度非易失性存储器技术制造工业80C51 产品指令引脚完全兼容片Flash允许程序存储器系统编程适常规编程器单芯片拥灵巧8 位CPU 系统编程FlashAT89S52众嵌入式控制应系统提供高灵活超效解决方案AT89S52具标准功: 8k字节Flash256字节RAM 32 位IO 口线门狗定时器2 数指针三16 位定时器计数器6量2级中断结构全双工串行口片晶振时钟电路外AT89S52 降0Hz 静态逻辑操作支持2种软件选择节电模式空闲模式CPU停止工作允许RAM定时器计数器串口

    中断继续工作掉电保护方式RAM容保存振荡器冻结单片机切工作停止直中断硬件复位止




    22 引脚介绍


    图21 引脚封装图

    23 硬件电路设计
    电源部分霍尔传感器路程测量部分数显示部分时钟部分语音播报部分票印部分数存储部分等组成部分端口分单片机AT89S52 输出口相连通单片机控制实现计价器功实现

    231 电源部分设计
    计价器工作环境较差求抗振动抗高低温抗潮湿抗电磁干扰等力特电源方面干扰出租车启动时发动机火电瓶充电等造成输入计价器+ 12 V 电源稳定采+ 12 V电瓶电源滤波电源稳压理芯片7805 + 5 V稳定电压输出保证整系统够正常工作图331 示

    图22电源部分电路


    232 测量部分设计
    1A44E霍尔传感器介绍
    A44E集成霍耳开关A44E集成霍耳开关稳压器A霍耳电势发生器(硅霍耳片)(mT)差分放器C施密特触发器DOC门输出E 五基部分组成输入端输入电压VCC稳压器稳压加霍耳电势发生器两端根霍耳效应原理霍耳片处磁场中时垂直磁场方通电流二者相垂直方会产生霍耳电势差H V 输出该H V信号放器放送施密特触发器整形成方波输送OC门输出施加磁场达工作点(BOP)时触发器输出高电压(相电位)三极导通时OC门输出端输出低电压通常称种状态开施加磁场达释放点(BrP)时触发器输出低电压三极截止OC门输出高电压种状态关样两次电压变换霍耳开关完成次开关动作BOPBrP  差值定差值BH BOP BrP称磁滞差值V 0保持变开关输出稳定集电成霍耳开关传感器优良特性
    2A44E霍尔传感器应
    出租车中需准确获车轮转动路程计量信号装置标准脉信号送入单片机定时 计数器T1 P3 5 引脚利单片机T1 计数功完成100 次计数产生中断完成路程测量(设车轮周长1 m 霍尔传感器产生100 脉便表示车已行程0 1 km 根实际情况程序中进行设置) 汽车联轴器圆周间隔嵌入磁钢霍尔传感器集成芯片A44E 检测输出脉工作原理图24 示霍尔传感器集成芯片A44E 信号转换电压放整形输出等功增加抗干扰力74L S14 信号整形通光偶送入P3 5 引脚图5 示电路中防止司机作弊采加密传感器方法先霍尔传感器采集计数脉加密计费脉密文方式传输解密明文脉传送计价器计费密码传感器中加密器解码器发送密码加密器解密器固密码相时解码器计价器发送计数脉计价器计费密码传感器提高计价器计费性法出租车司机法车费增加时司机私更换计价器传感器实现计价器国家计量部门统安装维修年检统理

    图24 A44E霍尔传感器工作原理示意图

    图25 A44E 霍尔传感器接口电路

    233 数显示部分设计
    12864液晶显示
    1概述
    FYD128640402B种具4位8位行2线3线串行种接口方式部含国标级二级简体中文字库点阵图形液晶显示模块显示分辨率128×64 置819216*16点汉字12816*8点ASCII字符集利该模块灵活接口方式简单方便操作指令构成全中文机交互图形界面显示8×4行16×16点阵汉字 完成图形显示低电压低功耗显著特点该模块构成液晶显示方案类型图形点阵液晶显示模块相硬件电路结构显示程序简洁该模块价格略低相点阵图形液晶模块
     基特性
    A 低电源电压(VDD+30+55V)
    B 显示分辨率128×64点
    C 置汉字字库提供819216×16点阵汉字(简繁体选)
    D 置 12816×8点阵字符
    E 2MHZ时钟频率
    F 显示方式:STN半透正显
    G 驱动方式:132DUTY15BIAS
    H 视角方:6点
    I 背光方式:侧部高亮白色LED功耗仅普通LED15—110
    J 通讯方式:串行口选
    K 置DCDC转换电路需外加负压
    L 需片选信号简化软件设计
    M 工作温度 0℃ +55℃ 存储温度 20℃ +60℃
    2模块接口说明
    表21 LCD12864接口

    *注释1:实际应中仅串口通讯模式PSB接固定低电模块J8GND焊锡短接
    *注释2:部接电复位电路需常复位场合该端悬空
    *注释3:背光模块电源模块JAJK焊锡短接
    3模块硬件构成说明
    1控制器接口信号说明:
    表22 RSRW配合选择决定控制界面4种模式:
    RS
    RW
    功说明
    L
    L
    MPU写指令指令暂存器(IR)
    L
    H
    读出忙标志(BF)址记数器(AC)状态
    H
    L
    MPU写入数数暂存器(DR)
    H
    H
    MPU数暂存器(DR)中读出数
    表23E信号
    E状态
    执行动作
    结果
    高——>低
    IO缓——>DR
    配合W进行写数指令

    DR——>IO缓
    配合R进行读数指令
    低低——>高
    动作
     
    a) 忙标志BF
    BF标志提供部工作情况BF1表示模块进行部操作时模块接受外部指令数BF0时模块准备状态时接受外部指令数利STATUS RD 指令BF读DB7总线检验模块工作状态
    b) 字型产生ROM(CGROM)
    字型产生ROM(CGROM)提供8192触发器模块屏幕显示开关控制DFF1开显示(DISPLAY ON)DDRAM 容显示屏幕DFF0关显示(DISPLAY OFF)DFF 状态指令DISPLAY ONOFFRST信号控制
    c) 显示数RAM(DDRAM)
    模块部显示数RAM提供64×2位元组空间控制4行16字(64字)中文字型显示写入显示数RAM时分显示CGROMCGRAM字型模块显示三种字型分半角英数字型(16*8)CGRAM字型CGROM中文字型三种字型选择DDRAM中写入编码选择0000H—0006H编码中(代码分00000002000400064)选择CGRAM定义字型02H—7FH编码中选择半角英数字字型A1编码动结合位元组组成两位元组编码形成中文字型编码BIG5(A140—D75F)GB(A1A0F7FFH)
    d) 字型产生RAM(CGRAM)
    字型产生RAM提供图象定义(造字)功 提供四组16×16点定义图象空间者部字型没提供图象字型行定义CGRAM中便CGROM中定义样通DDRAM显示屏幕中
    e) 址计数器AC
    址计数器贮存DDRAMCGRAM址设定指令暂存器改变读取写入DDRAMCGRAM值时址计数器值会动加RS0时RW1时址计数器值会读取DB6——DB0中
    f) 光标闪烁控制电路
    模块提供硬体光标闪烁控制电路址计数器值指定DDRAM中光标闪烁位置
    2指令表说明
    IC1接受指令前微处理器必须先确认部处非忙碌状态读取BF标志时BF需零方接受新指令果送出指令前检查BF标志前指令指令中间必须延长段较长时间等前指令确实执行完成





    3指令控制指令
    模块控制芯片提供两套控制命令基指令扩充指令表:
    指令表24:(RE0:基指令)
    指令
    指 令 码

    RS
    RW
    D7
    D6
    D5
    D4
    D3
    D2
    D1
    D0

    显示
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    DDRAM填满20H设定DDRAM址计数器(AC)00H


    0
    0
    0
    0
    0
    0
    0
    0
    1
    X
    设定DDRAM址计数器(AC)00H游标移开头原点位置指令改变DDRAM 容
    显示状态开关
    0
    0
    0
    0
    0
    0
    1
    D
    C
    B
    D1 整体显示 ON
    C1 游标ON
    B1游标位置反白允许
    进入点
    设定
    0
    0
    0
    0
    0
    0
    0
    1
    ID
    S
    指定数读取写入时设定游标移动方指定显示移位
    游标显示移位控制
    0
    0
    0
    0
    0
    1
    SC
    RL
    X
    X
    设定游标移动显示移位控制位指令改变DDRAM 容

    设定
    0
    0
    0
    0
    1
    DL
    X
    RE
    X
    X
    DL01:48位数
    RE1 扩充指令操作
    RE0 基指令操作
    设定CGRAM

    0
    0
    0
    1
    AC5
    AC4
    AC3
    AC2
    AC1
    AC0
    设定CGRAM 址
    设定DDRAM

    0
    0
    1
    0
    AC5
    AC4
    AC3
    AC2
    AC1
    AC0
    设定DDRAM 址(显示位址)
    第行:80H-87H
    第二行:90H-97H
    读取忙标志址
    0
    1
    BF
    AC6
    AC5
    AC4
    AC3
    AC2
    AC1
    AC0
    读取忙标志(BF)确认部动作否完成时读出址计数器(AC)值
    写数RAM
    1
    0

    数D7——D0写入部RAM (DDRAMCGRAMIRAMGRAM)
    读出RAM值
    1
    1

    部RAM读取数D7——D0
    (DDRAMCGRAMIRAMGRAM)



    3读写时序图
    1)数传输程

    图26 8位4位数线传输程

    图27 串口数线模式数传输程

    2)时序图

    图 28 MPU写资料ST7920(8位数线模式)

    图29 MPU ST7920读资料(8位数线模式)
    3)串口读写时序:
    图210 串口方式MPU写数ST7920
    4应说明
    FYD128640402B显示模块时应注意点:
    ①欲某位置显示中文字符时应先设定显示字符位置先设定显示址写入中文字符编码
    ②显示ASCII字符程显示中文字符程相显示连续字符时须设定次显示址模块动址加1指字符位置否显示字符中会空ASCII字符位置
    ③字符编码2字节时应先写入高位字节写入低位字节
    ④模块接收指令前处理器必须先确认模块部处非忙状态读取BF标志时BF需0方接受新指令果送出指令前检查BF标志前指令指令中间必须延迟段较长时间等前指令确定执行完成指令执行时间请参考指令表中指令执行时间说明⑤RE基指令集扩充指令集选择控制位变更RE指令集维持状态非次变更RE位否相指令集时需次均重设RE位
    234 时钟部分设计
    1DS1302简介
    DS1302 DALLAS 公司推出涓流充电时钟芯片含实时时钟日历31 字节静态RAM 通简单串行接口单片机进行通信实时时钟日历电路提供秒分时日日期月年信息月天数闰年天数动调整时钟操作通AMPM 指示决定采24 12 时格式DS1302 单片机间简单采步串行方式进行通信仅需三口线1 RES 复位2 IO 数线3 SCLK串行时钟时钟RAM 读写数字节达31 字节字符组方式通信DS1302 工作时功耗低保持数时钟信息时功率1mWDS1302 DS1202 改进增加特性双电源脚电源备份电源供应Vcc1 编程涓流充电电源附加七字节存储器广泛应电话传真便携式仪器电池供电仪器仪表等产品领域面性指标作综合
    a) 实时时钟具计算2100 年前秒分时日日期星期月年力闰年调整力
    b) 31 8 位暂存数存储RAM
    c) 串行IO 口方式脚数量少
    d) 宽范围工作电压20 55V
    e) 工作电流20V 时300nA
    f) 读写时钟RAM 数时两种传送方式单字节传送字节传送字符组方式
    g) 8 脚DIP 封装选8 脚SOIC 封装根表面装配
    h) 简单3 线接口
    i) TTL 兼容Vcc5V
    j) 选工业级温度范围40 +85
    k) DS1202 兼容
    l) DS1202 基础增加特性
    AVcc1 选涓流充电力
    B双电源电源备份电源供应
    C备份电源脚电池容量电容输入
    D附加7 字节暂存存储器




    2脚说明




    图211 DS1302引脚图
    a X1 X2 32768KHz 晶振脚
    b GND
    c RST 复位脚
    d IO 数输入输出引脚
    e SCLK 串行时钟
    f Vcc1Vcc2 电源供电脚
    3硬件设计
    计价器出租车空车行驶时需显示实时时钟时钟作白天 晚单价动转换基准计价器时钟显示司机客提供方便选择时钟芯片计价器重DS1302美国DALLAS 公司推出种高性低功耗实时时钟芯片采SPI 三线接口CPU 进行步通信时钟提供秒分时日星期月年 通设置DS1302 控制 状态寄存器选择日历时钟方式初始校准工作工作电压宽达2 5~5 5 V 采双电源供电(电源备电源) 设置备电源充电方式提供背电源进行涓细电流充电力没电源情况启备电源保存时间信息数图3315示







    图212 DS1302硬件设计连线图
    235 语音提醒部分设计
    1IDS2500简介
    设计采美国ISD公司2500芯片录放时间60秒75秒90秒120秒分成ISD25602575259025120四品种ISD2500系列1400系列语音电路样具抗断电音质方便等优点特点片E2PROM容量480K(1400系列128K)录放时间长10址输入端(1400系列仅8)寻址力达1024位分600段设OVF(溢出)端便器件级联
    2引脚图介绍









    图213 ISD2560引脚图
    图213
    a 17 A0M0~A6M6 址
    b 810 A7~A9 址
    c 11 AUX IN 辅助输入
    d 1213 VSSDVSSA 数字模拟
    e 1415 SP+SP 扬声器输出
    f 1628 VCCA VCCD 模拟数字信号电源正极
    g 1718 MICMIC REF 麦克风输入输入参考端
    h 19 AGC 动增益控制
    i 2021 ANA INOUT 模拟信号输入输出
    j 22 OVF\溢出
    k 23 CE\片选(低电允许芯片工作)
    l 24 PD芯片低功耗状态控制
    m 25 EOM\ 录放音结束信号输出
    n 26 XCLK 外部时钟
    o 27 P R\ 录放控制选择
    2硬件设计
    考虑计价器微型化智化语音芯片采集成度较高ISD2560 芯片特点采E2 PROM进行模拟信息直接存取必A D D A 转换部带话筒放器动增益控制时钟扬声器驱动电路等采+ 5 V 电源供电语音模块单片机接口图8 示设计程中先固定语音部分(车语) 信息存储ISD2560部起点址中营运程中根车营运状态实现语音功播放语音芯片工作时系统首先程序调放音处理程序根发音址寻找ISD2560 中发音单元然信号送扬声器发出声音

    图214 ISD2560语音接口图
    236 票印部分设计
    出租车达指定点司机翻起空车牌便产生信号通知单片机A T89S52 单片机启动印服务行车中途等时间营运里程单价金额日期车时间等数印成出租车专发票微型印机接口电路图9 示该电路采接口插板方式单片机相连特点计价器票印功系统体化检查维修时单独进行设计中微EPSON 公司生产TPμp216 微型印机微单片机通行接口相连需印数出现印机I O0~I O7 时STB 高电转低电低电转高电数送入印机时印机BUSY 线置忙(高电) 禁止新数输入印机取走数处理完毕BUSY线置闲(低电) 时送出回答脉ACK通知系统次输入数
    印功税控计价器重技术特色出租车没印功引发许理方面投诉问题现开发税控出租车计价器次计价结算时根计价显示应付车费印出统车票计价器根求印出种类型累计票完成印功设备微型印机目前厂家印机相厂家针式印头轮式印头针式印头原理4 根印针击色带发票印出结果特点印少量汉字字母众周知印针易折断致造成缺点现象需微型色带日常消耗较高公司根市场求综合方面技术量实验选EPSON 公司Model 42V 型轮式印头种印头具字符轮串行双色印进纸速度快(达秒8行) 接触式墨等特点
    印机性
    ①字符轮式串行印
    ②印字列19 列(包括2 符号)
    ③字符类型符号12 位置+ 2 空格数字14 位置
    ④字符尺寸116mm(W) ×218mm(H)
    ⑤字符间隔数字间119mm 数字符号间414mm 行间隔416mm
    ⑥印速(610VDC 均速度) 19字列019 行 秒17 字列210 行 秒
    ⑦纸张宽5715mm
    ⑧电机终端电压610 + 0 5 2 0 (直流) 电流0123A
    ⑨工作温度0 50 ℃
    ⑩稳定性MCBF 700000 行lv尺寸86mm (W) ×4915mm (D) ×19mm(H)种印头采针式印机完全印原理次印点整数字
    3 组字符轮第组字符轮刻种字母右边印字母第二三组字符轮刻数字印出0 9 数字印时应先启动马达时字符轮开始旋转程序根印数字计算出相应脉数印字符正准印位置时电磁铁发触发信号字符印印纸重复步骤配合回车换行完整印份发票次印字符担心缺点问题字点组成字符清晰印头油墨轮特殊材料制成滴面油墨太时会动吸入油墨太少时动渗轮子表面样字符轮字符表面始终浓淡相宜油墨瓶油墨较长时间价格便宜印头程中日常消耗较该印头缺点印汉字印少量字母出租车发票已印套票面已印种汉字提示印机须数字印面印妨碍ETT 1 型计价器印程分两步首先倒空车牌开始营运时印常规数公司代码电话车号车时间日期等运营结束时印运营里程单价总金额等完成份发票印样做目更节省时间客车时必等太长时间份发票提高工作效率外轮式印机印纸宽57 5mm 针式印机窄ETT 1 型计价器进纸口加特殊设备针式印机窄行印纸适应两种类型发票

    图215 微型印机机接口图
    237 数存储部分设计
    1AT24c64简介
    数存储部分作电源断开时存储前设定单价信息A TAT24C64 A TMEL 公司2 kB 电擦存储芯片采2 线串行总线单片机通讯电压低2 5 V 额定电流1 mA 静态电流10Ua (5 5 V) 芯片资料断电情况保存40 年采8 脚DIP 封装方便
    2引脚图
    表 26
    引脚号

    引脚号

    A0A1A2
    址线
    VSS
    电源
    SCL
    时钟线
    GND
    接端
    SDA
    数线
    WP
    写保护






    图216 AT24C64引脚图
    3操作时序说明
    (1)I2 C总线操作时序

    图217 I2C总线操作时序图
    (1)起始信号(S):SCL高电期间SDA高低变化启动次数传送程SDA变低SCL高电应继续保持4µS
    (2)终止信号(P):SCL高电期间SDA低变高变化结束次数传送程SDA应SCL高电保持4µS开始低高变化
    (3)应答信号(A):应答信号两种第9时钟脉高电期间SDA低电应答信号第9时钟脉高电期间SDA高电应答非信号应答非信号机接收机发送数准备结束次数传送输出应答信号应答信号应答非信号SCL高电应4µS
    A 24C64单字节写数操作格式

    图 218 单字节写数操作格式
    AT24C648引脚集成块DIP封装图711a示 SDASCLI2C总线接口A2A1A0器件引脚址WP芯片写保护WP0时允许存储器中写操作WP1时禁止写操作VccGND芯片电源引脚AT89S52作虚拟机接口电路图711b示AT24C64 口电路
    图中接法A2A1A0接AT24C64写操作时器件址:A0H读操作时器件址:A1H
    AT24C64读操作分机读连续读两种方式数操作格式图712示图中灰色部分AT89S52发送AT24C64接收白色部分AT24C64发送AT89S52接收SLAWSLARAT24C64写读器件址SLAWA0H10100000BSLARA1H10100001BSADRAT24C64存储空间址范围:00~FFHDATAAT24C64部单元中数读数操作格式中出读操作分两步先发送读出单元址接着启动读操作单片机停止操作前应输出应答非信号
    B AT24C64写操作分单字节写页写
    AT24C64写操作分单字节写页写数操作格式图713示AT24C64页写次8字节应空间址8整址空间开始写:00H08H10H……等超8字节应分次页写两次页写间需间隔10ms左右时间
    图219 AT24C64写操作分单字节写页写
    图中灰色部分AT89S52发送AT24C64接收白色部分AT24C64发送AT89S52接收SLAWSADR读操作数格式中含义相
    4硬件设计






    图220 AT24c64硬件连接
    AT24C64中时钟信号线SCL 数线SDA 需外接5 1 kΩ拉电阻作减少A TAT24C64 静态功耗AT24C64 采I2 C 总线A T89S5相连A T89S52P1 3 作串行时钟线P1 4 作串行数线通通键设定次数完毕(昼夜单价等候时间起租里程起租金额等) 系统动调存储程序数信息保存
    芯片系统重新电时动调读存储器程序存储器数信息图220 AT24C64接线图读缓存单元中供程序保存AT24C64 中数意进行改动具防作弊功外出租车营运程中营运数单次出租营运额营运里程段时间营运总额总路程等存储AT24C64 中便出租车公司司机查询出租车司机更方便理营运数出租车行业更效理
    238 超速提醒键设置部分设计
    1出租车司机获取更时间送客送客程中高速行驶榨取时间引起交通事制止事发生系统程序中通软件检测行驶速度速度高设置高速度时超速时红色L ED 显示客观察提醒司机超速行驶避免交通事发生图11 示键部分营运数查询键数设置键营运数查询键置计价器外面司机通该查询键查1 月总营运额总营运里程单次营运额营运里程
    短查总营运数次短循环次翻阅单次营运数长3 s 跳出数查询数设置键秘密安放计价器部必须计价器处进行铅封防止司机通该键营运重数进行设置作弊该键出租车公司专业员调整数功设置 确认键UPDOWN 键组成中功设置 确认键系统时间起步价白天 晚单价等时间等数调整进行设置 然通UP DOWN 数值进行加减然通功设置 确认键设数确认
    2矩阵键
    键行值列值行值列值组合识键编码矩阵行线列线分通两行接口CPU通信键状态样需变成数字量01开关端(列线)通电阻接VCC接通程序输出数字0实现键盘处理程序务:确定键判断键键功什消键闭合断开时抖动两行口中输出扫描码键逐行动态接行口输入键状态行扫描值回馈信号形成键编码识键通软件查表查出该键功
    3超速提醒
    出租车速度超规定速度时单片机接收信号控制语音系统播放超速提醒


    图221 矩阵键盘原理图

    239 DS18B20电子温度计设计
    1DS18B20说明
    DS18B20数字温度计DALLAS公司生产1-Wire单总线器件具线路简单体积特点组成测温系统具线路简单根通信线挂样数字温度计十分方便
      TO-92封装DS18B20引脚排列图1引脚功描述表
    2详细引脚功描述


    图222 DS18b20引脚图
    表27
    序号
    名称
    引脚功描述
    1
    GND
    信号
    2
    DQ
    数输入输出引脚开漏单总线接口引脚着寄生电源器件提供电源
    3
    VDD
    选择VDD引脚工作寄生电源时引脚必须接

    2 硬件原理图:

    图2—23 DS18B20电子温度计原理图


    第三章 系统软件设计

    软件设计部分分 程序控制程序外部中断0空车灯信号中断程序外部中断1 里程计算程序T0 等时间计数中断程序MAX7920 串口液晶显示程序DS1302 时钟程序ISD2560 语音播报程序AT24C64 数存储程序印程序键盘服务程序等整软件中变量全局变量形式供程序调进行显示
    31 程序设计
    311程序功介绍
    程序模块中 需完成芯片初始化 (MAX7219 A TAT24C64 ISD2560 语音芯片微型印机初始化) 中断初始化(外部中断0 外部中断1 T0 初始化) 外程序模块中需设置启动 清标志寄存器里程寄存器价格寄存器进行初始化然程序根标志寄存器容分完成启动清计程计价等操作程序流程图图12 示空车信号灯时表示客车进行语音播报1 启动计价根里程寄存器中容计算判断出行驶里程否已超起价公里数已超根里程值公里单价起价计算出前累计价格结果存价格寄存器中然前时间累计价格送MAX7219 驱动L ED 显示电路显示出中途塞车(等低速行驶) 时定时间没检测传感器脉信号启动T0 计时器进行计时超规定等时间计价器根等价格进行前金额累加显示计价器显示等时间达目时候司机空车灯停止计价显示前应该付金额应单价进行语音播报2 票印等客车启动出租车计价器检测传感器脉信号系统动显示清零重新进行初始化程完成1 次计价









    312程序流程图

    图31 程序流程图
    32 关键子程序设计
    321 中断T1 里程计数程序设计
    1中断简介
    中断中断关特殊功寄存器中断入口序查询逻辑电路等组成包括5中断请求源4中断控制寄存器IEIPECONSCON控制中断类弄中断开关种中断源优先级确定
    2设计原理
    霍尔传感器输出脉信号输入单片机外部中断T1接口车轮转圈产生脉信号单片机进行次中断中断程序中完成两项务
    (1) 启动定时器1表示出租车启动
    TR11
    ET11
    (2) 单次里程总里程累加计算结果存入寄存器中(设车轮转1 圈1 m 中断1 次里程增加1 m)
    if(num_T11)载客变量 1
    {
    Num_time++轮胎圈数
    if(today1)白天价格
    {
    Sum_money10+ Num_time* perimeter * price_1总价格
    }
    if(today0)夜晚价格
    {
    Sum_money10+ Num_time* perimeter * price_1总价格
    }
    }

    322 T0 中途等计时程序设计
    1 定时器说明
    80C51单片机部设两16位编程定时器计数器编程意思指功(工作方式定时时间量程启动方式等)均指令确定改变定时器计数器中两16位计数器外两特殊功寄存器(控制寄存器方式寄存器)16位定时计数器分两8位专寄存器组成:T0TH0TL0构成T1TH1TL1构成访问址次8AH8DH寄存器均单独访问寄存器存放定时计数初值外部8位定时器方式寄存器TMOD8位定时控制寄存器TCON寄存器间通部总线控制逻辑电路连接起TMOD选定定时器工作方式TCON控制定时器启动停止外TCON保存T0T1溢出中断标志
    2等时间计时
    外部中断1 进行中断时启动改T0 开始计时计时达1 min 等时间累加器值加超规定等时间前金额加额外中途等价钱0 1 min 动加中途等单价中途等结束时候动切换正常计价
    等计时程序
    TR01
    ET01
    if(wait1)进入等
    {
    Time_wait++时间单位秒
    if(Time_wait60)换算成分钟计时
    {
    Time++
    }
    if(Time>10)等超10分钟
    {
    Time_money (Time10)* price_time等金额10分钟免费
    }
    }
    323 键盘服务程序设计
    1 矩阵键盘工作原理
    键盘中键数量较时减少IO口占通常键排列成矩阵形式图1示矩阵式键盘中条水线垂直线交叉处直接连通通键加连接样端口(P1口)构成4*416键矩阵式键盘键识方法确定矩阵式键盘键介绍种行扫描法 行扫描法 行扫描法称逐行(列)扫描查询法种常键识方法图示键盘介绍程判断键盘中键 全部行线Y0Y3置低电然检测列线状态列电低表示键盘中键闭合键位低电线4根行线相交叉4键中列线均高电键盘中键判断闭合键位置 确认键进入确定具体闭合键程方法:次行线置低电置某根行线低电时线高电确定某根行线位置低电逐行检测列线电状态某列低该列线置低电行线交叉处键闭合键单片机P口作键盘IO口键盘列线接P口低4位键盘行线接P口高4位列线P0P3分接4拉电阻正电源+5V列线P0P3设置输入线行线P4P7设置输出线4根行线4根列线形成16相交点检测前否键检测方法P4P7输出全0读取P0P3状态P0P3全1键闭合否键闭合键抖动检测键延时段时间做步检测判断键应识出键闭合方法键盘行线进行扫描P4P7述4种组合次输出:P7 1 1 1 0P6 1 1 0 1 P5 1 0 1 1P4 0 1 1 1组行输出时读取P0P3全1表示0行没键闭合否键闭合闭合键行值列值然采计算法查表法闭合键行值列值转换成定义键值 2键盘功介绍
    键盘采查询方式放程序中没键时候单片机循环程序旦键便转相应子程序处理处理结束返回键盘服务包括司机查询出租车理员数调整时间设定数翻页查询等

    图32 矩阵键盘工作程序
    324门狗应
    1门狗作
    门狗 watchdog timer定时器电路 般输入喂狗输出MCURST端MCU正常工作时候隔端时间输出信号喂狗端 WDT 清零果超规定时间喂狗(般程序跑飞时)WDT 定时超回出复位信号MCUMCU复位 防止MCU死机 门狗作防止程序发生死循环者说程序跑飞工作原理:系统运行启动门狗计数器门狗开始动计数果定时间清门狗门狗计数器会溢出引起门狗中断造成系统复位门狗芯片时注意清门狗硬件门狗利定时器监控程序运行说程序运行程中定时时间前定时器进行复位果出现死循环者说PC指针回定时时间会单片机复位
    2注意事项:
    a AT89S52门狗必须程序激活开始工作必须保证CPU电复位否门狗法工作
    b 门狗CPU晶振晶振停振时候门狗效
    c AT89S5214位计数器16383机器周期必须少喂狗次时间固定法更改晶振12M时16毫秒需喂狗次程序已调试通利定时器门狗喂狗时间延长秒分钟
    d reg52h声明文件中增加行 sfr WDTRST 0xA6
    3应程序
    Main()
    {
    WDTRST0x1E
    WDTRST0xE1初始化门狗
    While (1)
    {
    WDTRST0x1E
    WDTRST0xE1喂狗指令

    }
    }

    33 时钟程序计
    1DS1302操作时序图

    图 33 DS1302操作时序图

    2 DS1302寄存器说明
    表31 寄存器
    寄存器名
    写命令
    取值范围
    位容
    写操作
    读操作
    7
    6
    5
    4
    3
    2
    1
    0
    秒寄存器
    80H
    81H
    059
    CH
    10sec
    sec
    分寄存器
    82H
    83H
    059
    0
    10min
    min
    时寄存器
    84H
    85H
    112023
    1224
    0
    10ap
    hr
    hr
    日寄存器
    86H
    87H
    128293031
    0
    0
    10Date
    date
    月寄存器
    88H
    89H
    112
    0
    0
    0
    10m
    month
    周寄存器
    8AH
    8BH
    17
    0
    0
    0
    0
    0
    day
    年寄存器
    8CH
    8DH
    099
    10year
    year






    控制指令字输入 SCLK时钟升时数写入DS1302数输入低位位 0开始样紧 8位控制指令字 SCLK脉降读出 DS1302数读出数时低位 0位高位 7数读写时序见图33
    2DS1302操作流程图

    图34 DS1302操作流程图
    3 图33程序示程
    设置时钟时间址函数
    void Set1302(uchar *pClock)
    {
    uchar i
    uchar ucAddr 0x80
    W1302(0x8e0x00) * 控制命令WP0写操作*
    for(i 7 i>0 i)
    {
    W1302(ucAddr*pClock) * 秒 分 时 日 月 星期 年 *
    pClock++
    ucAddr +2
    }
    W1302(0x8e0x80) * 控制命令WP1写保护*
    }

    34显示程序设计
    1指示程序流程图














    判断状态?

    开 始
    正常工作指示
    空 车
    载 客
    白天
    夜间
    Y
    N


    图35指示控制流程图

    2指示程序
    void zsd()指示灯服务状态
    {
    if(num_T1 1)载客状态
    {
    指示
    }
    if(num_T1 0)空车状态
    {
    指示
    }
    if(today0)夜晚状态
    {
    指示
    }
    if(today1)白天状态
    {
    指示
    }
    }
    else
    {

    }
    }
    3时序图26液晶程序示例
    :LCD数读写函数
    void wr_lcd(uchar dat_commuchar content)
    {
    uchar aij
    delay(50)
    acontent
    cs1
    sclk0
    std1
    for(i0i<5i++)
    {
    sclk1
    sclk0
    }
    std0
    sclk1
    sclk0
    if(dat_comm)
    std1 data
    else
    std0 command
    sclk1
    sclk0
    std0
    sclk1
    sclk0
    for(j0j<2j++)
    {
    for(i0i<4i++)
    {
    aa<<1
    stdCY
    sclk1
    sclk0
    }
    std0
    for(i0i<4i++)
    {
    sclk1
    sclk0
    }
    }
    }














    35语音提印醒程序设计
    1流程图














    Y
    开始
    否载客?
    播放欢迎词
    否车?
    Y
    Y
    N
    播放车提醒印
    N
    否超速?
    播放超速提醒
    Y

    图36 语音播放程序流程
    2程序
    void yytx()
    {
    if(num_T11)
    {
    播放欢迎词
    }
    if(chick_out1)结账车数保存票印
    {
    播放车提醒
    }
    }
    36电子温度计程序设计
    1DSl820工作程中协议
    初始化 > ROM操作命令 > 存储器操作命令> 处理数
    ① 初始化 单总线处理均初始化开始
    ② ROM操作命令总线机检测DSl820存便发出ROM操作命令表32示
    表32 ROM操作命令表
    指令
    代码
    Read ROM(读ROM)
    33H
    Match ROM(匹配ROM)
    55H
    Skip ROM(跳ROM]
    CCH
    Search ROM(搜索ROM)
    F0H
    Alarm search(告警搜索)
    ECH

    表33 存储器操作命令表
    指令
    代码
    Write Scratchpad(写暂存存储器)
    4EH
    Read Scratchpad(读暂存存储器)
    BEH
    Copy Scratchpad(复制暂存存储器)
    48H
    Convert Temperature(温度变换)
    44H
    Recall EPROM(重新调出)
    B8H
    Read Power supply(读电源)
    B4H
    2温度转换算法分析
    DS18B20转换代码实际温度值进行计算转换温度高字节(MS Byte)高5位保存温度正负(标志Sbit11~bit15)高字节(MS Byte)低3位低字节保存温度值(bit0 ~ bit10)中低字节(LS Byte)低4位保存温度数位(bit0 ~ bit 3)程序采00625精度数部分值四位代表实际数值00625真正数值数值带数位采取数舍入保留位数说系统温度精确01度
    算法核心:首先程序判断温度否零果DS18B20保存温度补码值需低8位(LS Byte)取反加变成原码处理DS18B20温度Copy单片机RAM中里面已温度值Hex码然转换Hex码BCD码分数位位十位BCD码存入RAM中




    4 DS18B20操作时序图

    图37 DS18B20复位时序

    图38 DS18B20写时序

    图39 DS18B20读时序






    5 DS18B20操作流程图

    图 DS18B20操作流程图
    4DS18B20程序示例
    : 根时序图DS18B20读数函数()
    byte read_byte(void)
    {
    byte i
    byte value 0
    for (i8i>0i)
    {
    value>>1
    DQ 0 DQ拉低开始测量
    DQ 1 变高
    delay(1)
    if(DQ)value|0x80
    delay(6) 等响应
    }
    return(value)}

    第四章 系统调试
    41调试遇问题
    1液晶操作出现乱码
    问题原写址操作写显示数时延时时间正确
    2测量车程开始信号
    原电路阻抗匹配信号衰减太IO口检测信号
    3DS1302读取时间正确
    原单片机操作DS1302时序正确导致读取数混乱
    4 测量里程准
    数计算处理问题采样点较少产生误差较受外界干扰较


    42功测试
    功计价器功测试
    ①准确测量汽车移动距离 误差< ±1
    ②累计测量低速等时间误差< 1
    ③动判速度高低低设定速度时累计低速时间测量误差< ±0 5km h
    ④准确指示前时刻
    ⑤次运营结束动印发票印累计金额发票客提醒等
    ⑥动存储月运营数(包括时间里程金额)
    ⑦空车时查询天运营总计次运营数
    ⑧租价K值等重运营参数均理员机外调整方便
    ⑨数统计功机外计算机计价器进行双通讯进行参数设置外计算机取计价器贮存运营数进行脱机数统计层车领导提供第手材料
    ⑩显示功显示屏位置分显示总运营金额前营运单价(动态刷新) 等候时间运营里程前时钟车温度时显示屏状态显示容







    第五章 未展结
    文设计单片机AT89S52 核心语音芯片ISD2560 DS1302时钟芯片MAX7920 DS18B20AT24C64存储器等芯片外设新型出租车计价器功包括存储万年历温度查询显示车辆关数计价器参数驾驶员资料等结算车费计价器部存储运营数转存存储器电子锁机单双号理等
    计价器税控流程计价器营运程中实时金计价器存数存入存储器时加密卡部硬件较简单价格较低具较高性价格利存储器功进步解决收费复杂问题时出租车理存储器车辆种营运数进行统计处理定期接受查询制成计税报税营运数统计表方便交税计价器通写数存储器印累计票准确计税防止税金流失司机根存储器数发票相应理部门交税理部门专设备存储器数清司机未规定时间交税计价器正常工作存储器损坏理部门累计票正式发票存根收税留票备案计价器全部高性元件器件构成具种抗干扰措施受种恶劣情况(强磁高温剧烈颠簸等) 考验总功计价器高度存储功开申报营业税印机印出正式发票附带电子万年历电子温度计语音提醒等功构成现完善先进智计价器国家 三金工程出租车行业利实施奠定技术基础系统研制微行业提供新应领域全国千万辆出租车微型票印机市场需求微型票印机销商带限商机国家运部门出租车乱收费交税等提供方便相信受出租车公司运部门出租车司机广客青睐




    致 谢
    着毕业文结尾短暂充实三年学生涯落帷幕时感谢教导XX职业技术学院位老师帮助支持学感谢指导老师XX老师培育指导帮助利完成学里项课程懂做道理谢谢默默陪走三年朋友里请接受真诚谢意时光荏苒时间终短暂三年淮安信息学院历重生蜕变三年帮助太太令感动时刻胜数岁月脚步然匆匆会份关怀份勉励铭记珍藏
    老师渊博专业知识严谨治学态度精益求精工作作风诲倦高尚师德严律宽崇高风范朴实华易格魅力影响深远仅树远学术目标掌握基研究方法明白许接物处世道理文选题完成步老师指导完成倾注导师量心血谨导师表示崇高敬意衷心感谢















    参 考 文 献
    [1] 徐江海 单片机实教程 北京:机械工业出版2008
    [2] 立民 单片机应技术选编[M] 北京北京航空航天学出版1999
    [3] 陈忠 单片机接口技术实子程序[M] 北京民邮电出版2005
    [4]杨恢先黄辉先 单片机原理应[M] 长沙国防科技学出版2003
    [5] 陈 星 出租车计价器防作弊方法构想[J ] 中国计量出版 2002
    [6] 王 力 出租车计价器抗干扰措施研究[J ] 海计量测试 2002 [10]
    [7] 吴承琦孙培生出租汽车计价器检定规程 北京中国计量出版2003
    [8] 立民 单片机应系统设计系统配置接口技术 北京北京航空航天学出版2002
    [9] AT89S52单片机说明书 Atmel Corporation 2000
    [10]闫玉德愈虹 MCS51单片机原理应(c语言版)北京机械工业出版2002
    [11] 12864带字库说明书 广州广州唯创电子限公司2003















    附录
    DS1302电子时钟模块子程序
    *********************************************************************
    模块名称:DS1302c
    功 :实时时钟模块 时钟芯片型号:DS1302
    说 明:
    程序设计:张奇
    设计时间:20100102
    *********************************************************************
    sbit T_CLK P2^7 *实时时钟时钟线引脚 *
    sbit T_IO P1^4 *实时时钟数线引脚 *
    sbit T_RST P1^5 *实时时钟复位线引脚 *

    sbit ACC0 ACC^0
    sbit ACC7 ACC^7

    void RTInputByte(uchar) * 输入 1Byte *
    uchar RTOutputByte(void) * 输出1Byte *
    void W1302(uchar uchar)
    uchar R1302(uchar)
    void Set1302(uchar *) * 设置时间 *
    void Bcd2asc(ucharuchar *)
    void Get1302(uchar curtime[]) * 读取1302前时间 *

    ********************************************************************
    函 数 名:RTInputByte()
    功 :实时时钟写入字节
    说 明:DS1302写入1Byte数 (部函数)
    入口参数:d 写入数
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void RTInputByte(uchar d)
    {
    uchar i
    ACC d
    for(i8 i>0 i)
    {
    T_IO ACC0 *相汇编中 RRC *
    T_CLK 1
    T_CLK 0
    ACC ACC >> 1
    }
    }
    ********************************************************************
    函 数 名:RTOutputByte()
    功 :实时时钟读取字节
    说 明:DS1302读取1Byte数 (部函数)
    入口参数:
    返 回 值:ACC
    设 计:张奇 日 期:20010012
    ***********************************************************************
    uchar RTOutputByte(void)
    {
    uchar i
    for(i8 i>0 i)
    {
    ACC ACC >>1 *相汇编中 RRC *
    ACC7 T_IO
    T_CLK 1
    T_CLK 0
    }
    return(ACC)
    }
    ********************************************************************
    函 数 名:W1302()
    功 :DS1302写入数
    说 明:先写址写命令数 (部函数)
    调 :RTInputByte() RTOutputByte()
    入口参数:ucAddr DS1302址 ucData 写数
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void W1302(uchar ucAddr uchar ucDa)
    {
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(ucAddr) * 址命令 *
    RTInputByte(ucDa) * 写1Byte数*
    T_CLK 1
    T_RST 0
    }
    ********************************************************************
    函 数 名:R1302()
    功 :读取DS1302某址数
    说 明:先写址读命令数 (部函数)
    调 :RTInputByte() RTOutputByte()
    入口参数:ucAddr DS1302址
    返 回 值:ucData 读取数
    设 计:张奇 日 期:2010012
    ***********************************************************************
    uchar R1302(uchar ucAddr)
    {
    uchar ucData
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(ucAddr) * 址命令 *
    ucData RTOutputByte() * 读1Byte数 *
    T_CLK 1
    T_RST 0
    return(ucData)
    }
    ********************************************************************
    函 数 名:BurstW1302T()
    功 :DS1302写入时钟数(字节方式)
    说 明:先写址写命令数
    调 :RTInputByte()
    入口参数:pWClock 时钟数址 格式 秒 分 时 日 月 星期 年 控制
    8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
    返 回 值:
    设 计:张奇 日 期:201012
    ***********************************************************************
    void BurstW1302T(uchar *pWClock)
    {
    uchar i
    W1302(0x8e0x00) * 控制命令WP0写操作*
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(0xbe) * 0xbe时钟字节写命令 *
    for (i 8 i>0 i) *8Byte 7Byte 时钟数 + 1Byte 控制*
    {
    RTInputByte(*pWClock) * 写1Byte数*
    pWClock++
    }
    T_CLK 1
    T_RST 0
    }
    ********************************************************************
    函 数 名:BurstR1302T()
    功 :读取DS1302时钟数
    说 明:先写址命令读数(时钟字节方式)
    调 :RTInputByte() RTOutputByte()
    入口参数:pRClock 读取时钟数址 格式 秒 分 时 日 月 星期 年
    7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void BurstR1302T(uchar *pRClock)
    {
    uchar i
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(0xbf) * 0xbf时钟字节读命令 *
    for (i8 i>0 i)
    {
    *pRClock RTOutputByte() * 读1Byte数 *
    pRClock++
    }
    T_CLK 1
    T_RST 0
    }
    ********************************************************************
    函 数 名:BurstW1302R()
    功 :DS1302寄存器数写入数(字节方式)
    说 明:先写址写数(寄存器字节方式)
    调 :RTInputByte()
    入口参数:pWReg 寄存器数址
    返 回 值:
    设 计:张奇 日 期:2010012
    修 改: 日 期:
    ***********************************************************************
    void BurstW1302R(uchar *pWReg)
    {
    uchar i
    W1302(0x8e0x00) * 控制命令WP0写操作*
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(0xfe) * 0xbe时钟字节写命令 *
    for (i31 i>0 i) * 31Byte 寄存器数 *
    {
    RTInputByte(*pWReg) * 写1Byte数*
    pWReg++
    }
    T_CLK 1
    T_RST 0
    }
    ********************************************************************
    函 数 名:BurstR1302R()
    功 :读取DS1302寄存器数
    说 明:先写址读命令数(寄存器字节方式)
    调 :RTInputByte() RTOutputByte()
    入口参数:pRReg 寄存器数址
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void BurstR1302R(uchar *pRReg)
    {
    uchar i
    T_RST 0
    T_CLK 0
    T_RST 1
    RTInputByte(0xff) * 0xff时钟字节读命令 *
    for (i31 i>0 i) *31Byte 寄存器数 *
    {
    *pRReg RTOutputByte() * 读1Byte数 *
    pRReg++
    }
    T_CLK 1
    T_RST 0
    }
    ********************************************************************
    函 数 名:Set1302()
    功 :设置初始时间
    说 明:先写址读命令数(寄存器字节方式)
    调 :W1302()
    入口参数:pClock 设置时钟数址 格式 秒 分 时 日 月 星期 年
    7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void Set1302(uchar *pClock)
    {
    uchar i
    uchar ucAddr 0x80
    W1302(0x8e0x00) * 控制命令WP0写操作*
    for(i 7 i>0 i)
    {
    W1302(ucAddr*pClock) * 秒 分 时 日 月 星期 年 *
    pClock++
    ucAddr +2
    }
    W1302(0x8e0x80) * 控制命令WP1写保护*
    }
    ********************************************************************
    函 数 名:Get1302()
    功 :读取DS1302前时间
    说 明:
    调 :R1302()
    入口参数:ucCurtime 保存前时间址前时间格式 秒 分 时 日 月 星期 年
    7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
    返 回 值:
    设 计:张奇 日 期:2010012
    ***********************************************************************
    void Get1302(uchar ucCurtime[])
    {
    uchar i
    uchar ucAddr 0x81
    for (i0 i<7 i++)
    {
    ucCurtime[i] R1302(ucAddr)*格式 秒 分 时 日 月 星期 年 *
    ucAddr + 2
    }
    }

    DS18B20温度测试模块子程序

    *********************************************************************
    模块名称:DS1820c
    功 :实时测温 模块 测温芯片型号:DS18B20
    说 明里12M晶体例晶体速度需调整延时时间:
    程序设计:张奇
    设计时间:20100206
    *********************************************************************
    sbit DQ P2^1定义端口

    typedef unsigned char byte
    typedef unsigned int word

    ********************************************************************
    函 数 名:delay()
    功 :延时
    说 明:
    返 回 值:
    设 计:张奇 日 期:2010026
    ***********************************************************************
    void delay(word useconds)
    {
    for(useconds>0useconds)
    }
    ********************************************************************
    函 数 名:read_byte()
    功 :复位
    说 明:ds18b20 复位
    返 回 值:
    设 计:张奇 日 期:2010026
    ***********************************************************************
    byte ow_reset(void)
    {
    byte presence
    DQ 0 DQ0
    delay(29) 延时
    DQ 1 DQ高
    delay(3) 等
    presence DQ 状态信号
    delay(25) 等状态
    return(presence) 返回状态
    }
    ********************************************************************
    函 数 名:read_byte()
    功 :延时
    说 明: 总线读取字
    返 回 值:
    设 计:张奇 日 期:2010026
    ***********************************************************************
    byte read_byte(void)
    {
    byte i
    byte value 0
    for (i8i>0i)
    {
    value>>1
    DQ 0 DQ拉低开始测量
    DQ 1 变高
    delay(1)
    if(DQ)value|0x80
    delay(6) 等响应
    }
    return(value)
    }
    ********************************************************************
    函 数 名:write_byte(char val)
    功 :写字节
    说 明: 1WIRE 总线写字节
    返 回 值:
    设 计:张奇 日 期:2010026
    ***********************************************************************
    void write_byte(char val)
    {
    byte i
    for (i8 i>0 i) 写字节时间
    {
    DQ 0 DQ拉低开始取字节
    DQ val&0x01
    delay(5)
    DQ 1
    valval2
    }
    delay(5)
    }
    ********************************************************************
    函 数 名:Read_Temperature(void)
    功 :读取温度
    说 明:读取温度
    返 回 值: tempx2
    设 计:张奇 日 期:2010026
    ***********************************************************************
    char Read_Temperature(void)
    {
    union{
    byte c[2]
    int x
    }temp

    ow_reset()
    write_byte(0xCC)
    write_byte(0xBE)
    tempc[1]read_byte()
    tempc[0]read_byte()
    ow_reset()
    write_byte(0xCC)
    write_byte(0x44) 开始转化
    return tempx2
    }

    lcd12864液晶显示模块子程序

    *********************************************************************
    模块名称:MAX7219c
    功 :液晶串口显示模块 液晶芯片型号:ST7920LCD12864
    说 明:
    程序设计:张奇
    设计时间:20100225
    *********************************************************************
    #include

    #define uint unsigned int
    #define uchar unsigned char
    #define x1 0x80
    #define x2 0x88
    #define y 0x80
    #define comm 0
    #define dat 1

    sbit cs P2^1
    sbit std P2^2
    sbit sclk P2^4

    sbit rst P2^3 Reset Signal 低电效

    void wr_lcd (uchar dat_commuchar content)
    void delay (uint us)
    *******************************
    列数组中填写
    需显示开机画
    显示容
    ********************************
    uchar code tab1[]{
    欢迎坐宝马出租车
    欢 迎
    祝坐愉快
    }

    uchar code tab31[]{
    淮安信息职业
    技术学院
    张 奇
    }
    ********************************************************************
    函 数 名:LCM_init()
    功 :初始化LCM
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void init_lcd(void)
    {
    rst1
    psb0
    wr_lcd(comm0x30) *30基指令动作*
    wr_lcd(comm0x01) *清屏址指针指00H*
    delay(100)
    wr_lcd(comm0x06) *光标移动方*
    wr_lcd(comm0x0c) *开显示关游标*
    }
    ********************************************************************
    函 数 名:chn_disp()
    功 :显示汉字字符
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void chn_disp(uchar code *chn)
    {
    uchar ij
    wr_lcd(comm0x30)
    wr_lcd(comm0x80)
    for(j0j<4j++)
    {
    for(i0i<16i++)
    wr_lcd(datchn[j*16+i])
    }
    }
    ********************************************************************
    函 数 名:chn_disp1()
    功 :初始化LCM
    说 明: 半屏显示汉字字符
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void chn_disp1(uchar code *chn)
    {
    uchar ij
    wr_lcd(comm0x30)
    wr_lcd(comm0x80)
    j0
    for(i0i<16i++)
    wr_lcd(datchn[j*16+i])
    wr_lcd(comm0x90)
    j1
    for(i0i<16i++)
    wr_lcd(datchn[j*16+i])
    }
    ********************************************************************
    函 数 名:con_disp()
    功 :data10xffdata20xff时x0y0处反白显示16xl*yl
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void con_disp(uchar data1uchar data2uchar x0uchar y0uchar xluchar yl)
    {
    uchar ij
    for(j0j {
    for(i0i {
    wr_lcd(comm0x34)
    wr_lcd(commy0+j)
    wr_lcd(commx0+i)
    wr_lcd(comm0x30)
    wr_lcd(datdata1)
    wr_lcd(datdata2)
    }
    }
    wr_lcd(comm0x36)
    }
    ********************************************************************
    函 数 名:clrram()
    功 :清DDRAM
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void clrram(void)
    {
    wr_lcd(comm0x30)
    wr_lcd(comm0x01)
    delay(180)
    }
    ********************************************************************
    函 数 名:wr_lcd()
    功 :读写
    说 明: 参数名称: 输入输出? 类型 描述
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void wr_lcd(uchar dat_commuchar content)
    {
    uchar aij
    delay(50)
    acontent
    cs1
    sclk0
    std1
    for(i0i<5i++)
    {
    sclk1
    sclk0
    }
    std0
    sclk1
    sclk0
    if(dat_comm)
    std1 data
    else
    std0 command
    sclk1
    sclk0
    std0
    sclk1
    sclk0
    for(j0j<2j++)
    {
    for(i0i<4i++)
    {
    aa<<1
    stdCY
    sclk1
    sclk0
    }
    std0
    for(i0i<4i++)
    {
    sclk1
    sclk0
    }
    }
    }
    ********************************************************************
    函 数 名:delay()
    功 :通延时
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void delay(uint us) delay time
    {
    while(us)
    }
    ********************************************************************
    函 数 名:delay1()
    功 :通延时毫秒 (110592mhz)
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************

    void delay1(uint ms)
    {
    uint ij
    for(i0i for(j0j<15j++)
    delay(1)
    }
    ********************************************************************
    函 数 名:main()
    功 :调述函数显示容
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2010225
    ***********************************************************************
    void main()
    {
    SP0x5f
    init_lcd() 初始化
    while(1)
    {
    lat_disp(0x000x00) 显示点阵址
    chn_disp(tab1) 显示欢迎汉字
    con_disp(0xff0xff0x8c0x80216)反显正常选择
    delay1(8000)延时
    clrram()清屏

    lat_disp(0xcc0xcc)显示点阵址
    delay1(8000)
    lat_disp(0x000x00)显示点阵址
    chn_disp1(tab31)
    img_disp1(tab32)显示图
    delay1(8000)
    clrram()
    lat_disp(0xff0x00)显示点阵址
    delay1(8000)
    img_disp(tab5) 显示图tab5图取模数组
    delay1(8000)
    }
    }
    AT24C64存储模块子程序模块
    *********************************************************************
    模块名称:AT24C64
    功 :实时存储模块 存储芯片型号:AT24C64
    说 明:
    程序设计:张奇
    设计时间:209520
    *********************************************************************
    #includereg52h
    #include intrinsh

    sbit sclP时钟线
    sbit sdaP数线

    ********************************************************************
    函 数 名:flash()
    功 :延时
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    void flash() 时序延时
    {
    unsigned char i
    for(i0i<10i++){ _nop_ () }
    }
    ********************************************************************
    函 数 名:start()
    功 :AT24C64 启动子程序
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    void start() AT24C64 启动子程序
    {
    scl1 时钟高
    sda1
    flash()
    sda0 10
    flash()
    scl0
    flash()
    }
    ********************************************************************
    函 数 名: stop()
    功 :停止
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    void stop()
    {
    scl1 时钟高
    sda0
    flash()
    sda1 01
    flash()
    }
    ********************************************************************
    函 数 名:empty()
    功 :应答信号非
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    void empty()
    {
    sda1
    scl1 时钟高
    flash()
    scl0 时钟低
    sda0
    flash()
    }
    ********************************************************************
    函 数 名:writex()
    功 :写字节函数芯片应答检测
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    void writex(unsigned char j)
    {
    unsigned char itemp
    tempj
    for (i0i<8i++)
    {
    if ((temp&0x80)0)
    {
    sda1
    }判高位数1

    else
    {
    sda0
    } 0
    flash()
    scl1flash()scl0 时钟
    flash()
    temptemp<<1 数左移1位
    }
    sda1 置输入口
    scl1 时钟高
    while((sda1)&&(i<255))
    {
    i++
    } 等芯片输出低延时
    scl0 时钟低
    sda0 启动做准备
    }
    ********************************************************************
    函 数 名:readx()
    功 : 读字节函数
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:20090520
    ***********************************************************************
    unsigned char readx()
    {
    unsigned char ijk0
    sda1 置输入口
    for (i0i<8i++)
    {
    scl1 时钟高
    if (sda1) j1 读
    else j0
    k(k<<1)|j 取数
    flash()
    scl0 时钟低
    flash()
    }
    return(k) 返回测量值
    }
    ********************************************************************
    函 数 名:xAT24C64_read()
    功 :读单字节函数
    说 明:
    入口参数:
    返 回 值:
    设 计:XX 日 期:20090520
    ***********************************************************************
    unsigned char xAT24C64_read(unsigned char address)
    {
    unsigned char i
    start() 启动
    writex(0xa0) 写器件址写
    writex(address) 写芯片址
    start() 启动
    writex(0xa1) 写器件址读
    ireadx() 读数
    empty() 应答应答
    stop() 停止
    return(i) 返回
    }
    void xAT24C64_write(unsigned char addressunsigned char info1unsigned char info2)根保存数少添加相应址
    {
    start() 启动
    writex(0xa0) 写器件址写
    writex(address) 写芯片址
    writex(info1) 数
    writex(info2) 数
    stop()停止

    }

    IDS2560语音提醒模块子程序
    *********************************************************************
    模块名称:ids2560c
    功 :语音提醒模块 语音芯片型号:IDS2560
    说 明:
    程序设计:张奇
    设计时间:20091128
    *********************************************************************
    #include
    #include

    #define uchar unsigned char
    #define uint unsigned int

    void record(void)
    void playback(void)

    uchar count 重复播放次数计数器
    uchar StartFlag 开始键标志
    uchar IdleFlag 系统否处空闲状态标志

    * 定义语音芯片ISD2560控制引脚 *
    sbit START P1^0
    sbit EOM P1^4
    sbit PR P1^5
    sbit PD P1^6
    sbit CE P1^7

    ********************************************************************
    函 数 名:delay()
    功 :延时
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2091128
    ***********************************************************************
    void delay(uint t)
    {
    uint i
    while(t)
    {
    for (i0i<125i++)
    {}
    }
    }
    ********************************************************************
    函 数 名:record()
    功 : 录音函数
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2091128
    ***********************************************************************
    void record(void)
    {
    CE 0
    PD 0
    PR 0

    }
    ********************************************************************
    函 数 名:playback(void)
    功 : 放音函数
    说 明:
    入口参数:
    返 回 值:
    设 计:张奇 日 期:2091128
    ***********************************************************************
    void playback(void)
    {
    CE 0
    PD 0
    PR 1
    }
    印模块程序
    *********************************************************************
    模块名称:印程序模块
    功 :
    说 明:
    程序设计:张奇
    设计时间:20100130
    *********************************************************************
    #include
    #define uchar unsigned char
    #define uint unsigned int
    sbit BUSY P1^0
    uchar data A[]{0x1b0x380x04 初始化命令
    *0xd00xc20xc80xd90xb40xef* 需印汉字容
    0x0d} 印命令
    void main()
    { int i
    SCON 0xd0 串口初始化 1 位起始位9 位数位1 位停止位
    TMOD | 0x20
    PCON | 0x00
    TH10xf4 波特率2400
    TL10xf4
    TR11
    ES1
    TI0
    for (i0i<10i++)
    {ACCA[i]
    TB8P 计算奇偶校验位
    while(BUSY){BUSY 1}
    SBUF A[i] 发送印数
    while (TI)
    { }
    TI0
    }
    }
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    出租车计价器的设计与实现毕业设计

         本科生毕业设计 题 目: 出租车计价器的设计...

    5年前   
    1002    0

    基于STM32F103ZE的出租车计价器毕业论文

    基于STM32F103ZE的出租车计价器毕业论文 摘 要 本设计以STM32F103ZE为控制核心处理器,实现了矩阵键盘输入、五方向控制手柄信息输入、中文LCD显示、8位数码管显示屏显...

    5年前   
    1396    0

    上海市出租车计价器管理规定

    上海市出租车计价器管理规定第一条(目的和依据)为了加强对本市出租汽车计价器(以下简称计价器)的管理,保障经营者、从业人员和乘客的合法权益,根据《中华人民共和国计量法》、《上海市计量监督管理条例...

    2年前   
    529    0

    基于单片机的出租车计价器设计(附源程序)

    基于单片机的出租车计价器设计(附源程序)摘 要本设计的是一个基于单片机AT89S52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外...

    2年前   
    274    0

    毕业设计论文:

    本文介绍了基于AT89S52单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。系统以AT89S52单片机为控制器,以...

    4年前   
    1791    0

    论文:出租车计费器

    本次课设我们采用可编程逻辑器件(FPGA/Verilog)进行对出租车计费器的设计。本设计实现了出租车计费器所需的一些基本功能,计费金额包括起步价、里程计费等。该设计采用模块化设计,在VIVAD...

    5年前   
    1670    0

    毕业设计(论文)任务书

    毕业设计(论文)任务书  毕业设计(论文)任务书 指导教师 课题名称 作业期限 月 日起 月 日 止 接受单位 学生姓名 学 号 所在专业 上 海 大 学 二○○年 月 日 (一) 课题来源,...

    9年前   
    919    0

    毕业设计(论文)开题报告

      毕业设计(论文)开题报告 (由学生填写) 学生姓名   专业   班级   拟选题目 中俄双边旅游经济发展与进出口贸易互动关系的应用研究 选题依据及研究意义 (...

    8年前   
    5582    0

    毕业设计(论文)任务书

        毕业设计(论文)任务书 (2018届)   题    目 试论光影在珠宝专卖店中的运用                             指导教师         ...

    6年前   
    2872    0

    毕业设计论文开题报告

    毕业设计论文开 题 报 告课 题 名 称 基于PLC的十字路口交通灯 控制系统设计 类 别 毕业设计 专 ...

    3年前   
    911    0

    毕业设计(论文)工作流程

    毕业设计(论文)工作流程  教务处下发毕业设计(论文)工作安排各专业公布课题名称资 格 审 查组织学生选题,汇总,打印选题情况一览表指导教师填写毕业设计(论文)任务书下达开题任务学生调研(实习...

    9年前   
    722    0

    毕业设计(论文)开题报告

    **工业大学艺术与信息工程学院 毕业设计(论文)开题报告 学生姓名 刘力博 专业 视觉传达 学号 2011110424 设计(论文)题目 包装设计-香思 开题报告内容包...

    9年前   
    7013    0

    毕业设计(论文)开题报告

    关于**省加工贸易转型升级问题,国内外的专家学者在这一领域作了一定程度的研究分析,在我们的专著、论著与研究报告中都提出了各自的观点和结论。

    6年前   
    2228    0

    动漫毕业设计论文

    XX职业技术学院 毕业设计说明 题目: 动漫网站毕业设计 系 别 信息工程系 ...

    5年前   
    1483    0

    毕业设计(论文)开题报告

     毕业设计(论文)开题报告     题    目:微博反腐的政策分析——以雷政富事件为例      开题报告填写要求   1.开题报告作为毕业设计(论文)委员会对学生答辩...

    9年前   
    7660    0

    毕业设计论文的写作指导

    毕业设计论文的写作指导毕业设计论文是毕业设计工作的总结和提高,和做科研开发工作一样,要有严谨求实的科学态度。毕业设计论文应有一定的学术价值和实用价值,能反映出作者所具有的专业基础知识和分析解决...

    9年前   
    606    0

    毕业设计论文开题报告

    一、选题意义我国是一个发展中人口大国,且80%人口居住在农村,城市人口只有20%,虽然城市市场一直是家电市场的根据地,但大多数生产厂商发现,城市居民的家电消费已趋饱和,城市家电市场的钱越来越难挣

    3年前   
    709    0

    冷库毕业设计论文

    毕业设计题目:冷库设计1. 冷库地址:广州2. 冷库容量:贮藏量:3吨 3. 库温:1) 冻结物冷冻间:-152) 冷媒:R124. 设计内容1) 冷库总体设计,绘制冷库平面图;2) ...

    4年前   
    1129    0

    毕业设计论文写作方法指导

    毕业设计论文写作方法指导附件2毕业设计论文写作方法指导毕业设计论文是毕业设计工作的总结和提高,与从事科研开发工作一样,必须有严谨求实的科学态度。毕业设计论文应有一定的学术价值和实用价值,能反映...

    12年前   
    516    0

    2018年毕业设计(论文)形式格式要求

    毕业设计(论文)形式格式要求  题目:数字式温度计的设计(要用单片机写) 51系列单片机,程序,c语言  图用protel 99 se 画,只要是温度计就行了,论文写十多页就可以,大专水平  ...

    6年前   
    519    0

    文档贡献者

    z***u

    贡献于2019-06-03

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档