单片机60秒计时器的程序

作者&投稿:巧蝶 (若有异议请与网页底部的电邮联系)
单片机60秒计时器的程序,用AT89C51实现~

//1:用AT89C51单片机的定时/计数器T0产生一秒的
//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void display(uchar fen,uchar miao);
uchar a,fen,miao,shu;
void delay(uint z);
void init();
void main()
{
init();
while(1)
{
display(fen,miao);
}

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}

}

void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(uchar fen,uchar miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延时5毫秒

P1=0xFf;
P2=table[miao];
delay(5);//延时5毫秒
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

ORG 0000H ;从地址0开始执行
JMP START ;跳转到START处
orG 000BH ;TIMER0 的中断向量
LJMP TIMER_0 ;跳转到TIMER—0
START:
MOV P0, #0FFH ;
MOV P1, #0FFH ;
MOV P2, #0FFH ;
MOV P3, #0FFH ;
MOV R4 , #40 ;R4=40
MOV IE , #10000010B ;开中断
MOV TMOD , #00000001B ;设定定时方式
MOV SP , #30H ;移开堆栈
MOV TH0, #75 ;设定定时初值
MOV TL0, #234 ;设定定时初值
NOP
NOP
MOV DPTR , #TABLE ;表首地址
MOV 50H, #0 ;50H=0
MOV 51H, #0 ;51H=0
MOV 52H, #0 ;52H=0
MOV 53H, #0 ;53H=0
NOP
NOP
SETB TR0 ;启动T0
LOOP_1:
MOV A , 50H ;A=(R0)
MOVC A, @A+DPTR ;读取数据
MOV P0,A ;把数据赋给P0口
CLR P2.7 ;打开位码
CALL DELAY
SETB P2.7 ;关闭位码
NOP
NOP
MOV A,51H ; A=(R1)
MOVC A,@A+DPTR ;读取第二位7---SEGMENT----- LED的数据
MOV P0, A ;把读取的数据送入P0口
NOP
NOP
CLR P2.6 ;打开第二个数码管的位码
CALL DELAY
SETB P2.6 ;关闭位码
MOV A, 52H ;A=(R2)
MOVC A, @A+DPTR ; 读取第三位7---SEGMENT----- LED的数据
MOV P0, A ;把读取的数据送入P0口
NOP
NOP
CLR P2.5 ;打开第三位的位码
CALL DELAY
SETB P2.5 ;关闭位码
MOV A , 53H ;A=(R3)
MOVC A , @A+DPTR ; 读取第四位7---SEGMENT----- LED的数据
MOV P0, A ;把读取的数据送入P0口
CLR P2.4 ;打开第四位的位码
CALL DELAY
SETB P2.4 ;关闭位码
NOP
NOP
JMP LOOP_1 ;跳转到LOOP-1
//*******************以下是TIMER0的中断服务子程序***********************//
TIMER_0:
PUSH PSW ;
CLR TR0 ;
DJNZ R4, NEXT ;不够一秒就继续执行
MOV A,50H ;
CJNE A, #9, LOOP_2 ;所要显示的数字是否达到9?若未达到,就跳转到LOOP-2
MOV 50H,#0 ;(50H)=0
MOV A ,51H ;A=(50H)
CJNE A,#9,LOOP_4 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-4
MOV 51,#0 ;(51H)=0
MOV A ,52H ;A=(52H)
CJNE A,#9,LOOP_5 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-5
MOV 52H ,#0 ;(52H)=0
MOV A ,53H ;A=(53H)
CJNE A ,#9,LOOP_6 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-6
MOV 53H,#0 ;(53H)=0
JMP LOOP_3 ;跳转到LOOP--3
LOOP_2:
INC 50H ;50H的数据增加1
JMP LOOP_3 ;跳转到LOOP--3
LOOP_4:
INC 51H ;51H的内容增加1
JMP LOOP_3 ;跳转到LOOP--3
LOOP_5:
INC 52H ;52H的内容增加1
JMP LOOP_3 ;跳转到LOOP--3
LOOP_6:
INC 53H ;53H的内容增加1
LOOP_3:
MOV R4, #40 ;R4=40
NEXT:
MOV TH0,#75 ;设定定时初值
MOV TL0,#234 ;设定定时初值
SETB TR0 ;启动TIMER0
POP PSW ;
RETI ;返回
DELAY: ;100MS?????
MOV R7,#2
D1: MOV R6,#25
D2: DJNZ R6,D2
DJNZ R7,D1
RET
TABLE: DB 03FH,06H,5BH,4FH;
DB 66H,6DH,7DH,07H;
DB 7FH,6FH;
END; 这是以前做过的,硬件电路图找不到了,仔细看一看引脚的I/O,可以参考用的

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void display(uchar fen,uchar miao);
uchar a,fen,miao,shu;
void delay(uint z);
void init();
void main()
{
init();
while(1)
{
display(fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(uchar fen,uchar miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延时5毫秒
P1=0xFf;
P2=table[miao];
delay(5);//延时5毫秒
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}


急求一个5秒 20秒 30秒 40秒 60秒的FLASH倒计时器,到最后10秒有倒计声音...
这闹哪样,到底是几秒- -

60秒等于多少分钟?60分钟等于多少分钟?
是的,60秒=1分钟,60分钟=1小时。钟面上有3根针,它们是时针、分针和秒针,其中走得最快的是秒针,走得最慢的是时针。钟面上有12个数字,12个大格,60个小格;每两个数间是1个大格,也就是5个小格。时针走1大格是1小时;分针走1大格是5分钟,走1小格是1分钟;秒针走1大格是5秒钟,走1...

怎么把51单片机计时器60秒一进改为99秒一进,并把最小值从1秒改为0.01秒...
从LZ 的要求分析,无非就是想要个 秒表功能(百分之一秒单位)。单位时间是 0.01s=10ms,定时器最大定时时间应为 10ms。每次中断,10ms 计数器+1 最大是 99.99秒的话,最好是拆分成 整数 99,跟 小数 99,分别用 2个变量存储(uchar足够),每当 10ms 变量 加满 100,秒 变量就加 1。显...

急急急!哪位大神可以教一下60秒计时器怎么改成50秒计时器!(数电)
60秒计时器改成50秒计时器是可以,但仍需要知道原60秒的电路结构。

秒钟走一圈是多少秒
1、秒针在钟面上走一大格是5秒,走一圈是60秒,分针走1小格,表示一分钟,走一圈表示1小时。至今为止,在中国历史上有留下记载的四代计时器分别为:日晷、沙漏、机械钟、石英钟。在中国市场上石英钟最热销。2、时钟一直以来都是国人钟爱的商品之一。新中国成立以来,国家投入大量资金发展钟表工业,使...

美拍长视频60秒怎么下载
下载最新版本即可。在美拍 拍摄界面的右上角 有个计时器标志。切换到“”60 秒即可。谢谢。

制作一个多少时间的计时器?
三、制作一个一分钟计时器:1.看了摆钟的内部结构,知道了摆钟的工作原理后,我们也来做一个简易摆钟吧。揭题:制作一个一分钟计时器 2.引导思考:摆锤只需要摆动30次,摆钟就是一分钟,也就是60秒。这是为什么呢?3.用自带卡纸等其他材料进行仿制。4.请成功的小组进行展示。不能完成的可后继续...

使用2个数码管设计一个60秒倒计时C语言程序,要求用定时器中断定时1秒...
7SEG-COM-CATHODE 为共阴管 include<reg51.h> define uchar unsigned char define uint unsigned int uchar num=60,shi,ge;uchar code TAB[]={ 0x3F,\/*0*\/ 0x06,\/*1*\/ 0x5B,\/*2*\/ 0x4F,\/*3*\/ 0x66,\/*4*\/ 0x6D,\/*5*\/ 0x7D,\/*6*\/ 0x07,\/*7*\/ 0x7F,\/*8*\/ 0x6F,\/*...

秒钟走一圈是多少秒 秒钟走一圈是多久
1、60秒。2、秒针在钟面上走一大格是5秒,走一圈是60秒,分针走1小格,表示一分钟,走一圈表示1小时。至今为止,在中国历史上有留下记载的四代计时器分别为:日晷、沙漏、机械钟、石英钟。在中国市场上石英钟最热销。

分针走一小格是几秒
分针走一小格是60秒,分针是指时钟上面以分钟为单位移动的指针,时钟是生活中常用的一种计时器,人们通过它来记录时间。至今为止,在中国历史上有留下记载的四代计时器分别为日晷,沙漏,机械钟,石英钟。时间(Time)是物质的运动、变化的持续性、顺序性的表现,包含时刻和时段两个概念。时间是人类用以...

湘潭市17750777348: 怎样用单片机c语言实现60秒倒计时 -
壤娅达吉: 你的分不好拿啊= =!!!!#include<reg51.h> #define uchar unsigned char//宏定义 #define uint unsigned int sbit dula=p2^6; //段控制位 sbit wela=p2^7; //位控制位 uchar miao,fen,aa,n1,n2,n3,n4; uchar code table[]={ //显示编码 0x3f,0x06,0x5b,...

湘潭市17750777348: 单片机60秒计时器设计程序 -
壤娅达吉: ORG 0000H ;从地址0开始执行 JMP START ;跳转到START处 orG 000BH ;TIMER0 的中断向量 LJMP TIMER_0 ;跳转到TIMER—0 START: MOV P0, #0FFH ; MOV P1, #0FFH ; MOV P2, #0FFH ; MOV P3, #0FFH ; MOV R4 , #40 ;R4=40 MOV ...

湘潭市17750777348: 求一个简单的单片机用数码管显示计时60秒的C语言程序,程序一定要带有解释和Proteus 仿真电路图. -
壤娅达吉: /***程序仿真用89c52 数码管用共阳极数码管 P0口段选,P3.0和P3.1位选 定时器2用法见百度“T2CON”***/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf...

湘潭市17750777348: 单片机开发板定时器60秒怎么编程 -
壤娅达吉: #include <reg51.h>void InitTimer0(void) {TMOD = 0x01;TH0 = 0x0F6;TL0 = 0x3C;EA = 1;ET0 = 1;TR0 = 1; }void main(void) {InitTimer0(); }void Timer0Interrupt(void) interrupt 1 {unsigned char num1,num2;TH0 = 0x0F6;TL0 = 0x3C;...

湘潭市17750777348: 那位高手帮我写下60秒倒计时的程序 单片机用的 要1个按键控制 -
壤娅达吉: #include<stdio.h> #include<time.h> main() {int i;for(i=60;i>=0;i--){printf("%d\n",i);sleep(1000);} }

湘潭市17750777348: 求一个单片机可以进行倒计时60秒的简单程序,最好是能有每一步的详细说明, -
壤娅达吉: 倒计时很简单,问题在于您需要什么形式的输出?程序复杂不复杂,主要在输出方式上.

湘潭市17750777348: 用单片机的定时器及中断设计一个60秒的定时器 -
壤娅达吉: ;数码管段选接P1口,位选接P2.0和P2.1,;采用定时器T1定时10ms,60H为1s计数单元,计数100次为1s ORG 0000H ;程序从0地址开始 LJMP MAIN ;跳到MAIN处执行 ORG 001BH ;定时器T1 LJMP TIME1 ORG 0030H MAIN:MOV TMOD,#01H ;设置T1工作在模式1 MOV TH1,#068H ;赋初值,定时10ms MOV TL1,#0F0H

湘潭市17750777348: 求用单片机c语言编写的倒计时60s程序,为什么在百度上找的程序验证了现象不对 -
壤娅达吉: 嘎嘎,刚好写过60秒倒计时程序#include num=0; P2=0x00;0;TL0=(65536-45872)%256; EA=1; ET0=1,0x4f,0x66,shi,0x06,0x5b;x>0;x--) for(y=110;y&gt,0x6f,0x77; temp--; TR0=1; while(1) { shi=temp/,0x7c,0x39;256; delay(5); } } void T0_time()...

湘潭市17750777348: 请帮忙写一个程序:单片机控制液晶显示器60秒倒计时(C语言) -
壤娅达吉: #include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit RS=P2^5; sbit RW=P2^6; sbit EN=P2^7; uchar code temp[]="00"; uint aa,ee,date1; void delay(uint aa) { uint bb,cc; for(bb=0;bb<aa;bb++) for(cc=0;cc<100;cc++); } void ...

湘潭市17750777348: 8051单片机60秒定时c程序 -
壤娅达吉: 用定时器T0的方式一产生一个50MS的中断,设定一个计数值,初值为0,每次中断加一,加到1200时输出取反,就是60S了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网