湖南工业大学单片机课程设计.docx
- 文档编号:24356000
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:27
- 大小:303.67KB
湖南工业大学单片机课程设计.docx
《湖南工业大学单片机课程设计.docx》由会员分享,可在线阅读,更多相关《湖南工业大学单片机课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
湖南工业大学单片机课程设计
湖南工业大学
单片机课程设计课题报告
班级:
自动化1102班
学号:
11401700507
姓名:
翟德忠
电气与信息工程学院
湖南工业大学
课程设计
资料袋
电气与信息工程学院(系、部)2013-2014学年第2学期
课程名称单片机应用系统指导教师职称
学生姓名翟德忠专业班级自动化1102班学号11401700507
题目出租车计费系统
成绩起止日期2013年11月11日~2013年11月22日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
1
2
课程设计说明书
1
3
课程设计图纸
1
张
4
5
11
湖南工业大学
课程设计任务书
2013—2014学年第一学期
电气与信息工程学院(系、部)自动化专业1102班班级
课程名称:
单片机应用系统
设计题目:
出租车计费系统
完成期限:
自2013年11月11日至2013年11月22日共2周
内
容
及
任
务
1.1外部脉冲自动计数,自动显示。
1.1.1设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
1.1.2设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
1.2设计一个出租车计费系统:
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前四位显示数码管显示里程数,后四位数码管显示价钱(角,元,十元,百元)
进
度
安
排
起止日期
工作内容
2013.11.11-2013.11.12
讲述设计内容及基本原理
2013.11.12-2013.11.19
进行系统的设计
2013.11.20-2013.11.22
进行系统的调试
主
要
参
考
资
料
[1]刘苗生、潘宗预.单片机测控系统设计.中国物质出版社,2006年
[2]欧伟明、何静、等,单片机原理与应用系统设计,电子工业出版社,2009年
指导教师(签字):
年月日
系(教研室)主任(签字):
年月日
(单片机应用系统)
设计说明书
(题目)
出租车计费系统
起止日期:
2013年11月11日至2013年11月22日
学生姓名
翟德忠
班级
自动化1102班
学号
11401700507
成绩
指导教师(签字)
电气与信息工程学院(部)
2013年11月22日
摘要
单片机是单片微型计算机(CPU)的简称,是集CPU、读写寄存器、定时器、计数器和多种接口于一体的微控制器。
它体积小,功耗小,成本低,功能强,广泛应用于智能产品和工业自动化控制领域。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计的目的就是要通过对它的学习应用,从而达到学习、设计、开发单片机软硬件的能力。
此次设计的出租车计费系统,是基于单片机最小系统设计的,利用外围的一些逻辑电路和数码管,来模拟显示出租车计费系统。
最后由Protues软件仿真。
关键词:
单片机最小系统,出租车计费
单片机最小系统硬件资源介绍
1、单片机系统数码管和键盘接口电路
2.八位数码管与键盘管理芯片Hd7972
Hd7279A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵。
单片即可完成LED显示键盘接口的全部功能。
Hd7279A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。
此外,还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等。
Hd7279A具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。
特点:
●串行接口,无需外围元件可直接驱动LED
●各位独立控制译码/不译码及消影闪烁等
●循环左移和循环右移指令等
●具有段寻址指令,方便控制独立LED
●64键键盘控制器,内含去抖电路
●具有DIP和SOIC两种封装形式供选择
(Hd7279A引脚图)
软件设计
一、设计任务:
1.1外部脉冲自动计数,自动显示。
1.1.1设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
1.1.2设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
1.2设计一个出租车计费系统:
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)
注:
要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。
2、设计思路:
(1)255计数:
255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。
然后对TL1的内容进行相应的二进制---十进制转换:
首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。
接着将相应的十进制数进行译码,并在LED数码管上显示出来。
每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。
图3255计数程序流程图
(2)0-5000计数显示
由于50000计数采用八位寄存器显然会一处,因此设计时数器T0采用工作方式1外部计数,16位寄存器技术范围到65536,符合50000计数的需要。
然后通过数据转换,将计数器的值转换成为十进制数,由单片机指令发送给Hd7279A进行方式1译码,通过数码管显示
(3)出租车计数器:
出租车计数器设计思路跟50000计数器设计思路大致相同,定时器采用工作方式1进行外部计数,每接收到一个计数脉冲信号时,历程累加500M,实现了500M一跳,再通过算数转换将历程值转换成为钱数。
3、设计程序及调试:
(1)255计数:
BIT_COUNTDATA07FH
TIMERDATA07EH
TIMER1DATA07DH
YTF_DATADATA07CH
BAIDATA07BH
SHIDATA07AH
GEWEIDATA079H
DATA_INDATA020H
DATA_OUTDATA021H
KEYBITP1.3;7279的KEY连接于P1.3
CLKBITP1.6;7279的CLK连接于P1.6
DATBITP1.7;7279的DATA连接于P1.7
CSBITP2.7;7279的CS连接于P2.7
ORG000H
JMPSTART
ORG100H
START:
MOVSP,#2FH;定义堆栈
MOVP1,#11011011B;I/O口初始化
MOVTIMER,#50
CALLSTART_DELAY;7279上电复位后要延时25ms
MOVDATA_OUT,#10100100B;发复位指令
CALLSEND
SETBCS;复位CS为高电平
MOVTMOD,#05H;定时器T0初始化(计数)
SETBTR0;启动T0
MAIN:
MOVA,TL0
CALLBCD;数据BCD转换
CALLDISP;数码管显示
JMPMAIN
;*******************************************
;发送子程序
;*******************************************
SEND:
MOVBIT_COUNT,#8
CLRCS
CALLLONG_DELAY
SEND_LOOP:
MOVC,DATA_OUT.7
MOVDAT,C
SETBCLK
MOVA,DATA_OUT
RLA
MOVDATA_OUT,A
CALLSHORT_DELAY
CLRCLK
CALLSHORT_DELAY
DJNZBIT_COUNT,SEND_LOOP
CLRDAT
RET
;*******************************************
;接收子程序
;*******************************************
RECEIVE:
MOVBIT_COUNT,#8
SETBDAT
CALLLONG_DELAY
RECEIVE_LOOP:
SETBCLK
CALLSHORT_DELAY
MOVA,DATA_IN
RLA
MOVDATA_IN,A
MOVC,DAT
MOVDATA_IN.0,C
CLRCLK
CALLSHORT_DELAY
DJNZBIT_COUNT,RECEIVE_LOOP
CLRDAT
RET
;*******************************************
;BCD码调整子程序
;*******************************************
BCD:
;BCD码调整子程序
MOVB,#64H
DIVAB
MOVBAI,A;保存百位
MOVA,B
MOVB,#0AH
DIVAB
MOVSHI,A;保存十位
MOVGEWEI,B;保存个位
RET
;*******************************************
;显示子程序
;*******************************************
DISP:
CLRCS;显示子程序
MOVDATA_OUT,#10000010B
CALLSEND
MOVDATA_OUT,BAI
CALLSEND
MOVDATA_OUT,#10000001B
CALLSEND
MOVDATA_OUT,SHI
CALLSEND
MOVDATA_OUT,#10000000B
CALLSEND
MOVDATA_OUT,GEWEI
CALLSEND
SETBCS
RET
;*******************************************
;长延时子程序
;*******************************************
LONG_DELAY:
MOVTIMER,#80
DELAY_LOOP:
DJNZTIMER,DELAY_LOOP
RET
;*******************************************
;短延时子程序
;*******************************************
SHORT_DELAY:
MOVTIMER,#6
SHORT_LP:
DJNZTIMER,SHORT_LP
RET
;*******************************************
;启动延时子程序
;*******************************************
START_DELAY:
MOVTIMER1,#255
START_DELAY1:
DJNZTIMER1,START_DELAY1
DJNZTIMER,START_DELAY
RET
END
(2)0-50000计数显示:
ORG0000H
SJMPSTART
ORG0030H
START:
MOVDPTR,#0CFE9H//擦出数据
MOVA,#0D1H
MOVX@DPTR,A
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOVTL1,#0FFH//赋初始值及工作方式
MOVTH1,#0FFH
MOVTMOD,#50H
SETBTR1
LOOP:
MOVR0,TL1
MOVR1,TH1
LJMPHEXTOBCD//16进制转10进制字程序
CAOZUO:
MOVA,R4//把万千百十个位分别存入R4R3R2R1R0。
MOVB,#16
DIVAB
MOVR1,A
MOVR0,B
MOVA,R2
MOVR4,A
MOVA,R3
MOVB,#16
DIVAB
MOVR3,A
MOVR2,B
IGHTA:
MOVDPTR,#0CFE9H//选择数码管第一个灯并显示出万位
MOVA,#80H
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,R4
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
CLRA
LIGHTB:
MOVDPTR,#0CFE9H//选择数码管第二个灯并显示出千位
MOVA,#81H
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,R3
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
CLRA
LIGHTC:
MOVDPTR,#0CFE9H//选择数码管第三个灯并显示出百位
MOVA,#82H
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,R2
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
CLRA
LIGHTD:
MOVDPTR,#0CFE9H//选择数码管第四个灯并显示出十位
MOVA,#83H
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,R1
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
CLRA
LIGHTE:
MOVDPTR,#0CFE9H//选择数码管第五个灯并显示出个位
MOVA,#84H
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,R0
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
CLRA
LJMPLOOP
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
HEXTOBCD:
CLRA//清零
MOVR2,A
MOVR3,A
MOVR4,A
MOVR5,#16//共转换十六位数
ZH:
CLRC
MOVA,R0//从待转换数的高端移出一位到Cy
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
MOVA,R4//送到BCD码的低端
ADDCA,R4//带进位加。
自身相加,相当于左移一位
DAA//十进制调整,变成BCD码
MOVR4,A
MOVA,R3
ADDCA,R3
DAA
MOVR3,A
MOVA,R2
ADDCA,R2
MOVR2,A
DJNZR5,ZH//共转换十六位数
LJMPCAOZUO//已经把TH1TL1中的数字,转换成BCD码,送到了R2R3R4
(3)出租车计费系统:
ORG0000H
lJMPSTART
ORG0060H
START:
MOV60H,#00H;给准备使用的寄存地址赋初值
MOV61H,#00H
MOV62H,#00H
MOV70H,#00H
MOV71H,#00H
MOV72H,#00H
MOVTMOD,#60H;选择定时器/计数器使用方式为方式2
MOVTH1,#0FFH;给T1引脚特殊功能寄存器赋初值
MOVTL1,#0FFH
SETBTR1;启动定时器/计数器
L1:
JNBTF1,L2;判定TF1是否为0
CLRTF1;清零TF1
LCALLKM;调用里程
LCALLPRICE;调用价格
L2:
LCALLDISPLAY;调用显示
SJMPL1
KM:
MOVA,60H;分别把不同地址中的数据传送到A累加器中
ADDA,#01H;每一次脉冲使60H中数据加一
MOV60H,A
CJNEA,#0AH,BTOM;对60H中数据进行与10对比
MOV60H,#00H;给60H清零
INC61H;给61H加一
MOVA,61H;再把61H完成60H的同一操作
CJNEA,#0AH,BTOM
MOV61H,#00H
INC62H
MOVA,62H
CJNEA,#0AH,BTOM
MOV62H,#00H
BTOM:
RET
PRICE:
MOVA,62H;分别把不同地址中的数据传送到A累加器中
CJNEA,#00H,SUB111;对62H中数据进行与00对比
MOVA,61H
CJNEA,#04H,SUB1;对61H中数据进行与04对比
SJMPFIVEY;跳转到FIVEY
SUB111:
MOVA,61H
CJNEA,#00H,SUB1;对61H中数据进行与00对比
SJMPSUB11;跳转到SUBB11
SUB1:
JCFIVEY;比较C位是否为0
MOVA,60H
CJNEA,#00H,BTOM2;比较60H是否为00
SJMPSUB11
SUB11:
MOVA,70H;给70H单元加05H的起始价格显示
ADDA,#05H
MOV70H,A
CJNEA,#0AH,SUB2;比较70H单元中数据是否为10SJMPSUB3
SUB2:
JCBTOM2
SUB3:
SUBBA,#0AH;进行70H,71H,72H中数据与里程类似的进位选择
MOV70H,A
INC71H
MOVA,71H
CJNEA,#0AH,BTOM2
MOV71H,#00H
INC72H
MOVA,72H
CJNEA,#0AH,BTOM2
MOV72H,#00H
SJMPBTOM2
FIVEY:
MOV71H,#05H
BTOM2:
RET
DISPLAY:
MOVR0,#72H
MOVR3,#00H
MOVR1,#62H
MOVR5,#80H
MOVR6,#03H
MOVDPTR,#TAB
LOOP1:
MOVDPTR,#0CFE9H;进行里程最高位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,@R1
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
INCR5
DECR1
LOOP2:
MOVDPTR,#0CFE9H;进行里程第二位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TABTWO
MOVA,@R1
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
INCR5
DECR1
LOOP3:
MOVDPTR,#0CFE9H;进行里程第三位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,@R1
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
INCR5
MOVDPTR,#0CFE9H;进行价格第一位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
INCR5
DECR0
MOVDPTR,#0CFE9H;进行价格第二位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TABTWO
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
INCR5
DECR0
MOVDPTR,#0CFE9H;进行价格第三位数据的显示
MOVA,R5
MOVX@DPTR,A
MOVDPTR,#TAB
MOVA,@R0
MOVCA,@A+DPTR
MOVDPTR,#0CFE8H
MOVX@DPTR,A
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
TABTWO:
DB0BFH,86H,0DH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
4、心得体会:
单片机是一门实践性很强的学科,只学习理论知识,不进行实验是不可能学好单片机这门课程的。
在没有学习单片机这门课程时,就听说过单片机这门课很有用,一直很想好好学习这门课。
从一开始,就不断暗示自己要好好学习这门课。
在学习过程中,渐渐地发现单片机课程更侧重于实验,讲求从实验中掌握知识。
在单片机的学习过程中,特别是实验和课程设计中,学到了许多课本之外的东西。
这次课程设计任务有两个:
一个是255计数的实现;另外一个是出租车计费系统的设计。
在接到这个课程设计任务时,有些茫然和不知所措,曾经几度不知如何动笔。
利用汇编语言,对于一些简单的设计还可以游刃有余,但是这次的课程设计,对于我来说确实难度很大。
曾经一度想放弃,但是后来还是坚持把这个课程设计完成了。
经过我和同组同学的共同努力,通过讨论,查阅资料,分工合作,最终完成了流程图和程序。
接着通过查阅资料并分析,画出了两个设计的硬件仿真图。
虽然,按照实验要求把图画了出来,但是有的时候加载程序以后却不能正常运行,改了好多次都没有成功。
同学们电脑上软件的版本
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 湖南 工业大学 单片机 课程设计