用蓝桥杯51的板子编写一个c语言电子表其中功能有:显示秒分时按键可以加减秒分时任意一个有个按键可以复位。用的软件是Keil5
由于蓝桥杯51的板子使用的是8051单片机,而Keil5是一款IDE软件,并不是一种编程语言,因此需要使用汇编语言来编写电子表程序。
以下是一个简单的电子表程序,可以显示秒分时,按键可以加减秒分时任意一个,有个按键可以复位。
ORG 0H
MOV P0, #0FFH ; 设置P0口为输出状态
MOV P2, #0FFH ; 设置P2口为输入状态
MOV TMOD, #01H ; 设置定时器0为16位定时器
MOV TH0, #0 ; 设置定时器0初始值为0
MOV TL0, #0 ; 设置定时器0初始值为0
SETB TR0 ; 启动定时器0
MOV A, #0 ; 初始化计时器变量
MOV B, #0
MOV C, #0
LOOP:
MOV A, TH0 ; 获取定时器0的高8位
MOV B, TL0 ; 获取定时器0的低8位
MOV C, #0 ; 清空C寄存器
DIV AB, #10000 ; 将计时器的值除以10000,得到时钟数
MOV P0, A ; 将时钟数输出到P0口
MOV A, B ; 将计时器的值赋给A寄存器
DIV AB, #600 ; 将计时器的值除以600,得到分钟数
MOV P0, A ; 将分钟数输出到P0口
MOV A, B ; 将计时器的值赋给A寄存器
DIV AB, #10 ; 将计时器的值除以10,得到秒数
MOV P0, A ; 将秒数输出到P0口
JB P2.0, ADD_S ; 检测P2.0是否被按下,如果按下则跳转到ADD_S标签
JB P2.1, ADD_M ; 检测P2.1是否被按下,如果按下则跳转到ADD_M标签
JB P2.2, ADD_H ; 检测P2.2是否被按下,如果按下则跳转到ADD_H标签
JB P2.3, RESET ; 检测P2.3是否被按下,如果按下则跳转到RESET标签
JMP LOOP ; 如果没有任何按键被按下,则继续循环
ADD_S:
INC B ; 将秒数加1
CJNE B, #60, SKIP_S ; 如果秒数不等于60,则跳转到SKIP_S标签
MOV B, #0 ; 如果秒数等于60,则将秒数清零
SKIP_S:
MOV A, #0 ; 将A寄存器清零
MOV TH0, A ; 将A寄存器赋值给定时器0的高8位
MOV TL0, B ; 将B寄存器赋值给定时器0的低8位
JMP LOOP ; 跳转回循环
ADD_M:
INC C ; 将分钟数加1
CJNE C, #60, SKIP_M ; 如果分钟数不等于60,则跳转到SKIP_M标签
MOV C, #0 ; 如果分钟数等于60,则将分钟数清零
JMP ADD_S ; 跳转到ADD_S标签
SKIP_M:
MOV A, #0 ; 将A寄存器清零
MOV B, #0 ; 将B寄存器清零
MOV TH0, A ; 将A寄存器赋值给定时器0的高8位
MOV TL0, B ; 将B寄存器赋值给定时器0的低8位
INC AB ; 将计时器的值加1
JMP LOOP ; 跳转回循环
ADD_H:
INC A ; 将时钟数加1
CJNE A, #24, SKIP_H ; 如果时钟数不等于24,则跳转到SKIP_H标签
MOV A, #0 ; 如果时钟数等于24,则将时钟数清零
SKIP_H:
MOV B, #0 ; 将B寄存器清零
MOV C, #0 ; 将C寄存器清零
MOV TH0, B ; 将B寄存器赋值给定时器0的高8位
MOV TL0, C ; 将C寄存器赋值给定时器0的低8位
JMP LOOP ; 跳转回循环
RESET:
MOV A, #0 ; 将A寄存器清零
MOV B, #0 ; 将B寄存器清零
MOV C, #0 ; 将C寄存器清零
MOV TH0, B ; 将B寄存器赋值给定时器0的高8位
MOV TL0, C ; 将C寄存器赋值给定时器0的低8位
JMP LOOP ; 跳转回循环
END
``
原文地址: https://www.cveoy.top/t/topic/hjDw 著作权归作者所有。请勿转载和采集!