2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > c语言负数显表 C语言编程问题请教高手-专业自动化论坛-中国工控网论坛

c语言负数显表 C语言编程问题请教高手-专业自动化论坛-中国工控网论坛

时间:2022-07-10 12:25:47

相关推荐

c语言负数显表 C语言编程问题请教高手-专业自动化论坛-中国工控网论坛

小弟编制一个程序功能是:利用定时器0和数显芯片做一个时,分,秒显示(6个数码管)

汇编程序已经编制出来了 可是用C语言却不能实现

汇编程序:

EN BIT P2.7

DOUT BIT P2.6

CLK BIT P2.5

DISPBUF EQU 20H

MSCNT EQU 30H

ORG 0000H

AJMP MAIN

ORG 000BH

LJMP TC0INT

ORG 0035H

;**************************************

;主程序

;**************************************

MAIN: MOV SP,#60H

MOV R7,#06H

MOV R0,#DISPBUF+1

LOOPCLR: MOV @R0,#00H

INC R0

DJNZ R7,LOOPCLR

MOV TMOD,#01H

MOV TH0,#0BH

MOV TL0,#0DCH

SETB EA

SETB ET0

SETB TR0

MOV MSCNT,#10H

LCALL SETXIAO

LCALL TSLED

SJMP $

;**************************************

;中断服务程序

;**************************************

TC0INT: PUSH PSW

PUSH ACC

CLR RS1

SETB RS0

MOV TH0,#0BH

MOV TL0,#0DCH

MOV A,MSCNT

DEC A

MOV MSCNT,A

JNZ GOTO_RET

MOV MSCNT,#10H

;秒的调整处理

MOV R0,#DISPBUF+2

LCALL DAADL

CJNE R2,#60H,TSLED_LOOP

LCALL CLR0

;分的调整处理

MOV R0,#DISPBUF+4

LCALL DAADL

CJNE R2,#60H,TSLED_LOOP

LCALL CLR0

;时的调整处理

MOV R0,#DISPBUF+6

LCALL DAADL

CJNE R2,#24H,TSLED_LOOP

LCALL CLR0

TSLED_LOOP: LCALL TSLED

GOTO_RET: POP ACC

POP PSW

RETI

;****************************************

;调整子程序

;****************************************

DAADL: ;合并

MOV A,@R0

SWAP A

DEC R0

ORL A,@R0

INC A

DA A

MOV R2,A

;拆分

ANL A,#0FH

MOV @R0,A

MOV A,R2

ANL A,#0F0H

SWAP A

INC R0

MOV @R0,A

RET

;*****************************************

;缓冲清0子程序

;*****************************************

CLR0: CLR A

MOV @R0,A

DEC R0

MOV @R0,A

RET

;*****************************************

;DTLED-6小数位、ID识别码、蜂鸣器设置子程序

;*****************************************

SETXIAO: MOV R0,#DISPBUF

MOV @R0,#00H

MOV R0,#DISPBUF+7

MOV @R0,#01H

MOV R0,#DISPBUF+8

MOV @R0,#00H

RET

;**************************************

;DTLED-6送数码管显示子程序

;**************************************

TSLED: CLR CLK

CLR EN

LCALL DELAY_200US

MOV R0,#DISPBUF

MOV R2,#00H

MOV R3,#00H

LEDBYTE_LOOP: MOV A,@R0

SWAP A

LEDBIT_LOOP: SETB CLK

RLC A

MOV DOUT,C

CLR CLK

LCALL DELAY_10US

INC R3

CJNE R3,#04H,LEDBIT_LOOP

MOV R3,#00H

INC R2

INC R0

CJNE R2,#09H,LEDBYTE_LOOP

SETB EN

RET

;**************************************

;200US延时子程序

;**************************************

DELAY_200US: MOV R4,#98

DJNZ R4,$

NOP

RET

;**************************************

;10US延时子程序

;**************************************

DELAY_10US: MOV R4,#3

DJNZ R4,$

NOP

RET

;***************************************

;程序结束

;***************************************

END

自己试编的C语言如下:请高手看看问题出在哪里?

#include "at89x52.h"

#include "stdio.h"

#include "intrins.h"

#define ucharunsigned char

#define uint unsigned int

#define nop _nop_();

sbit en=P2^7;

sbit dout=P2^6;

sbit clk=P2^5;

uchardispbuf【9】;

ucharclocktime【4】;

uint mscnt;

uint i;

void delay (unsigned int value)

{

while (value!=0)

value--;

}

void setxiao(void);

v

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。