单片机出租车计价器设计课程设计
东北大学课程设计 任务
书
任务书
课程设计(论文)题目:出租车计价器系统设计 基本内容:利用8051单片机、可编程键盘显示接口器件8279、LCD出租车费用及时间显示,LED做辅助显示。 课程设计(论文)专题部分: 题目:出租车计价器系统设计 基本内容:练习单片机C51程序语言的编程,及调试程序。多个芯片的综合应用,解决具体问题。 学生接受课程设计(论文)题目日期 第19周 指导教师签字: 2009年7月7日 i
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作 者 签 名: 日 期: 指导教师签名: 日 期:
使用授权说明
本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名: 日 期:
ii
学位论文原创性声明
本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期: 年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期: 年 月 日
导师签名: 日期: 年 月 日
iii
摘 要
随著超大规模集成电路技术的发展,单片机也随之有了很大发展,各种新颖的单片机层出不穷,并已广泛地应用到人类生活的各个领域,成为当今科学技术现代化不可缺少的重要工具。许多高校也纷纷开办了单片机这门学科,并在学科教授完后设有课程设计,希望同学能够通过这次设计学习和应用单片机解决工作中碰到的实际问题。
现代交通工具迅猛发展,出租车在人们的日常生活中所扮演的角色越练越重要,但如何准确计费,以达到既使乘客满意又不让出租车司机亏本的目的,就迫在眉睫。本课程设计主题是利用89C51单片机、LCD液晶显示器、可编程键盘显示接口器件8279、8位LED等实现出租车费用、路程和时间显示,作为一个单片机在实际生活中的简单应用。
iv
关键字:89C51, 8279,LCD液晶显示器,出租车计价器,
v
东北大学课程设计 第一章 概述
目 录
任务书 ....................................................... i 摘 要 ....................................................... ii 第一章 概述 .............................................. - 2 -
1.1 设计意义 .......................................................... - 2 - 1.2系统功能 ........................................................... - 2 - 1.3 功能详述 .......................................................... - 3 - 1.3.1 按键 .............................................................. - 3 - 1.3.2 操作流程 ...................................................... - 3 - 1.4系统所涉及模块 ............................................... - 3 - 1.4.1 定时器与计数器 .......................................... - 3 - 1.4.2 路程和费用计算 .......................................... - 4 - 1.4.3 实时时钟 ...................................................... - 4 - 1.4.4 键盘及LED ................................................... - 4 - 1.4.5 LCD液晶显示器 ........................................... - 6 - 1.5 我所做的工作 .................................................. - 6 - 第二章 硬件设计 .......................................... - 7 - 2.1 硬件原理图简图 .............................................. - 7 - 2.2 简要说明 .......................................................... - 7 - 第三章 软件设计流程及描述 ................................ - 9 - 3.1 主函数程序流程图 .......................................... - 9 - 3.2 定时器中断服务程序流程图 ........................ - 10 -
- 1 -
东北大学课程设计 第一章 概述
3.3 按键中断服服务程序流程图 ........................ - 10 - 第四章 源程序代码 ....................................... - 12 -
第五章 课程设计体会 ..................................... - 41 - 第六章 参考文献 ......................................... - 43 -
第一章 概述
1.1 设计意义
出租车的计价器应用很广,平时比较常见,理解较为深入,适合作为编程联系的例子。在设计中能够更加透彻的理解和较为全面的考虑各种情况。
通过这次的练习,可以加深对单片机应用了解,更能灵活的使用51系列单片机的资源解决实际问题。
1.2系统功能
上车按键后开始计价。有实时时钟、单价、距离和总价钱显示。可以通过键盘修改单价(元/公里)和时间。有清除键用以清楚上次费用。利用LCD分别显示时间、单价、路程和费用。LED辅助显示说做操作。
主要方法:原理是,价格=速度时间单价;采用直流电机测速单元模拟出租车速度,通过光电耦合A/D转换进行速度采样,利用单片机的定时器/计数器定时和计数,用LED数码管或LCD显示总价和时间,并通过键盘进行单价设定及时间显示。
附加功能:当出租车速度低于某一设定值时,自动进行计数,当计时每达到1分钟时,价格按照1公里长度计。
- 2 -
东北大学课程设计 第一章 概述
1.3 功能详述
1.3.1 按键 0~9数字键; B:开始计价; C:清除数据;
D:(P)设置单价键,按一次后,再按数字键进行设置; E: (T) 设置时间键,按一次后,再按数字键进行设置; F/A:完成设置键。 1.3.2 操作流程
程序运行后,时间照常显示。此时可以进行单价和时间的设置。按B键开始计价,运行中也可以进行单价和时间的设置。按C键清除上次费用和路程
1.4系统所涉及模块
1.4.1 定时器与计数器
利用模拟直流定动机模拟出租车,转盘上有孔,利用光电转换变成电脉冲。利用计数器进行计数,定时器进行定时。
- 3 -
东北大学课程设计 第一章 概述
1.4.2 路程和费用计算
根据计数值和计时时间换算出速度,乘以单价得出单位计时间隔的费用,加上以前的费用得出即时费用。即路程=计数个数*计时间隔/转盘上孔的个数。即时费用=路程*价格。
1.4.3 实时时钟
出租车上的显示器上要求有时钟,选择DS12887时钟芯片作为时钟控制单元。
1.4.4 键盘及LED
上车开始计价,数据清除,单价及时间的修改都需要使用键盘,数字加上功能键共计15个,因此使用8279来管理4×4键盘及辅助显示的8位LED。8279 是一种通用的可编程的键盘/显示器接口器件,可对64 个开关组成的键盘矩阵进行自动扫描,接收键盘上的输入信息,并在有键输入时向单片机请求中断,还能对8 位或16位LED 自
- 4 -
东北大学课程设计 第一章 概述
动扫描,使显示缓冲器的内容在LED 上显示出来。利用8279 对键盘/显示器的自动扫描,可以减轻CPU 负担,具有显示稳定、程序简单、不会出现误动作等特点。
利用8279芯片管理键盘,可有效减轻单片机I/O资源负担。键盘由74LS138译码扫描,当有按键时,有8279自行编值,并引发外中断。在中断程序中读取键值。
8279采用单±5V电源供电,40脚封装。其具体管脚介绍如下:
DB0~DB7:双向数据总线,用来传送8279与CPU之间的数据和命令。 CLK:时钟输入线,用以产生内部定时的时钟脉冲。
RESET:复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序时钟前置分频器被置为31,RESET信号为高电平有效。
CS:片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。 A0:缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态, 当为低电平时,表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。
RD:读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。 WR:写信号输入线,低电平有效,将缓冲器读出,将数据从外部数据总线写入8279的缓冲器。
- 5 -
东北大学课程设计 第一章 概述
1.4.5 LCD液晶显示器
时钟、单价、路程及费用需要使用液晶显示器来显示,选用RT12864hz液晶
显示器。各种参数经过处理后用它来显示。RT12864HZ汉字图形点阵液晶显示模块可显示汉字和图形。内置8192个中文汉字 (16 x16 点阵)、 128个字符(8X16点阵)及64X256点阵显示(用子图形)。模块由20个引脚与外界电路相连,其中8条数据线, 5条控制线,3条电源线,2条背光电源线,2条没定义。文本显示RAM提供8个,4行的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM和CGRAM字型。HCGROM为半宽字型(8 x 16点阵),CGROM为中文字型,CGRAM为自定义的中文字型。三种字型的选择由写入DDRAM的编码选择
1.5 我所做的工作
经过分工我负责用Protel画原理图,编写部分程序模块,包括时钟控制函数、键盘输入控制函数、模拟直流电机速度转换函数、LCD状态检测及刷新函数、X5045存储模块、主程序及整个程序的调试。
- 6 -
东北大学课程设计 第二章 硬件设计
第二章 硬件设计
2.1 硬件原理图简图
图2.1 硬件简图
2.2 简要说明
1. 外部测速单元有模拟直流电动机(通过直流电机测速以及对速度进行采样)和光电耦合器组成,输出脉冲信号由计数器输入单片机进行处理,其中电动机速度可调;
2. 4×4键盘和8位LED由8279管理,IRQ接INT0,CLK接ALE,键盘由十个数字键和五个功能键组成,其中一个键重复定义,LED用字母和数字显示表示当前的状态、进行的操作以及输入的数据;
3. LCD显示信息,如下图;
图 2.2 LCD及LED显示示意图
- 7 -
东北大学课程设计 第二章 硬件设计
4.元器件清单
器件名称 89C51 DS12887 RT12864 8279 74LS138 74LS245 74LS573 4×4键盘 生产公司 ATMEL DALLAS NEC Japan TOSHIBA TOSHIBA TOSHIBA 数量 1 1 1 1 3 1 1 1 - 8 -
东北大学课程设计 第三章 软件设计流程及描述
第三章 软件设计流程及描述
3.1 主函数程序流程图
先进行初始化,显示计价初始值,然后等待开始计价或者进行设置。计价分两种情况:速度超过设定值时,按当时速度进行计价;速度低于设定值时,自动进行计数,当计数每达到一分钟时,价格按照一公里长度计。修改分、修改时间和单价。清零用于清除当前路程和费用,以便进行下次计价。
开始初始化计价否?速度低于设定值一分钟按一公里计算速度*时间累加并显示结束计价否结束
- 9 -
东北大学课程设计 第三章 软件设计流程及描述
3.2 定时器中断服务程序流程图
开计数器 开定时器 提取数据 设置计数/定时常数 进关计数器 关定时器 中 在定时时间内记录脉冲个数,赋给全局变量,用于计算速度。
3.3 按键中断服服务程序流程图
读取键值,转换为可用数据,并且置位相应标志位,为以后操作做好准备。然后根据状态在LED上显示相应操作。
- 10 - 进入读取键值 转换, 通过全局变量送至置位相应标志在LED上中断东北大学课程设计 第三章 软件设计流程及描述
3.4 时钟芯片中断服务程序
中断进入 低速计数值加一 关中断 取时间(时,分,秒) 开中断 由于DS12887时钟芯片一秒钟产生一次中断,因此低速计数在这里进行计数。读取时间数值,赋给全局变量进行处理。
- 11 -
东北大学课程设计 第四章 源程序代码
第四章 源程序代码
#include /* DS12887实时时钟时间地址设置 */ #define second XBYTE [0x6000] /* 秒寄存器地址 */ #define sec_alarm XBYTE [0x6001] #define minute XBYTE [0x6002] /* 分寄存器地址 */ #define min_alarm XBYTE [0x6003] #define hour XBYTE [0x6004] /* 小时寄存器地址 */ #define week XBYTE [0x6006] /* 星期寄存器地址 */ #define date XBYTE [0x6007] /* 日期寄存器地址 */ #define month XBYTE [0x6008] /* 月寄存 - 12 - 东北大学课程设计 第四章 源程序代码 器地址 */ #define year XBYTE [0x6009] /* 年寄存器地址 */ #define rega XBYTE [0x600A] /* A寄存器地址 */ #define regb XBYTE [0x600B] /* B寄存器地址 */ #define regc XBYTE [0x600C] /* C寄存器地址 */ #define regd XBYTE [0x600D] /* D寄存器地址 */ /* RT12864HZ汉字图形点阵液晶地址设置 */ #define w_c_add XBYTE[0x2070] /* 写命令字地址 */ #define w_d_add XBYTE[0x2071] /* 写数据地址 */ #define r_s_add XBYTE[0x2072] /* 读状态字地址 */ #define r_d_add XBYTE[0x2073] /* 读数据地址 */ #define COM XBYTE[0x2021] /*8279命令口 */ - 13 - 东北大学课程设计 第四章 源程序代码 #define DAT XBYTE[0x2020] /*8279数据口 */ #define L 1 /*长度系数 */ #define TI 50 /*分度数*/ */ #define LOW 30 /*最低速度 */ */ */ uint xdata a=1,b=0; uint idata len,fa,m,n,o,p,q,r,s,t,COUT,CLO; uint idata h1,h2,m1,m2,s1,s2; /*时钟参数*/ uint idata price=10,fate=00,length=0,leng; uint 个状态标志位*/ /*设置,清除,开始计价,单价修改,时间修改,两位数监视,六位数监视,数字标志*/ - 14 - #define HN 30 /*孔个数 uchar xdata key; /*键值 uint idata num=0; /*计数值 idata state=0,clear=1,begin=0,pri,tim,tt=0,cc=0;nn=0;/*几 东北大学课程设计 第四章 源程序代码 unsigned char bdata status; /* lcd可位寻址片内数据存储器,允许位与字节混合访问 */ sbit busy=status^7; /*lcd“忙”线的第7位*/ uchar bdata sta_8279; /*8279*/ sbit du=sta_8279^7; /* 8279方式设置命令字 */ unsigned char rflag; unsigned char bdata sta_ds; sbit uip=sta_ds^7; uchar ds_h,ds_m,ds_s,ds_t; unsigned char bdata ds_time; unsigned B7,0xB8,0xB9}; uchar 0x7F,0x6F, 0x71,0x7C,0x39,0x73,0x31,0x71};/* 0~F的字型编码*/ uchar xdata hz2[16]={0xB5,0xA5,0xBC,0xDB,0xA3,0xBA,0x20,0 - 15 - char code NO[10]={0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0x code tab[16]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 东北大学课程设计 第四章 源程序代码 x20,0x20,0x20, /* 单 价 : 空 空 */ 0xA3,0xB0,0xA3,0xB0,0xD4,0xAA}; 元 */ uchar xB0,0xA3,0xB0, /* 0xA3,0xB0,0xA3,0xB0,0x4B,0x4D}; /* N N k m */ uchar 0xB0,0xA3,0xB0, /* 格 : N N */ - 16 - /* N N xdata hz3[16]={0xBE,0xE0,0xC0,0xEB,0xA3,0xBA,0xA3,0 距 离 : 空 N */ xdata hz4[16]={0xBC,0xDB,0xC7,0xAE,0xA3,0xBA,0xA3, 价 东北大学课程设计 第四章 源程序代码 0xA3,0xB0,0xA3,0xB0,0xD4,0xAA}; 元 */ uchar BD,0xCE,0xBB, 两 位 */ 0xB5,0xA5,0xBC,0xDB,0x20,0x20}; 空 */ uchar 0,0xA3,0xB0, N N */ 0xD4,0xAA,0xA3,0xAF,0x4B,0x4D}; / k m */ - 17 - /* N N xdata hz5[16]={0x20,0x20,0xCA,0xE4,0xC8,0xEB,0xC1,0x /* 空 输 入 /* 单 价 xdata hz6[16]={0x20,0x20,0x20,0x20,0xA3,0xBA,0xA3,0xB /* 空 空 : /* 元 东北大学课程设计 第四章 源程序代码 void initial (void); void delay(void); void check_lcd(void); void show_lcd(uchar *,uchar *,uchar *); void lcd_busy(void); /*LCD忙状态检测函数 */ void compute(void); void change_pri(void); void change_time(void); void clock(void); void check_ds12887(void); void e(void) {w_c_add=0x80; delay;lcd_busy(); w_d_add=0xCA; lcd_busy(); w_d_add=0xE4; lcd_busy(); w_d_add=0xC8; lcd_busy(); w_d_add=0xEB; lcd_busy(); w_d_add=0xB4; - 18 - 东北大学课程设计 第四章 源程序代码 lcd_busy(); w_d_add=0xED; lcd_busy(); w_d_add=0xCE; lcd_busy(); w_d_add=0xF3; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; lcd_busy(); w_d_add=0x20; - 19 - 东北大学课程设计 第四章 源程序代码 h1=0;h2=0;m1=0;m2=0;s1=0;s2=0;cc=0; delay(); delay(); delay();delay(); delay(); delay(); } main() { uint inf=0; initial(); show_lcd(hz2,hz3,hz4); while(1) { clock(); if(begin==1) { if(inf==0) { fate=20; inf=1; } if(state==0) { if(num>=LOW) - 20 - 东北大学课程设计 第四章 源程序代码 { COUT=0; price=a*10+b; len+=num*L/HN; if(len/TI>=0) } else { { leng=len/TI; len%=TI; } fa=leng*price; length+=leng; leng=0; fate+=fa; if(COUT>=120) { length++; fate+=(10*a+b); COUT=0; } - 21 - 东北大学课程设计 第四章 源程序代码 } compute(); show_lcd(hz2,hz3,hz4); } else { if(pri==1) change_pri(); if(tim==1) change_time(); } } if(clear==1) { length=0; fate=0; inf=0; compute(); show_lcd(hz2,hz3,hz4); - 22 - 东北大学课程设计 第四章 源程序代码 if(pri==1) change_pri(); if(tim==1) change_time(); } }//while(1) }//main /********************以下是程序(包括中断)********************************/ void keybord(void) interrupt 0 using 1 { uchar keyboard=0; EX0=0; COM=0x50; keyboard=DAT; keyboard &=0x0f; /* 保留低四位 */ switch(keyboard) { case 0x0: key=0; tt++;nn=1;cc++; break; case 0x1: key=1; tt++;nn=1;cc++; break; - 23 - 东北大学课程设计 第四章 源程序代码 case 0x2: key=2; tt++;nn=1;cc++; break; case 0x3: key=3; tt++;nn=1;cc++; break; case 0x4: key=4; tt++;nn=1;cc++; break; case 0x5: key=5; break; case 0x6: key=6; break; case 0x7: key=7; break; case 0x8: key=8; break; case 0x9: key=9; break; case 0x0B: begin=1;clear=0;nn=0;break; case 0x0C: clear=1;begin=0;nn=0;break; case 0X0D: state=1;pri=1;tim=0;nn=0;break; - 24 - tt++;nn=1;cc++; tt++;nn=1;cc++; tt++;nn=1;cc++; tt++;nn=1;cc++; tt++;nn=1;cc++; key=11;COUT=0; /*B begin*/ key=12; /*C clear*/ key=13; /*D set 东北大学课程设计 第四章 源程序代码 price*/ case default: /*F finish*/ } keyboard=tab[keyboard]; if(pri==1) if(nn==0) COM=0x80+8; else COM=0x80+4+tt; if(tim==1) if(nn==0) COM=0x80+8; else COM=0x80+1+cc; DAT=keyboard; EX0=1; } void int1serve() interrupt 2 using 2 - 25 - 0x0E: key=15; key=14; state=1;tim=1;pri=0;nn=0;break; /*E set time*/ nn=0;break; 东北大学课程设计 第四章 源程序代码 { unsigned char temp2; COUT++; EX1=0; rflag=1; sta_ds=rega; while(uip); ds_h=hour; ds_m=minute; ds_s=second; temp2=regc; rflag=0; EX1=1; } void timer(void) interrupt 3 using 3 { TR1=0; TR0=0; num=TH0*256+TL0; TH0=0; TL0=0; - 26 - 东北大学课程设计 第四章 源程序代码 TH1=-(50000/256); TL1=-(50000%256); CLO++; TR1=1; TR0=1; } void initial(void) { COM=0xd1; /* 清除显示*/ ACC=DAT; if(ACC^1); /* P奇偶标志。若值为1的位数为奇数,则P置位,否则清除 */ COM=0x00; /* 8字符显示左入口 */ COM=0x34; /* 34次分频*/ TMOD=0X15; TH0=0; TL0=0; TH1=-(50000/256); TL1=-(50000%256); TR0=1; TR1=1; - 27 - 东北大学课程设计 第四章 源程序代码 EA=1; EX0=1; EX1=1; ET1=1; check_ds12887(); } void delay(void) { unsigned char i,j; for(i=0;i<100;i++) { for(j=0;j<150;j++) { ; ; } } } void check_lcd(void) { - 28 - 东北大学课程设计 第四章 源程序代码 uint i; lcd_busy(); w_c_add=0x30;/* 功能设置:8位数据 */ for(i=0;i<255;i++) lcd_busy(); w_c_add=0x0c; /* 显示状态:整体显示,游标位置无效*/ lcd_busy(); w_c_add=0x01;/* 清除显示:将DDRAM填满“20H”,并且设定DDRAM的地址计数器到“00”*/ lcd_busy(); w_c_add=0x02;/* 地址归位:设定DDRAM的地址计数器到“00”,将游标移到开头原点位置 */ } void show_lcd (uchar *b1,uchar *c1,uchar *d1) { unsigned char add; unsigned char i; check_lcd(); lcd_busy(); - 29 - 东北大学课程设计 第四章 源程序代码 add=0x90; /* 设置显示坐标,90H对应字符的第二行第一列 */ lcd_busy(); w_c_add=add; /* 送命令 */ for(i=0;i<8;i++) { lcd_busy(); w_d_add=b1[2*i]; lcd_busy(); w_d_add=b1[2*i+1]; } add=0x88; /* 设置显示坐标,字符的第三行第一列 */ lcd_busy(); w_c_add=add; /* 送命令 */ for(i=0;i<8;i++) { lcd_busy(); w_d_add=c1[2*i]; lcd_busy(); w_d_add=c1[2*i+1]; } - 30 - 88H对应东北大学课程设计 第四章 源程序代码 add=0x98; /* 设置显示坐标,98H对应字符的第四行第一列 */ lcd_busy(); w_c_add=add; /* 送命令 */ for(i=0;i<8;i++) { lcd_busy(); w_d_add=d1[2*i]; lcd_busy(); w_d_add=d1[2*i+1]; } delay(); clock(); } void lcd_busy(void) /*LCD忙状态检测函数 */ { do { status=r_s_add; /* 读状态字地址的第7位 */ - 31 - 东北大学课程设计 第四章 源程序代码 } while(busy); } void compute(void) { uint f1,l1; f1=fate; l1=length; p=l1%10; /*数字位拆分**路程*/ l1/=10; o=l1%10; l1/=10; n=l1%10; l1/=10; m=l1%10; t=f1%10; /*数字位拆分**价钱*/ f1/=10; s=f1%10; f1/=10; r=f1%10; f1/=10; - 32 - 东北大学课程设计 第四章 源程序代码 q=f1%10; hz2[11]=hz2[13]=0xB0; /*清零*/ hz3[9]=hz3[11]=hz3[13]=0xB0; hz4[9]=hz4[11]=hz4[13]=0xB0; hz2[11]+=a; /*赋值*/ hz2[13]+=b; hz3[7]+=m; hz3[9]+=n; hz3[11]+=o; hz3[13]+=p; hz4[7]+=q; hz4[9]+=r; hz4[11]+=s; hz4[13]+=t; } void change_pri() { show_lcd(hz2,hz5,hz6); if(key==15) //15 -> Finish { - 33 - 东北大学课程设计 第四章 源程序代码 COM=0xd1; /* 清除显示*/ pri=0; state=0; tt=0; hz2[11]=hz6[7]; } else { } } hz2[13]=hz6[9]; show_lcd(hz2,hz3,hz4); if(nn) { if(tt==1) a=key; if(tt==2){b=key;tt=0;} hz6[7]=0xB0; hz6[7]+=a; hz6[9]=0xB0; hz6[9]+=b; } show_lcd(hz2,hz5,hz6); - 34 - 东北大学课程设计 第四章 源程序代码 void change_time(void) { uint hh,mm,ss,temper; if(key==15) { tim=0; state=0; cc=0; tt=0; COM=0xd1; /* 清除显示*/ } else { if(nn) { if(cc==1) { h1=key;if(h1>2){e();/*cc=0;h1=0;*/}} if(cc==2) { h2=key;if((h1==2)&&(h2>3)){e();/*cc=0;h2=0;h1=0;*/}} if(cc==3) { m1=key;if(m1>=6){e();/*cc=0;m1=0;h2=0;h1=0;*/}} - 35 - 东北大学课程设计 第四章 源程序代码 if(cc==4) m2=key; if(cc==5) { s1=key;if(s1>=6){e();/*cc==0;s1=0;m1=0;h2=0;h1=0;m2=0;*/}} if(cc==6) {s2=key;cc=0;} temper=h1*16; hh=temper|h2; temper=m1*16; mm=temper|m2; temper=s1*16; ss=temper|s2; hour=hh; minute=mm; second=ss; } clock(); show_lcd(hz2,hz3,hz4); } } void clock() - 36 - 东北大学课程设计 第四章 源程序代码 { unsigned char temp1; if (rflag==0) { w_c_add=0x80; /* 写命令字:设定DDRAM地址到地址计数器(AC) */ delay(); temp1=ds_h & 0xf0; /* 小时保留高四位 */ ds_t=_cror_(temp1,4); /* 将变量temp1循环右移4位 */ lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; /* 写数据*/ ds_t=ds_h & 0x0f; /* 小时保留低四位 */ lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; /* 写数据**小时*/ lcd_busy(); w_d_add=0xA3; /* : */ lcd_busy(); - 37 - 东北大学课程设计 第四章 源程序代码 w_d_add=0xBA; temp1=ds_m & 0xf0; ds_t=_cror_(temp1,4); lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; /* 写数据**分*/ ds_t=ds_m & 0x0f; lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; lcd_busy(); w_d_add=0xA3; /* : */ lcd_busy(); w_d_add=0xBA; temp1=ds_s & 0xf0; ds_t=_cror_(temp1,4); lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; /* 写数据**秒*/ - 38 - 东北大学课程设计 第四章 源程序代码 ds_t=ds_s & 0x0f; lcd_busy(); w_d_add=0xA3; lcd_busy(); w_d_add=NO[ds_t]; for(temp1=0;temp1<255;temp1++); delay(); delay(); } } void check_ds12887(void) { unsigned char temp; rega=0x2f; /* 开启震荡器,允许计时 delay(); regb=0x80; temp=regc; temp=regd; //write time second=0x00; - 39 - */ 东北大学课程设计 第四章 源程序代码 minute=0x00; hour=0x12; week=0x01; year=0x03; month=0x12; regb=0x42; //open ex1 EX1=1; } /*************************************************/ - 40 - 上是代码以东北大学课程设计 第五章 课程设计体会 第五章 课程设计心得体会 经过4天的不懈努力,在王老师和杨老师的指导下,至验收之日,设计要求基本已实现,包括实时时间显示与设置,计费标准设置,费用统计,以及车辆在遇到堵车等非理想情况时的计费标准调整及所记录结果存储等。 该设计运用89C51单片机作为总控制器,通过将采集到的出租车行驶速度转换成电脉冲信号,传递给单片机处理后,用LCD液晶显示器显示出来。在设计当中,我们通过查阅各种资料以及学长的设计,将部分资料引用过来,并修正并添加了一部分模块,将他们应用到我们的设计当中。既让我们懂得了如何借鉴前人的优秀设计思想,也让我们切实体会到了现代设计中模块化设计的巨大优势。 此次设计经一步加强了我们的动手能力,为将来走向工作岗位积累了一点实践经验。 本次设计中遇到的问题及解决方法: 1.实验箱故障问题: 本次实验中,我组使用的实验箱上的LCD显示器件是坏的,不能做正常的测速。在编写程序时,耗费了较多的时间对各种可能因素逐一排查,而在其他的实验箱上能够成功高度,终于确定问题来自该器件本身。 2. 计算费用: 速度较大时路程正常增加,而当速度较小时路程没有变化,故又修改了当速度小于某值时路程及计费的算法。 由于所设单位为KM,路程随时间变化较慢,需多花一点时间观察才能看见正确的显示结果。 3. LCD液晶显示: 主要存在液晶显示抖动不稳及容易产生一些乱码,经检验为实验箱上的LCD液晶 显示器本身故障。其次,正确合理安排时间、单价、路程和计费的位置也至关重要。 4. 综合调试: 综合调试时遇到的问题较多,也对其他子程序做了较多的修改。涉及到标志位初始值的问题,显示频率的问题等。起先费用有一个起价费,在费用初始化时边加上,但是清除后显示费为起价费,与显示不符,后来在计价程序段中加上了起价判断,在清除时就可以将费用显示为零,按“B”后立即显示起价费。在清除状态时不能做设置 - 41 - 东北大学课程设计 第五章 课程设计体会 操作,便在清楚程序段中加上了设置判断程序段,但是在清楚状态修改单价时,显示在设置状态和正常状态之间闪动,未能修正。 总之, 虽有4天整的时间做本次课程设计,但总觉得并没有做得很完美,主要问题存在于X5045模块没有调试成功,我们曾单独编程用于数据的写入和读取,但并没有从中读到我们想要的数,还有对直流电机测速数据处理地也不是很准确,从中发现了自己毛躁等问题,还有待于以后做进一步改正,希望本次课程再多几天并不是在考试前就更好了. 最后感谢王老师和杨老师在本次课程设计中给预的帮助. - 42 - 东北大学课程设计 参考 文献 参考文献 1. 单片机的C语言应用程序设计[M],马忠梅,籍顺心。 北京:北京航空航天大学出版社,2005 2. 单片机原理及接口技术(第3版)[M], 李朝青。 北京:北京航空航天大学出版社,2005 3.微控制器原理及接口技术实验教程[M],张志,高大志,杨为名等。沈阳:东北大学出版社,2004 4. C51单片机实验指导书[M],闻绍飞。沈阳:信息学院实验中心,2000 5.东北大学微控制器实验室源程序 - 43 - 东北大学课程设计 参考 文献 学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下进行的研究工作所取得的成果。尽我所知,除文中已经特别注明引用的内容和致谢的地方外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明并表示感谢。本人完全意识到本声明的法律结果由本人承担。 学位论文作者(本人签名): 年 月 日 学位论文出版授权书 本人及导师完全同意《中国博士学位论文全文数据库出版章程》、《中国优秀硕士学位论文全文数据库出版章程》(以下简称“章程”),愿意将本人的学位论文提交“中国学术期刊(光盘版)电子杂志社”在《中国博士学位论文全文数据库》、《中国优秀硕士学位论文全文数据库》中全文发表和以电子、网络形式公开出版,并同意编入CNKI《中国知识资源总库》,在《中国博硕士学位论文评价数据库》中使用和在互联网上传播,同意按“章程”规定享受相关权益。 论文密级: - 44 - 东北大学课程设计 参考 文献 □公开 □保密(___年__月至__年__月)(保密的学位论文在解密后应遵守此协议) 作者签名:_______ 导师签名:_______ _______年_____月_____日 _______年_____月_____日 - 45 - 东北大学课程设计 参考 文献 独 创 声 明 本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。 本声明的法律后果由本人承担。 二〇一〇年九月二十日 毕业设计(论文)使用授权声明 本人完全了解滨州学院关于收集、保存、使用毕业设计(论文)的规定。 本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。 (保密论文在解密后遵守此规定) - 46 - 作者签名: 参考 文献 二〇一〇年九月二十日 - 47 - 作者签名: 东北大学课程设计 东北大学课程设计 参考 文献 致 谢 时间飞逝,大学的学习生活很快就要过去,在这四年的学习生活中,收获了很多,而这些成绩的取得是和一直关心帮助我的人分不开的。 首先非常感谢学校开设这个课题,为本人日后从事计算机方面的工作提供了经验,奠定了基础。本次毕业设计大概持续了半年,现在终于到结尾了。本次毕业设计是对我大学四年学习下来最好的检验。经过这次毕业设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都有很大的进步。这期间凝聚了很多人的心血,在此我表示由衷的感谢。没有他们的帮助,我将无法顺利完成这次设计。 首先,我要特别感谢我的知道郭谦功老师对我的悉心指导,在我的论文书写及设计过程中给了我大量的帮助和指导,为我理清了设计思路和操作方法,并对我所做的课题提出了有效的改进方案。郭谦功老师渊博的知识、严谨的作风和诲人不倦的态度给我留下了深刻的印象。从他身上,我学到了许多能受益终生的东西。再次对周巍老师表示衷心的感谢。 其次,我要感谢大学四年中所有的任课老师和辅导员在学习期间对我的严格要求,感谢他们对我学习上和生活上的帮助,使我了解了许多专业知识和为人的道理,能够在今后的生活道路上有继续奋斗的力量。 另外,我还要感谢大学四年和我一起走过的同学朋友对我的关心与支持,与他们一起学习、生活,让我在大学期间生活的很充实,给我留下了很多难忘的回忆。 最后,我要感谢我的父母对我的关系和理解,如果没有他们在我的学习生涯中的无私奉献和默默支持,我将无法顺利完成今天的学业。 - 48 - 东北大学课程设计 参考 文献 四年的大学生活就快走入尾声,我们的校园生活就要划上句号,心中是无尽的难舍与眷恋。从这里走出,对我的人生来说,将是踏上一个新的征程,要把所学的知识应用到实际工作中去。 回首四年,取得了些许成绩,生活中有快乐也有艰辛。感谢老师四年来对我孜孜不倦的教诲,对我成长的关心和爱护。 学友情深,情同兄妹。四年的风风雨雨,我们一同走过,充满着关爱,给我留下了值得珍藏的最美好的记忆。 在我的十几年求学历程里,离不开父母的鼓励和支持,是他们辛勤的劳作,无私的付出,为我创造良好的学习条件,我才能顺利完成完成学业,感激他们一直以来对我的抚养与培育。 最后,我要特别感谢我的导师赵达睿老师、和研究生助教熊伟丽老师。是他们在我毕业的最后关头给了我们巨大的帮助与鼓励,给了我很多解决问题的思路,在此表示衷心的感激。老师们认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。在论文的撰写过程中老师们给予我很大的帮助,帮助解决了不少的难点,使得论文能够及时完成,这里一并表示真诚的感谢。 - 49 - 因篇幅问题不能全部显示,请点此查看更多更全内容