单片机课程设计湖南工业大学_第1页
单片机课程设计湖南工业大学_第2页
单片机课程设计湖南工业大学_第3页
单片机课程设计湖南工业大学_第4页
单片机课程设计湖南工业大学_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及其应用课程设计(报告) 单片机课程设计报告课题名称:单片机原理与应用课程设计学院(部):电气与信息工程学院专 业:电子信息工程 班 级:电信1203班 学生姓名: 学 号: 指导老师: 贺正芸目 录一设计任务与要求1. 主要任务及目标2. 单片机最小系统硬件资源介绍二总体设计方案1. 设计思路2. 芯片功能介绍3. 255计数器程序流程图45000计数程序流程图.5出租车计费系统程序流程图三程序的设计1. 255计数器程序设计2.50000计数程序设计2. 出租车计费程序设计四 硬件仿真图1. 255计数器硬件仿真2.50000计数器硬件仿真2. 出租车计费系统硬件仿真五设计体会一

2、设计任务与要求1. 主要任务及目标11 外部脉冲自动计数,自动显示。111设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。112设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。12 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前4位显示数码管显示里程数,后4位数码管显示价钱(角,元,十元,百元)2、单片机最小系统硬件资源介绍:二总体设计方案1. 设计思路 1、255计数:255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1

3、模式二进行计数。然后对TL1的内容进行相应的二进制-十进制转换:首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在LED数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。20-5000计数由于50000计数采用八位寄存器显然会一处,因此设计时数器T0采用工作方式1外部计数,16位寄存器技术范围到65536,符合50000计数的需要。然后通过数据转换,将计数器的值转换成为十进制数,通过数码管显示。2、出租车计费系统:本设计所设计的出租车数字计数器的主要功

4、能有:金额输出、路程输出、数据复位、计时计价等。输出采用2个4位8段共阳数码管,车辆行走时前4位显示路程,后4位显示金额。起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m,刷新计费一次。2. 芯片功能介绍AT89S51是一款低功耗、高性能CMOS8位微控制器,具有4K可编程 Flash存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。AT89S51具有以下标准功能:4K字节Flash, 256字节RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个6向量 2级中断结构,全

5、双工串行口,片内晶振及时钟电路。其引脚如图3-2所示,下面简要介绍其引脚功能:图 1 AT89S51引脚图VCC:电源。本设计中接电源正极。GND:地。本设计中接电源负极。P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写"1"时,引脚用作高阻抗输入。P1口:P1口是一个具有内部上拉电阻的8 位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对 P1 端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。P2口:P2口是一个

6、具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写"1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期

7、的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。EA/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。本设计中不需要外部程序存储器,因此需接高电平。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN

8、将不被激活。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。3. 255计数程序流程图开始初始化堆栈,定时器初始化清零相关RAM地址单元TF1=1?调用显示子程序脉冲数加1即20H加120H=100?21H加120清零计算出脉冲数的个,十,百位分别存放于30H,31H,32H(20H=54)&(21H=2?)脉冲数计到255后重新计数即20H,21H清零说明:1. 20H存放脉冲的个位和十位数值,21H存放脉冲的百位和千位数值。 2.计算脉冲数的个位和十位数值:(20H)/10的商即十位数值存放于31H,余数即个位数值存放于30H。 3.

9、计算脉冲数的百位数值:(20H)/10的余数即百位数值存放于32H。例如:脉冲数212(十进制),(20H)=12,(21H)=2。脉冲的个位数值(30H)=2, 脉冲的十位数值(31H)=1, 脉冲的百位数值(32H)=2. 图2 255计数程序流程图0-50000计数流程图开始初始化,T0初始化,设置延时TF1=1?调用显示子程序脉冲数加1计数是否大于50000计数清0计算出脉冲数的个,十,百位,千位万位(20H=54)&(21H=2?)脉冲数计到50000后从新计数4. 出租车计费程序流程图开始初始化堆栈,8279,定时器清零相关RAM地址单元TF1=1?调用显示子程序里程数加1

10、即24H加124H=500?25H加124清零计算里程数的个,十,百,千位数值分别存放于24H,25H,26H,27H(24H=99?)&(25H=99?)里程数计到500后重新计数即24H,25H清零说明:1.里程数存放于24H,25H中,其中24H存放脉冲的个位和十位数值,25H存放脉冲的百位和千位数值。 2.计算里程数的个位和十位数值:(24H)/10的商即十位数值存放于26H,余数即个位数值存放于27H。 3. 计算里程数的百位数值:(21H)/10的商即千位数值存放于33H,余数即百位数值存放于32H。例如:里程数6798(十进制),(24H)=98,(25H)=1。里程的个

11、位数值(30H)=8, 里程的十位数值(31H)=9,. 里程的百位数值(32H)=7,里程的千位数值(33H)=6计算价格(22H)-20/5商24H,余数23H(20H)=0?价格(25H)=商(24H)9+50价格(25H)= 商(24H)+19+50(23H)=0?价格的各位数值分别存放于20H,21H,22H,23H中(22H)-20<0?价格显示为5.0三设计程序1、255计数器程序编辑:ORG 0000H SJMP MAIN ORG 0030HMAIN: MOV TMOD,#50H ;定时器 T1初始化(T1计数模式) MOV 70H,#00H ;保存个位 MOV 71H,

12、#00H ;保存十位 MOV 72H,#00H ;保存百位 SETB TR1 ;启动T1LOOP: MOV A,TL1 ACALL BCD ;调用BCD码调整子程序 ACALL OUT ;调用显示子程序 SJMP LOOP RETLACLL BCD: ;BCD码调整子程序 MOV B,#64H DIV AB MOV 72H,A ;保存百位 MOV A,B MOV B,#0AH DIV AB MOV 71H,A ;保存十位 MOV 70H,B ;保存个位 RETLACLL OUT: ;显示子程序 MOV R1,#70H MOV R5,#00H MOV DPTR,#TABLOOP1: MOV A,

13、R5 MOV P2,A MOV A,R1 MOVC A,A+DPTR MOV P0,A ACALL DELAY INC R1 INC R5 CJNE R5,#03H,LOOP1 RET MOV DELAY,#15 ;延时15ms子程序 MOV R7,#31 L1: MOV R6,#240 W1: DJNZ R6,W1 DJNZ R7,L1 MOV R4,#11 J1: DJNZ R4,J1 NOP RET2.0-50000计数的程序编辑ORG 0000H SJMP START ORG 0030H START : MOV DPTR,#0CFE9H /擦出数据 MOV A,#0D1H MOVX D

14、PTR,A NOP NOP NOP NOP NOP NOP NOP NOP MOV TL1,#0FFH /赋初始值及工作方式 MOV TH1,#0FFH MOV TMOD,#50H SETB TR1LOOP:MOV R0, TL1 MOV R1, TH1 LJMP HEXTOBCD /16进制转10进制字程序CAOZUO:MOV A, R4 /把万千百十个位分别存入R4 R3 R2 R1 R0。 MOV B, #16 DIV AB MOV R1, A MOV R0, B MOV A, R2 MOV R4, A MOV A, R3 MOV B, #16 DIV AB MOV R3, A MOV

15、R2, B IGHTA:MOV DPTR,#0CFE9H /选择数码管第一个灯并显示出万位 MOV A,#80H MOVX DPTR,A MOV DPTR,#TAB MOV A,R4 MOVC A,A+DPTR MOV DPTR,#0CFE8H MOVX DPTR,A CLR ALIGHTB:MOV DPTR,#0CFE9H / 选择数码管第二个灯并显示出千位 MOV A,#81H MOVX DPTR,A MOV DPTR,#TAB MOV A,R3 MOVC A,A+DPTR MOV DPTR,#0CFE8H MOVX DPTR,A CLR ALIGHTC:MOV DPTR,#0CFE9H

16、/ 选择数码管第三个灯并显示出百位 MOV A,#82H MOVX DPTR,A MOV DPTR,#TAB MOV A,R2 MOVC A,A+DPTR MOV DPTR,#0CFE8H MOVX DPTR,A CLR A LIGHTD:MOV DPTR,#0CFE9H / 选择数码管第四个灯并显示出十位 MOV A,#83H MOVX DPTR,A MOV DPTR,#TAB MOV A,R1 MOVC A,A+DPTR MOV DPTR,#0CFE8H MOVX DPTR,A CLR A LIGHTE:MOV DPTR,#0CFE9H /选择数码管第五个灯并显示出个位 MOV A,#84

17、H MOVX DPTR,A MOV DPTR,#TAB MOV A,R0 MOVC A,A+DPTR MOV DPTR,#0CFE8H MOVX DPTR,A CLR A LJMP LOOP TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH HEXTOBCD: CLR A /清零 MOV R2, A MOV R3, A MOV R4, A MOV R5, #16 /共转换十六位数 ZH: CLR C MOV A, R0 /从待转换数的高端移出一位到Cy RLC A MOV R0, A MOV A, R1 RLC A MOV R1, A MOV A,

18、R4 / 送到BCD码的低端 ADDC A, R4 / 带进位加。自身相加,相当于左移一位 DA A /十进制调整,变成BCD码 MOV R4, A MOV A, R3 ADDC A, R3 DA A MOV R3, A MOV A, R2 ADDC A, R2 MOV R2, A DJNZ R5, ZH /共转换十六位数 LJMP CAOZUO /已经把TH1 TL1中的数字,转换成BCD码,送到了R2 R3 R43出租车计费系统程序:ORG 0000H ;汇编起始地址JMP MAIN ;无条件转移到主程序ORG 0030H ;主程序的存放地址MAIN: MOV 20H,#0H ;20H存放

19、价格的角位 MOV 21H,#0H ;21H存放价格的元位 MOV 22H,#0 ;22H存放价格的十元位MOV 23H,#0 ;23H存放价格的百元位MOV 24H,#0 ;24H存放里程的个位 MOV 25H,#0 ;25H存放里程的十位MOV 26H,#0 ;26H存放里程的百位 MOV 27H,#0 ;27H存放里程的千位 MOV 28H,#0 ;20个脉冲的存储单元 LCALL INIT8279 ;调用初始化程序8279MOV TMOD,#05H ;设置T0计数模式1MOV TH0,#0FFH;MOV TL0,#0FFH ;设置计数初值SETB TR0 ;启动计数器M1: LCALL

20、 DISPLAY ;调用显示JBC TF0,M2 ;有溢出则跳转且TF0=0SJMP M1 ;等待溢出M2: LCALL TTT ;调用脉冲子程序LCALL JIFEI;LCALL DISPLAY ;调用显示子程序LCALL DELAY ;调用延时子程序RENEW:MOV TMOD,#05H ;设置T0计数模式1MOV TH0,#0FFHMOV TL0,#0FFH ;设置计数初值SETB TR0 ;启动计数器SJMP M1TTT: INC 28H ;脉冲数加1 INC 24H ;里程个位加1 MOV A,24H;CJNE A,#10,RETU ;里程个位不为10则转RETUMOV 24H,#0

21、0H ;里程个位为10则清0INC 25H;里程十位加1MOV A,25HCJNE A,#10,RETU;里程十位不为10则转RETUMOV 25H,#00H ;里程十位为十则清0INC 26H;里程百位加1MOV A,26HCJNE A,#10,RETU;里程百位不为10则转RETUMOV 26H,#00H;里程百位为十则清0INC 27H;里程千位加1MOV A,27HCJNE A,#10,RETU;里程千位不为10则转RETUMOV 27H,#00H;里程千位为十则清0LJMP RETURETU:NOP;空操作RET ;返回JIFEI:MOV A,28H;将脉冲数送ACLR C;将进位清

22、0CJNE A,#20,NEXT0;脉冲数不为0则转RETNEXT0:JNC NEXT;CY=0无进位则转NEXTRETNEXT:MOV A,28HMOV B,#5DIV AB;将脉冲数除5MOV 29H,B;余数送BMOV A,29H;商送AJZ NEXT1;商为0则转RETNEXT1:MOV A,20HCJNE A,#0,NEXT4;角不为0转ADD A,#8 ;将角加8角MOV 20H,A;将角送20H RETNEXT4:MOV 20H,AADD A,#8;将角加8角SUBB A,#10;将角减去10角得角MOV 20H,A;将角送20HINC 21H;元位加1MOV A,21HCJNE

23、 A,#10,RETU;元不为10转MOV 21H,#00H;等于十则清0INC 22H;百位加1MOV A,22HCJNE A,#10,RETU;十元位不为10则转MOV 22H,#00H;十元位为10 则清0INC 23H;百元位加1MOV A,23HRETDISLED : ;:显示程序1PUSH DPH ;将高位入栈PUSH DPL ;将低位入栈PUSH ACC ;将累加器入栈MOV A,#LEDWRD ;送第一个数码管地址ADD A,R4 ; 加上偏移量MOV DPTR,#Z8279 ;送控制命令字MOVX DPTR,AMOV DPTR,#LEDSEG ;送7段显示管地址MOV A,R

24、5MOVC A,A+DPTR ;查表MOV DPTR,#D8279MOVX DPTR,APOP ACC ;将累加器出栈POP DPL ;将低位出栈POP DPH将高位出栈RETDISLED1:PUSH DPH ;将高位入栈PUSH DPL ;将低位入栈PUSH ACC ;将累加器入栈MOV A,#LEDWRD ;送第一个数码管地址ADD A,R4MOV DPTR,#Z8279 ;送控制命令字MOVX DPTR,AMOV DPTR,#LEDSEG1 ;送7段显示管地址MOV A,R5MOVC A,A+DPTR ;查表MOV DPTR,#D8279MOVX DPTR,APOP ACC ;将累加器出栈POP DPL ;将低位出栈POP DPH ;将高位出栈 RETDELAY : ;延时子程序 MOV R7,#1DEL1: MOV R2,#1 DJNZ R2,$ DJNZ R7,DEL1 RETLEDSEG: ;LED显示段选码(不带点显示) DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHLEDSEG1: ;LED显示段选码(带点显示)DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH END四、硬件仿真图1、25

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论