单片机秒表程序

单片机秒表程序,第1张

以下程序使用定时器1计数,定时10ms,60H为妙计数单元,4FH单元为秒标示位,一秒时间到,置位4FH***********************************************************************************************************************ORG 0000H 程序从0地址开始

LJMP MAIN 跳到STRAT处执行

ORG 001BH

LJMP JIA1

ORG 0030H

MAIN:MOV TMOD,#01H 设置T1工作在模式1

MOV TH1,#068H 赋初值,定时10ms

MOV TL1,#0F0H

MOV IE,#88H 开CPU中断,开定时器1中断

SETB TR1 启动T1定时器工作

MOV 60H,#100给60H单元赋初值

CLR 4FH 清零4FH单元

DISPLAY: 显示子程序

MOV DPTR,#TAB DPTR指向编码表位置

MOV A,R3 将R3的内容复制到A

MOV B,#10

DIV AB A除B,商给A,余数给B

MOVC A,@A+DPTR 根据A的值取出编码表中的编码

MOV P1,A 由P1口输出A的内容

SETB P2.0 置位P2.0

CLR P2.0 清零P2.0

MOV A,B

MOVC A,@A+DPTR 根据A的值取出编码表中的编码

MOV P1,A 由P1口输出A的内容

SETB P2.1 置位P2.1

CLR P2.1 清零P2.1

JNB 4FH,DISPLAY 判断1秒时间是否到,没有到,则跳转到DIAPLAY处

CLR 4FH 1秒到,清4FH

LJMP DISPLAY 调用显示子程序 JIA1:MOV TH1,#068H赋初值

MOV TL1,#0F0H

DJNZ 60H,TT 60H单元自减1,判断是否为0,不为0则跳转到TT处

MOV 60H,#100 60H单元为0,则重新给其赋值100

SETB 4FH 同时置位4FH单元

INC R3R3自加1

CJNE R3,#60,TT 判断R3是否为60,否则跳转TT处

MOV R3,#0 R3为60,则给R3赋0

TT:RETITAB: 编码表

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 编码

END程序结束

秒表的设计程序

用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。

三、程序代码:

A_BIT EQU 20H 数码管个位数存放内存位置

B_BIT EQU 21H 数码管十位数存放内存位置

TEMP EQU 22H 计数器数值存放内存位置 开机初始化

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#0FFH使显示时间数码管熄灭

CLR F0

CLR F1

MOV DPTR,#NUMTAB 指定查表启始地址

等待按键输入

根据按键的输入判断执行什么功能按键1按下则执行功能1

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#0FFH使显示时间数码管熄灭

START:JB P3.6,START1循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,START如果是干扰就返回

JNB P3.6,$等待按键松开

LJMP GN1 按键2按下则执行功能2START1: JB P3.7,START循环判断开始按钮K2是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.7,START1如果是干扰就返回

JNB P3.7,$

LJMP GN2数码管显示秒表时间的程序

GN1:先初始化

S1:MOV A,#0

MOV TEMP,A

GOON1: MOV R2,#2

JS1: MOV R3,#250

TIME1: MOV A,TEMP 将TEMP中的十六进制数转换成10进制

MOV B,#10 10进制/10=10进制

DIV AB

MOV B_BIT,A 十位在A

MOV A_BIT,B 个位在B LCALL DPLOP1插入一段判断定时过程中是否有按键输入的程序段

C1: JB P3.6,B1

ACALL DELAY10延时10毫秒消抖

JB P3.6,C1

JNB P3.6,$等待按键松开

CPL F0

ZT1: MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

JB P3.6,$循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,ZT1如果是干扰就返回

JNB P3.6,$等待按键松开

LCALL DPLOP1

B1: JB P3.7,LOOP1

ACALL DELAY10延时10毫秒消抖

JB P3.7,B1

JNB P3.7,$等待按键松开

AJMP OVERLOOP1: DJNZ R3,TIME1 2毫秒循环执行250次,时间约0.5秒

DJNZ R2,JS1 循环执行2次,时间为1 秒钟INC TEMP满一秒钟对时间加1

MOV A,TEMP

CLR C

SUBB A,#60

JNZ GOON1判断TEMP的数值是否为60?不为60循环

ACALL OVER

RET

GN2: MOV A,#14H 设定倒计时的时间20S

MOV TEMP,A数码管显示倒计时时间的程序

初始化

MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

MOV P0,#14H使显示时间为设定的倒计时时间 GOON2: MOV R2,#2

JS2: MOV R3,#250

TIME2: MOV A,TEMP 将TEMP中的十六进制数转换成10进制

MOV B,#10 10进制/10=10进制

DIV AB

MOV B_BIT,A 十位在A

MOV A_BIT,B 个位在BMOV DPTR,#NUMTAB 指定查表启始地址

DPLOP2: MOV A,A_BIT 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

MOV P0,A 送出个位的7段代码

CLR P2.5 开个位显示

ACALL DELY1显示1毫秒

SETB P2.5关闭个位显示,防止鬼影

MOV A,B_BIT 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

MOV P0,A 送出十位的7段代码

CLR P2.6 开十位显示

ACALL DELY1显示1毫秒

SETB P2.6关闭十位显示,防止鬼影插入一段判断定时过程中是否有按键输入的程序段

C2: JB P3.6,B2

ACALL DELAY10延时10毫秒消抖

JB P3.6,C2

JNB P3.6,$等待按键松开

ZT2:MOV P3,#0FFH对P3口初始化,设置为高电平,用于按键输入

JB P3.6,$循环判断开始按钮K1是否按下?

ACALL DELAY10延时10毫秒触点消抖

JB P3.6,ZT2如果是干扰就返回

JNB P3.6,$等待按键松开

B2: JB P3.7,LOOP2

ACALL DELAY10延时10毫秒消抖

JB P3.7,B1

JNB P3.7,$等待按键松开

AJMP OVERLOOP2: DJNZ R3,TIME2 2毫秒循环执行250次,时间约0.5秒

DJNZ R2,JS2 循环执行2次,时间为1 秒钟DEC TEMP满一秒钟对时间减1

MOV A,TEMP

JNZ GOON2判断TEMP的数值是否为0?不为0循环

ACALL OVER

RET

结束定时

OVER: AJMP START退到开机初始化状态1毫秒延时子程序

DELY1: MOV R4,#2

D1:MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

RET10毫秒延时子程序

DELAY10: MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET实验板上的两位一体的数码管0~9各数字的显示代码

NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

DPLOP1: MOV A,A_BIT 取个位数

MOVC A,@A+DPTR 查个位数的7段代码

MOV P0,A 送出个位的7段代码

CLR P2.5 开个位显示

ACALL DELY1显示1毫秒

SETB P2.5关闭个位显示,防止鬼影

MOV A,B_BIT 取十位数

MOVC A,@A+DPTR 查十位数的7段代码

MOV P0,A 送出十位的7段代码

CLR P2.6 开十位显示

ACALL DELY1显示1毫秒

SETB P2.6关闭十位显示,防止鬼影

RET

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12098755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存