1、湖工单片机课程设计湖南工业大学课 程 设 计资 料 袋 电气与信息工程 学院(系、部) 2012 - 2013 学年第 1 学期 课程名称 单片机应用系统 指导教师 职称 学生姓名 专业班级 学号 题 目 对255计数及出租车计费系统的设计 成 绩 起止日期 2012 年 12 月 21 日 2013 年 1 月 3 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书2课程设计说明书3课程设计图纸张456 湖南工业大学课程设计任务书2011 2012 学年第 1 学期 电气与信息工程 学院(系、部) 电气工程及自动化 专业 1009 班级课程名称: 单片机应用系统 设计题目: 对
2、255计数及出租车计费系统的设计 完成期限:自 2012 年 12 月 21 日至 2013 年 1 月 3 日共 2 周内容及任务11 外部脉冲自动计数,自动显示。111设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。12 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)进度安排起止日期工作内容201212.21讲述设计内容及基本原理201212.22-2012.12.27进行系统的设计201212.28-20
3、13.1.3进行系统的调试主要参考资料1 刘苗生、潘宗预. 单片机测控系统设计. 中国物质出版社,2006年2王爽 汇编语言 清华大学出版社, 2009年3 郭天祥 新概念51单片机教程 电子工业出版社 ,2009年指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日(单片机应用系统)设计说明书(题目)对外部脉冲计数及出租车计费系统的设计起止日期: 2012 年 12 月 21 日 至 2013年 1 月 3日学生姓名 班级 学号 成绩指导教师(签字)电气与信息工程学院(部)2013年 1 月 3 日一、设计任务:11 外部脉冲自动计数,自动显示。111设计一个255计数器:0
4、255计数,计满后自动清0,重新计数(在数码管中显示)。112设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。12 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)注:要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。二、设计原理及思路1. 设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。原理:255可用8位二
5、进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。然后对TL1的内容进行相应的二进制-十进制转换:首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在LED数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。2设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。原理: 将TH1和TL1中的十六进制数转为BCD码,;入口:HT1,TL1中是 16 位二进制数,其中TH1中是高 8 位;;出口:R2 R3
6、R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4中是十、个位。再转为对应的个.十.百.千.万位。送到缓冲区。接着调用显示子程序。3.设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8为数码管中,前3为显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)原理:计数器每计数100个外部脉冲就产生中断,里程加1百米,大于两千米百位就和5和0比较,如果相等就调用价格计算子程序,价格加0.8元。然后返回中断,调用里程和价格显示子程序。三、PROTEUS硬件电路图1.255计数器2.50000计数器3. 出租车
7、计费系统 四、调试程序1.255计数器ORG 0000HAJMP STARTORG 001BHAJMP TINT1ORG 0030HSTART: MOV TMOD,#60H ;计数工作方式2 MOV TH1,#00H ;初值0 MOV TL1,#00H SETB TR1 SETB ET1 SETB EALOOP: LCALL DISP SJMP LOOPTINT1: RETIDISP: MOV A,TL1 MOV B,#64H DIV AB ;A为百位 MOV DPTR,#SEGTABMOVC A,A+DPTR MOV P2,#03H ;位选4 MOV P0,A ;送百位数据 ACALL DE
8、LAYMOV A,BMOV B,#0AH DIV AB ;A为十位,B为个位 MOVC A,A+DPTR MOV P2,#04H ;位选5 MOV P0,A ;送十位数据 ACALL DELAY MOV A,B MOVC A,A+DPTR MOV P2,#05H ;位选6 MOV P0,A ;送个位数据 ACALL DELAY RETDELAY: MOV R5,#05H ;延时1msLOOP1: MOV R6,#0FFH DJNZ R6,$ DJNZ R5,LOOP1 RETSEGTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 DB 6DH,7DH,07H,7FH
9、,6FH ;5,6,7,8,9END2.50000计数器ORG 0000HAJMP STARTORG 0030HWANWEI EQU 20HQIANWEI EQU 21HBAIWEI EQU 22HSHIWEI EQU 23HGEWEI EQU 24HSTART: MOV R0, #20H ;显示缓冲数据 MOV R1, #01H ;位选缓冲 MOV TMOD,#50H ;计数工作方式1 MOV TH1, #00H ;初值0 MOV TL1, #00H SETB TR1 SETB ET1 SETB EALOOP: LCALL DISP SJMP LOOPDISP: LCALL READDISP
10、1: MOV P2, R1 MOV P0, R0 LCALL DELAY INC R0 INC R1 CJNE R1,#06H,DISP MOV R1, #01H MOV R0, #20H SJMP DISP1READ: MOV R5, TH1 MOV R6, TL1 CJNE R5, #0C3H,READ1 CJNE R6, #51H,READ1 MOV TH1,#00H ;初值0 MOV TL1,#00H;-;调用子程序把R5 R6中的数字,转换成BCD码,送到R2 R3 R4READ1:LCALL TXBCD MOV A, R4 MOV B, #16 DIV AB ;除以16,目的是分离
11、出高、低四位 MOV DPTR,#SEGTAB MOVC A, A+DPTR MOV SHIWEI, A ;存放十位 MOV A,B MOVC A,A+DPTR MOV GEWEI, A ;存放个位 MOV A, R2 MOVC A,A+DPTR MOV WANWEI, A ;存放万位 MOV A, R3 MOV B, #16 DIV AB MOVC A,A+DPTR MOV QIANWEI, A MOV A,B MOVC A,A+DPTR MOV BAIWEI, A RET;-;两个字节的二进制数转换成BCD码的程序如下:;功能:16位二进制数变换成为 BCD 码;;入口:R5 R6 中是
12、16 位二进制数,其中R5中是高 8 位;;出口:R2 R3 R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4中是十、个位。TXBCD:CLR A MOV R2, A ;先清零 MOV R3, A MOV R4, A MOV R7, #16 ;共转换十六位数READ2: CLR C MOV A, R6 ;从待转换数的高端移出一位到Cy RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A MOV A, R4 ;送到BCD码的低端 ADDC A, R4 ;带进位加。自身相加,相当于左移一位 DA A ;十进制调整,变成BCD码 MOV R4, A M
13、OV A, R3 ADDC A, R3 DA A MOV R3, A MOV A, R2 ADDC A, R2 MOV R2, A DJNZ R7,READ2 ;共转换十六位数 RETDELAY: MOV R5,#05H ;延时1msLOOP2: MOV R6,#0FFH DJNZ R6,$ DJNZ R5,LOOP2 RETSEGTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9END3. 出租车计费系统 ORG 0000HAJMP STARTORG 001BHSJMP T1INTORG 0030H
14、SHIQIAN EQU 20HQIANMI EQU 21HBAIMI EQU 22HSHIYUAN EQU 24HYUAN EQU 25HJIAO EQU 26H;-;程序初始化START: CLR P2.3 MOV R3,#02H MOV SHIQIAN,#00H MOV QIANMI ,#00H MOV BAIMI,#00H MOV SHIYUAN,#00H MOV YUAN,#05H MOV JIAO,#00H MOV TMOD, #60H MOV TH1,#9CH MOV TL1,#9CH SETB TR1 SETB ET1 SETB EA;-;主程序MAIN: LCALL DISPM
15、 LCALL DISPL SJMP MAIN;-;中断处理程序T1INT: LCALL LONG MOV A,QIANMI CLR C SUBB A,#02H JNC T1 ;大于两千米转到T1 RETIT1: DJNZ R3,T2 MOV R3,#01H MOV A,BAIMI CJNE A,#05H,NEXT ;和5相等,就更新价格,否则判断是否和0相等 LCALL MONEY RETINEXT: CJNE A,#00H,T2 ;和0相等,更新价格,否则返回 LCALL MONEYT2: RETI;-; 显示里程DISPL: MOV R0, #20H MOV A,R0 MOV DPTR,#
16、SEGTAB MOVC A,A+DPTR MOV P2,#09H ;位选 MOV P0, A ;段选 LCALL DELAY INC R0 MOV A,R0 MOVC A,A+DPTR ADD A,#80H ;显示小数点 MOV P2,#0AH ;位选 MOV P0,A ;段选 LCALL DELAY INC R0 MOV A,R0 MOVC A,A+DPTR MOV P2,#0BH ;位选 MOV P0,A ;段选 LCALL DELAY RET;-;显示价格DISPM: MOV R0, #24H MOV A, R0 MOV DPTR,#SEGTAB MOVC A,A+DPTR MOV P2
17、,#0DH MOV P0,A ;显示十元 LCALL DELAY INC R0 MOV A,R0 MOVC A,A+DPTR ADD A,#80H MOV P2,#0EH MOV P0,A ;显示元 LCALL DELAY INC R0 MOV A,R0 MOVC A,A+DPTR MOV P2,#0FH ;显示角 MOV P0,A LCALL DELAY RET;-;价格计算子程序MONEY: MOV R6,28H ; MOV A,R6 MOV DPTR,#NUM MOVC A,A+DPTR MOV JIAO,A INC R6 MOV 28H,R6 CJNE R6,#05H,M1 MOV 2
18、8H,#00HM1: CJNE A,#08H,M2 ;等于8没有进位 SJMP M4M2: MOV A,YUAN CJNE A,#09H,M3 ;等于9,进位 INC SHIYUAN MOV YUAN,#00H SJMP M4M3: INC YUANM4: RETNUM: DB 08H,06H,04H,02H,00H;-;里程计算子程序LONG: MOV A,BAIMI CJNE A,#09H,L1 ;和9相等就置0,不等就跳到L1 MOV BAIMI, #00H INC QIANMI MOV A,QIANMI ;千米加1 CJNE A,#0AH,L2 ;等于10就置0,不等跳到L2 MOV
19、QIANMI,#00H INC SHIQIANL1: INC BAIMI ;百米加1L2: RET;-;延时子程序DELAY: MOV R5,#05H ;延时2.5msLOOP1: MOV R6,#0FFH DJNZ R6,$ DJNZ R5,LOOP1 RETSEGTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9END五、心得体会作为一名电气工程及自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专
20、业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 开始的第一天就自己做的是0到255的计数器,我们上课是只上到定时器那一章节,对于后面的数码管显示没有讲到,但是这次却要用到数码管显示数据,所以开始知识知道要用到定时器,在TH、TL里面放个初值,然后启动定时/计数器就可以开始计数了,然后到了255个后又重新开始,但是怎么把所记的脉冲数显示出来却不懂。专门把书好好看了遍,数码管显示知道是怎么回事后就可以开始了。 完成这次的单片机课程设计花费将近一周时间,但是却从理论到实践,学到了很多的东西。同时不仅巩固
21、了以前所学过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。只有这样我们才能真正的学会单片机,才能越学越
22、会。自己的独立处理问题的能力才会得到提高。还有无论编程中遇到什么问题,都不要怨天尤人。无论自己的程序有多好,都不能骄傲。只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。 这次的单片机课程设计遇到的最多的问题就是在程序的编写上,尤其是0到5000计数时,在那里卡了好久,一直就是TL和TH两个寄存器里的数据取不出来,自然就无法送到数码管显示,因为两个寄存器里的数据加一起有十六位,我们所用的单片机是8位机,最大只能赋值256,超过256就会发生错误,为此试过好多种方法,但是都不行,最后用的BCD转换才解决得。 回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:遇到一个问题时,最重要的
23、一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。只有这样我们才能真正的学会单片机,才能越学越会。自己的独立处理问题的能力才会得到提高。还有无论编程中遇到什么问题,都不要怨天尤人。无论自己的程序有多好,都不能骄傲。只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。 在这短短的几天时间里,把之前学习的单片机只是都复习了一边,比之前有了一个更加清晰地理解,实践出真知这话真的一点不假,动过动手实践掌握的东西远比单纯课堂上听来的要深刻、要清晰。通过这次的课程设计,我发现了遇到问题首先应该想的是如何自己解决,实在是想不到时候再通过自己去网上找资料,也可以在同学之间探讨,这样得来的远比直接问老师,听老师是如何解答的来得要深刻,要掌握的更扎实,在下次遇到类似问题的时候就可以有个清晰的解决问题的思路,以及此类问题是因何产生的也会有个比较清晰地认识。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1