关键字:AT89S51,马表电路
1.实验任务
(1.开始时,显示“00”,第1次按下SP1后就开始计时。
(2.第2次按SP1后,计时停止。
(3.第3次按SP1后,计时归零。
2.电路原理图
![](http://file.elecfans.com/web1/M00/65/09/o4YBAFujiI6AVB6-AACbWBFtLJY504.jpg)
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中断服务程序框图
![](http://file.elecfans.com/web1/M00/65/22/pIYBAFujiPWAKuwHAABgtjbMXKA208.jpg)
5.汇编源程序
TCNTAEQU 30H
TCNTBEQU 31H
SECEQU 32H
KEYCNTEQU 33H
SP1BIT 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];
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
发布评论请先 登录
相关推荐
数控车床m99指令的用法
数控车床是一种高度自动化的机床,广泛应用于机械加工领域。在数控车床的编程中,M代码(辅助功能代码)起着非常重要的作用。M99指令是数控车床编程中的一种辅助功能代码,用于实现程序的循环调用。下面我们
干货!89C51单片机模拟交通灯控制,原理图,仿真程序等完整资料
和实物是一样的。因此,实物和仿真是一一对应的!
加载“基于毕业51单片机的交通灯设计.hex”文件到单片机,点击运行,交通灯开始工作(二极管显示红、黄、绿三色灯,LED显示倒计时)。
在程序里我们设置
发表于 03-14 18:23
华秋0元6层板丨首单99元,再返99元优惠券
现推出6层板特惠活动↓↓↓①首单仅需99元②下单再送99元优惠券等于不花一分钱,直接0元购!活动规则1、在华秋PCB未付款过6层板订单的用户皆可参与2、特惠价99元订
![华秋0元6层板丨首单<b class='flag-5'>99</b>元,再返<b class='flag-5'>99</b>元优惠券](https://file.elecfans.com/web2/M00/2F/91/pYYBAGIDk5SAG5OkAAAhzW4PBzA134.png)
华秋0元6层板丨首单99元,再返99元优惠券
的高可靠性 现推出 6层板特惠活动 ↓ ↓ ↓ ① 首单仅需99元 ② 下单再送99元优惠券 等于不花一分钱,直接 0元购 ! 活动规则 1、在华秋PCB 未付款 过6层板订单的用户皆可参与 2、 特惠价99元 订单,需符合
![华秋0元6层板丨首单<b class='flag-5'>99</b>元,再返<b class='flag-5'>99</b>元优惠券](https://file1.elecfans.com//web2/M00/A9/24/wKgaomUv1_6AR6FnAALnI7JyoLY555.png)
Protel 99 SE制板Multisim 8仿真电路
在分析使用Multisim 8仿真功能和Protel 99 SE印制板设计功能的基础上,提出一种采用Multisim 8和Protel 99 SE相结合的电子产品设计方法,该方法先采
发表于 10-17 15:25
•875次阅读
![Protel <b class='flag-5'>99</b> SE制板Multisim 8仿真电路](https://file1.elecfans.com/web2/M00/AA/5B/wKgZomUuNquAOMdJAAGN64PIOgQ705.png)
![](https://file.elecfans.com/web2/M00/A8/C6/poYBAGR3UKqAfT1GAAAMiFaz9zE012.png)
如何实现一种基于51单片机的00-99秒表C语言设计?
51单片机00到99,2位数码管显示。上电前显示00,一共2个按键,一个启动,另一个清零功能,显示到99后不变化,程序可自行修改。
发表于 07-31 10:00
•2151次阅读
![如何实现一种基于51<b class='flag-5'>单片机</b>的00-<b class='flag-5'>99</b>秒表C语言设计?](https://file1.elecfans.com/web2/M00/8E/6A/wKgZomTHFjaATgS-AAC4DeQNSLM167.jpg)
联发科g99什么水平 联发科g99和680差距大吗
G99的CPU性能可能非常强大,可以提供高速的数据处理和流畅的系统响应。它可能采用了较新的处理器架构和优化算法,以提供卓越的性能表现。
评论