1. 实验任务
如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。
2. 电路原理图
图4.11.1
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。
4. 程序设计内容
(1. 在设计过程中我们用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,从新秒计数。
(2. 对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。
(3. 在数码上显示,仍通过查表的方式完成。
(4. 一秒时间的产生在这里我们采用软件精确延时的方法来完成,经过精确计算得到1秒时间为1.002秒。
DELY1S: MOV R5,#100
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
汇编源程序
Second EQU 30H
ORG 0
START: MOV Second,#00H
NEXT: MOV A,Second
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
LCALL DELY1S
INC Second
MOV A,Second
CJNE A,#60,NEXT
LJMP START
DELY1S: MOV R5,#100
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
7. C语言源程序
#include 《AT89X51.H》
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Second;
void delay1s(void)
{
unsigned char i,j,k;
for(k=100;k》0;k--)
for(i=20;i》0;i--)
for(j=248;j》0;j--);
}
void main(void)
{
Second=0;
P0=table[Second/10];
P2=table[Second];
while(1)
{
delay1s();
Second++;
if(Second==60)
{
Second=0;
}
P0=table[Second/10];
P2=table[Second];
}
}
关键字:单片机 软件延时 计时器
引用地址:
使用单片机设计实现软件延时00到59秒计时器的资料说明
推荐阅读最新更新时间:2024-10-24 11:19
使用单片机设计实现软件延时00到59秒计时器的资料说明
1. 实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。 2. 电路原理图 图4.11.1 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
[单片机]
00-59秒计时器(利用软件延时)
1. 实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。 2. 电路原理图 图4.11.1 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,……
[单片机]
11. 00-59秒计时器(利用软件延时)
1. 实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。 2. 电路原理图 图4.11.1 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
[单片机]
00-59秒计时器(利用软件延时)
1. 实验任务 如下图所示,在 AT89S51 单片机的 P0 和 P2 端口分别接有两个共阴数码管, P0 口驱动显示秒时间的十位,而 P2 口驱动显示秒时间的个位。 2. 电路原理图 图 4.11.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的 P0.0/AD0 - P0.7/AD7 端口用 8 芯排线连接到“四路静态数码显示模块”区域中的任一个 a - h 端口上;要求: P0.0/AD0 对应着 a , P0.1/AD1 对应着 b , …… , P0.7/AD7 对应着 h 。 (2. 把“单片机系统”区域中的
[单片机]
STM32 使用通用计时器实现微秒延时
为了驱动ARF2496K这款芯片,做STM32上的移植,所以第一步需要解决的就是时序问题,很显然在STM32下类似于51的延时方法并不适用,自然想到了采用定时器进行定时来延时。目前使用的是查询方式进行延时。 环境: STM32F107主控,采用STLINK仿真 代码如下: static void TIM5_Init_Query(CALC_TYPE type,uint32_t val) { TIM_TimeBaseInitTypeDef Tim5; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); Tim5.TIM_Period=1; //??? if(typ
[单片机]
分享一个按键消抖和数码管显示都不用延时函数的倒计时器
最近一直在研究程序中怎么取消延时函数,经过一段时间的摸索,终于有所收获,随手写了个倒计时器,倒计时器在生活中很多地方都会用到,只要把电路稍加改进,就可以做成很实用的东西,程序仿真通过,等有时间做成实物,先把程序发上来分享一下。 随便截了几张图。 仿真界面: 程序界面: 源程序,写得比较粗糙,喜欢的可以共同研究一下
[单片机]
STM32 使用通用计时器实现微秒延时
为了驱动ARF2496K这款芯片,做STM32上的移植,所以第一步需要解决的就是时序问题,很显然在STM32下类似于51的延时方法并不适用,自然想到了采用定时器进行定时来延时。目前使用的是查询方式进行延时。 环境: STM32F107主控,采用STLINK仿真 代码如下: static void TIM5_Init_Query(CALC_TYPE type,uint32_t val) { TIM_TimeBaseInitTypeDef Tim5; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); Tim5.TIM_Period=1; //?
[单片机]
8051系列单片机软件精确延时研究(一)
前言 最近自学STC公司的8051系列单片机,编程中如流水灯等非精确延时多用软件延时实现,写了几个类似DelayX10us(unsigned char x)的函数方便调用,函数内部的语句多是用STC官方延时程序再自己套一个for或者do..while循环改造而成,像这样: //非精确延时10*Xus //@12.000MHz 12T模式 void DelayX10us(unsigned char x) { unsigned char i; for (; x 0; x--) { _nop_(); i = 2; while (--i); } } 由于不懂汇编,所以对代码
[单片机]