99秒单片机马表设计
来源: 互联网 关键词: 电子钟表 更新时间: 2021/11/15
1. 实验任务
(1. 开始时,显示“00”,第1次按下SP1后就开始计时。
(2. 第2次按SP1后,计时停止。
(3. 第3次按SP1后,计时归零。
2. 电路原理图

3. 系统板上硬件连线
(1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
(2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。
(3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;
4. 程序框图
T0中断服务程序框图

5. 汇编源程序
TCNTA EQU 30H
TCNTB EQU 31H
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
6. C语言源程序
#include
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
break;
}
while(P3_5==0);
}
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==400)
{
tcnt=0;
second++;
if(second==100)
{
second=0;
}
P0=dispcode[second/10];
P2=dispcode[second%10];
}
}
推荐帖子 最新更新时间:2022-08-20 01:40
- 双色彩灯
- 本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 很清晰 不错 Re: 双色彩灯
lorant
移动便携
- 关于MC9S12XS128 单片机之间 SPI通信的一些问题
- 最近在做一个东西,上面用到了两篇XS128之间的主从机通信一片主机一片从机。下面用A(主机) B(从机)代替单功形式,A通过直接写数据寄存器吧数据发送到B,B生成中断响应 接收数据。完全好用在尝试A接收B的数据时。首先B写数据寄存器,进入死循环等待A发送信号。A给了1000ms的
lzsxtree
NXP MCU
- 最近研究cortex-a8及linux音频驱动的实现遇到问题
- 之前做了关于cortex-a8的MP3播放器,然后和同学正在研究cortex-a8及linux音频驱动的实现,两个课题很相似,前一个实现了,但是后一个是不用串口以为改改就可以用,但是同学和我都是菜鸟,刚接触嵌入式基础太弱,一直不知道程序该如何编写,请大神指点一下,两个项目的区别介
物联网菜鸟
ARM技术
- 关于系统深度睡眠(Deep Sleep)的理解?
- 大多微处理器芯片都提供深度睡眠的功能,可以减少功耗。比如S3C2440。 那么在什么时候才应该进入深度睡眠呢? 我们知道,一般的操作系统提供了TIMER功能。 这个功能需要使用硬件定时器来进行计数,比如周期为5ms。 那么如果当前有TASK在使用Timer,是否可以进入深
qddianzi
嵌入式系统
- 基于AD8108的宽频带低串扰视频切换矩阵的设计
- 介绍了一种宽频带低串扰视频切换矩阵的设计。该矩阵采用美国ADI公司的AD8108作为宽频带视频切换矩阵的信号切换芯片,采用AT89C51作为微控制器完成矩阵切换的控制和外围界面的维护。实现的视频切换矩阵具有325MHz的带宽能力和低通道间串扰、低进出串扰的特性,同时具有-98dB
fighting
测试/测量
- 谁有关于投影机软件开发的资料?DDP2230之类
- 哪位大哥有关于投影机软件开发的资料?TI有个DDP2230的芯片,有谁了解? 谁有关于投影机软件开发的资料?DDP2230之类
steel69187
DSP 与 ARM 处理器
- Fly-Buck设计指南
- 优化PCB布局提升转换器性能
- STM32 USB HOST移植
- 浅析视频监视器高清化的三种转变
- 基于ZX-2型FPGA开发板的串口示波器(六)
- Quartus II 虚拟引脚Virtual pin的使用
- AD15中添加Text文件的文字发生重叠现象?
- 波特率并行传输字符长度可以不是7位或者8位么
- 赛前题目分析
- MSP430f149供电问题
- 13.56MHz天线问题
- 特殊74系列芯片资料
- 【晒样片】+顺利申请到样片
- 如何用Keil C51 编写89S51的延时函数,如windows的Delay(...)函数。谢谢.网上有些资料介绍用for循环,但是不够准确。
- 开源项目管理笔记-cedar
- 程序老是从头执行
- FTP远程下载的实现求助
- 传感器产业市场分析
- fpga_pwm
- 升压电路