找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机“出租车计费器”proteus仿真 附原理图和汇编语言代码

查看数: 11621 | 评论数: 19 | 收藏 7
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-25 08:36

正文摘要:

这是我大二辅修计算机学院单片机的最终任务 上大学以来第一次独立完成这样的任务(大二下学期完成了这个任务)特别感谢我的伙伴Mr.关 @黑河豚 备注:代码共300多行,难以忘记那时候和黑河豚天天打代码,不过最终漂 ...

回复

ID:832704 发表于 2020-10-27 10:20
请问一下,你的代码是在哪个软件运行的呢
ID:697394 发表于 2020-7-17 10:24
唐吉坷德 发表于 2020-7-16 17:42
为什么有那个DispTable:        
      DB   3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ,0BFH, 8 ...

这是用于显示数字和带小数点的数字的表格,每一个数都代表着一个可以用于数码管显示的字符,如:“1,2,3,4等等”
可以了解一下数码管显示的原理
ID:785223 发表于 2020-7-16 17:42
为什么有那个DispTable:        
      DB   3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ,0BFH, 86H, 0DBH, 0CFH, 0E6H, 0EDH, 0FDH, 87H, 0FFH, 0EFH
ID:697394 发表于 2020-7-2 10:00
唐吉坷德 发表于 2020-7-1 12:08
$NOMOD51
$INCLUDE (8051.MCU)
具体指什么

这是创建proteus AT89C51工程自带的代码
8051.MCU定义了一些寄存器的名称,更方便使用
;   8051 processor definition file
;   ==============================

P0        DATA        080H
SP        DATA        081H
DPL        DATA        082H
DPH        DATA        083H
PCON        DATA        087H
TCON        DATA        088H
TMOD        DATA        089H
TL0        DATA        08AH
TL1        DATA        08BH
TH0        DATA        08CH
TH1        DATA        08DH
P1        DATA        090H
SCON        DATA        098H
SBUF        DATA        099H
P2        DATA        0A0H
IE        DATA        0A8H
P3        DATA        0B0H
IP        DATA        0B8H
PSW        DATA        0D0H
ACC        DATA        0E0H
B        DATA        0F0H

IT0        BIT        088H
IE0        BIT        089H
IT1        BIT        08AH
IE1        BIT        08BH
TR0        BIT        08CH
TF0        BIT        08DH
TR1        BIT        08EH
TF1        BIT        08FH
RI        BIT        098H
TI        BIT        099H
RB8        BIT        09AH
TB8        BIT        09BH
REN        BIT        09CH
SM2        BIT        09DH
SM1        BIT        09EH
SM0        BIT        09FH
EX0        BIT        0A8H
ET0        BIT        0A9H
EX1        BIT        0AAH
ET1        BIT        0ABH
ES        BIT        0ACH
EA        BIT        0AFH
RXD        BIT        0B0H
TXD        BIT        0B1H
INT0        BIT        0B2H
INT1        BIT        0B3H
T0        BIT        0B4H
T1        BIT        0B5H
WR        BIT        0B6H
RD        BIT        0B7H
PX0        BIT        0B8H
PT0        BIT        0B9H
PX1        BIT        0BAH
PT1        BIT        0BBH
PS        BIT        0BCH
P        BIT        0D0H
OV        BIT        0D2H
RS0        BIT        0D3H
RS1        BIT        0D4H
F0        BIT        0D5H
AC        BIT        0D6H
CY        BIT        0D7H

RESET        CODE        000H
EXTI0        CODE        003H
TIMER0        CODE        00BH
EXTI1        CODE        013H
TIMER1        CODE        01BH
SINT        CODE        023H
ID:795235 发表于 2020-7-1 23:20
你好,在一开始定义常数的时候轮胎周长1.83是0B7H,计费的起步价8是0320H,超出的费用2.6是1AH,它们变换的程度不同,在十六进制——BCD码——十进制的过程,小数点的位置是怎么控制到正确显示结果的呢?小白实在不懂,不知道有没有把问题问清楚,期待大神解答
ID:785223 发表于 2020-7-1 12:08
$NOMOD51
$INCLUDE (8051.MCU)
具体指什么
初学小白 望大神指导一下
ID:697394 发表于 2020-6-29 08:14
Jeff_BlindCat 发表于 2020-6-27 12:13
汇编菜鸟的菜鸟悄悄的来膜拜下,还是继续先把俺滴C鼓捣明白吧。

加油!
ID:697394 发表于 2020-6-28 14:46
1142892859 发表于 2020-6-26 15:01
里程超过10的时候费用溢出了吧

啊!跑了一下发现确实有这个bug,交项目的时候没发现,谢谢你提醒我这个bug!
ID:495287 发表于 2020-6-27 12:13
汇编菜鸟的菜鸟悄悄的来膜拜下,还是继续先把俺滴C鼓捣明白吧。
ID:631912 发表于 2020-6-26 15:01
里程超过10的时候费用溢出了吧
ID:697394 发表于 2020-6-20 16:07
Hibari 发表于 2020-6-15 19:32
那个波形器怎么找啊

运行过程中:
调试-VSM signal generator
即可
ID:697394 发表于 2020-6-20 15:58
Stranger-- 发表于 2020-6-12 12:36
你好,请问一下为什么Bin那里的R7设置为24吗

不好意思,这一段十六进制变为BCD码的代码是我师傅统一提供的,说来惭愧,具体原理我还不清楚
这是师傅的原始代码
;如果有需要,认真仿真此程序

cDisplayBuffer        EQU                30H                ;在显示的内容在30H-37H
cDisplayBit                EQU                38H                ;当前显示的位
cCount                        EQU                40H
               ORG           0000H
                LJMP        Main
               

Main:
                MOV                42H,#5BH        ;把此两内存改为其它值,分析44H,45H,46H的内容
                MOV                43H,#4AH

                MOV                R0,#42H                ;42H为高位字节,43H为低位字节
                MOV                R1,#44H               
                LCALL        BinDec                ;结果为6位BCD码,仔细分析 44H,45H,46H的内容
               
               
               
                SJMP                $
                


;---------------BinDec---------------------------
; 把双字节的十六进制数转换为BCD码
; 输入:  R0 - 十六进制数的高字节地址
;        R1 - 转换后BCD码的高位地址
BinDec:
                CLR             A
        MOV             @R1,A
                INC             R1
                MOV             @R1,A
                INC             R1
                MOV             @R1,A
                PUSH            7
                MOV             R7,#16
BD1:
                CLR             C
                INC             R0
                MOV             A,@R0
                RLC             A
                MOV             @R0,A
                DEC             R0
                MOV             A,@R0
                RLC             A
                MOV             @R0,A

                PUSH            1
                MOV             A,@R1
                ADDC            A,@R1
                DA              A
                MOV             @R1,A
                DEC             R1
                MOV             A,@R1
                ADDC            A,@R1
                DA              A
                MOV             @R1,A
                DEC             R1
                MOV             A,@R1
                ADDC            A,@R1
                DA              A
                MOV             @R1,A
                POP             1

                DJNZ            R7,BD1
                POP             7

                RET
;---------------BinDec---------------------------






                END
ID:779601 发表于 2020-6-15 19:32
那个波形器怎么找啊
ID:775953 发表于 2020-6-12 12:36
你好,请问一下为什么Bin那里的R7设置为24吗
ID:697394 发表于 2020-5-30 17:34
rofgmd 发表于 2020-5-29 15:31
你好,可以请想问一下存到内存那段程序的思路嘛,例如以下这段程序
nextMilage:
      MOV A,47H

里程思路:利用INT0号中断在中断进程中使得寄存器R3每中断一次加一,加满后向R4进位,然后乘以表示轮胎周长的常量Circumference,经过换算后就可以得到十进制的里程数,再将其转移到相应的显示内存中。
这段程序是将换算为10进制BCD码的里程(45H,46H,47H)通过除以#10来取十位,个位,并且存入相应的显示单元(34H,35H,36H,37H)
ID:763766 发表于 2020-5-29 15:31
你好,可以请想问一下存到内存那段程序的思路嘛,例如以下这段程序
nextMilage:
      MOV A,47H
      MOV B,#10H
      DIV AB
      MOV 37H,A
      MOV A,46H
      MOV B,#10H
      DIV AB
      MOV 36H,B
      ADD A,#10
      MOV 35H,A
      MOV A,45H
      MOV B,#10H
      DIV AB
      MOV 34H,B
      RET
ID:102963 发表于 2020-5-25 19:23
yunshuayun 发表于 2020-5-25 18:19
哈哈,这只是用波形测试这个系统正不正常,显示的速度只是来源于频率,不是实际出租车的速度

嗯 知道的 哈哈
ID:697394 发表于 2020-5-25 18:19
songxia8013 发表于 2020-5-25 15:32
这速度太快了,能跑到六七百公里每小时,这出租车是飞起来了吗?

哈哈,这只是用波形测试这个系统正不正常,显示的速度只是来源于频率,不是实际出租车的速度
ID:102963 发表于 2020-5-25 15:32
这速度太快了,能跑到六七百公里每小时,这出租车是飞起来了吗?

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表