别想着人家免费拱手送给你,至少给出点诚意嘛……比如RMB10000元,毕竟现在物价很贵啊!
你学习板的图呢?我怎么知道用哪些IO口!怎么知道你数码管用什么驱动啊!不然怎么写
设计一个秒表,需要考虑以下因素:
1、因为视觉暂留的因素,一般而言到0.1秒的精度就可以了。
2、需要有按键控制启动、停止、清零这些功能。
KEYVAL EQU 30H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
SEC1 EQU 79H
SEC2 EQU 7AH
DOT BIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR ;50ms定时
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2 ;启动
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3 ;暂停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP ;清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB: DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H
DB 0EEH ;"A" 0AH
DB 3EH ;"B" 0BH
DB 9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH
DB 00H ;" " 10H
END
本设计以AT89S51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
汇编如下:
S_SET BIT P3.4 ;秒增加1按钮位
M_SET BIT P3.5 ;分增加1按钮位
H_SET BIT P3.7 ;小时增加1按钮位
SECOND EQU 30H ;秒计数值变量
MINUTE EQU 31H ;分计数值变量
HOUR EQU 32H ;小时计数值变量
TCNT EQU 34H ; 1秒定时计数器
ORG 00H ;起始地址
JMP START
ORG 0BH ;Timer0中断向量地址
JMP INT_T0
START:
MOV DPTR,#TABLE ;装七段数码管段码数据表TABLE
MOV HOUR,#0 ;计数值全部清0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H ;Timer 0作定时器,模式1
MOV TH0,#(65536-50000)/256 ;定时50毫秒
MOV TL0,#(65536-50000)MOD 256
MOV IE,#82H ;中断使能
SETB TR0 ;启动Timer 0
;以下是判断秒、分、小时增加1按钮是否被按下
A1:
CALL DISPLAY
JNB S_SET,S1 ;判断秒按钮
JNB M_SET,S2 ;判断分按钮
JNB H_SET,S3 ;判断小时按钮
JMP A1 ;循环检测
S1:
CALL DELAY ;去抖动
JB S_SET,A1
INC SECOND ;秒位计数值加1
MOV A,SECOND ;A=SECOND
CJNE A,#60,J0 ;判断是否到60秒
MOV SECOND,#0 ;如果到了就清0秒位计数值
JMP K1 ;跳到K1段
S2:
CALL DELAY
JB M_SET,A1
K1:
INC MINUTE ;分位计数值加1
MOV A,MINUTE ;A=MINUTE
CJNE A,#60,J1 ;判断是否到60分
MOV MINUTE,#0 ;如果到了就清0分位计数值
JMP K2
S3:
CALL DELAY
JB H_SET,A1
K2:
INC HOUR ;小时计数值加1
MOV A,HOUR ;A=HOUR
CJNE A,#24,J2 ;判断是否到24小时
MOV HOUR,#0 ;如果到了就清0秒、分、小时位计数值
MOV MINUTE,#0
MOV SECOND,#0
JMP A1
;以下程序等待秒、分、小时按钮放开
J0:
JB S_SET,A1
CALL DISPLAY
JMP J0
J1:
JB M_SET,A1
CALL DISPLAY
JMP J1
J2:
JB H_SET,A1
CALL DISPLAY
JMP J2
;Timer0中断服务子程序, 进行秒、分、小时的计时
INT_T0:
MOV TH0,#(65536-50000)/256 ;装计数初始值
MOV TL0,#(65536-50000)MOD 256
INC TCNT ;1秒计数器增加1
MOV A,TCNT ;A=TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND ;秒计数器增加1
MOV TCNT,#0 ;清零TCNT
MOV A,SECOND ;A=SECOND
CJNE A,#60,RETUNE ;计时60秒
INC MINUTE ;分计数器增加1
MOV SECOND,#0 ;清零秒
MOV A,MINUTE ;A=MINUTE
CJNE A,#60,RETUNE ;计时60分
INC HOUR ;小时计数器增加1
MOV MINUTE,#0 ;清零分
MOV A,HOUR ;A=HOUR
CJNE A,#24,RETUNE ;计时24小时
MOV HOUR,#0 ;秒、分、小时计数值清0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE:
RETI ; 中断服务子程序结束
;以下为七段数码管显示的子程序
DISPLAY:
MOV A,SECOND ;A=SECOND,显示秒
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#00100000B ;使能秒的十位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
MOV A,B ;A=B
MOV P2,#00000000B ;使能秒的个位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
MOV A,MINUTE ;A=MINUTE,显示分
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#01100000B ;使能分的十位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
MOV A,B ;A=B
MOV P2,#01000000B ;使能分的个位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
MOV A,HOUR ;A=HOUR,显示小时
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#10100000B ;使能小时的十位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
MOV A,B ;A=B
MOV P2,#10000000B ;使能小时的个位
MOVC A,@A+DPTR ;七段数码管段码数据装入A
MOV P0,A ;从P0口输出
CALL DELAY
ORL P2,#0FFH ;熄灭七段数码管
RET
TABLE: ;七段数码管显示码表
DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,10H
DELAY: ;延时子程序
MOV R6,#2
D1:
MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
单片机课程设计电子手表的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:单片机课程设计电子手表