1、进入multisim软件。
2、在软件中打开电路图。
3、敏早点击输出选项,选择输出为程序即可。
S_SET BIT P1.0 数蚂备竖字钟秒控制位M_SET BIT P1.1 分钟控制位
H_SET BIT P1.2 小时控制位
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
TCNT EQU 34H
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
START: MOV DPTR,#TABLE
MOV HOUR,#0 初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256 定时50毫秒
MOV TL0,#(65536-50000)MOD 256
MOV IE,#82H
SETB TR0
****************************************************
判断是否有控制键按下,是哪一个键按下
A1: LCALL DISPLAY
JNB S_SET,S1
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S1: LCALL DELAY 去抖动
JB S_SET,A1
INC SECOND 秒值加1
MOV A,SECOND
CJNE A,#60,J0 判断是否加滚滑到60秒
MOV SECOND,#0
LJMP K1
S2: LCALL DELAY
JB M_SET,A1
K1: INC MINUTE 分钟值加1
MOV A,MINUTE
CJNE A,#60,J1 判断是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1
K2: INC HOUR 小时值加1
MOV A,HOUR
CJNE A,#24,J2 判断是否加到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
****************************************************
等待按键抬起
J0: JB S_SET,A1
LCALL DISPLAY
SJMP J0
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
***********************************************
定时器中断服务程序,对秒,分钟和小时的计数闷大
INT_T0: MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
INC TCNT
MOV A,TCNT
CJNE A,#20,RETUNE 计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
******************************************
显示控制子程序
DISPLAY:MOV A,SECOND 显示秒
MOV B,#10
DIV AB
CLR P3.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.6
MOV A,B
CLR P3.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.7
CLR P3.5
MOV P0,#40H 显示分隔符
LCALL DELAY
SETB P3.5
MOV A,MINUTE 显示分钟
MOV B,#10
DIV AB
CLR P3.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.3
MOV A,B
CLR P3.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.4
CLR P3.2
MOV P0,#40H 显示分隔符
LCALL DELAY
SETB P3.2
MOV A,HOUR 显示小时
MOV B,#10
DIV AB
CLR P3.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.0
MOV A,B
CLR P3.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P3.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
请设计一个2位静态数码肆埋管从00到59显示的悄雹激程序#include <reg51.h>启袜
unsigned char show[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
int n, j
qc()interrupt 1 using 3
{TH0=(65336-10000)/256
TL0=(65336-10000)%256
n++
if (n>=100)
{n=0
j++
if (j>=60)
j=0
}
}
main ()
{int gw,sw
ET0=1
EA =1
TMOD =0x01
TH0=(65536-10000)/256
TL0=(65336-10000)%256
TR0=1
while (1)
{gw =j/10
sw =j%10
P0=show[gw]
P1=show[sw]
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)