导航:首页 > 操作系统 > 51单片机定时器输出0到60秒

51单片机定时器输出0到60秒

发布时间:2022-09-27 23:22:54

‘壹’ 51单片机如何使外部中断显示60秒倒计时求程序,谢谢。

ORG00H;
SJMPSTAR;
ORG1BH;
SJMPTIS;转T1中断服务程序
ORG30H;
STAR:MOVR2,#60H;倒计时初值
MOVR4,#20H;定时中断溢出计数器
MOVIE,#88H;开中断
MOVTMOD,#10H;
MOVTH1,#3CH;定时初值
MOVTL1,#0B0H;定时初值
SETBTR1;启动
ACALLDIS;调用显示子程序
SJMP$;
TIS:MOVTH1,#3CH;
MOVTL1,#0B0H;
DJNZR4,T1S1;定时1S到否
MOVR4,#20;到1S,重置R4=20
DJNZR2,T1S0;倒计时递减
CLRTR1;倒计时结束,关定时器
T1S0:ACALLDIS;调显示
T1S1:RETI;中断返回
SEG7:INCA;A的值加一
MOVCA,@A+PC;取显示断段
RET;;
DB0C0H,0F9H,0A4H,0B0H;;0至3的共阳型显示码
DB99H,92H,82H,0F8H;;4至7的共阳型显示码
DB80H,90H,88H,83H;8至B的共阳型显示码
DB0C6H,0A1H,86H,8EH;;C至F的共阳型显示码
DIS:MOVA,R2;;单字节十六进制数转为十进制数
MOVB,#10;
DIVAB;
ACALLSEG7;
MOVP1,A;;显示十位
MOVA,B;;
ACALLSEG7;;
MOVP2,A;;显示个位
RET;;子程序返回
END;

‘贰’ 求51单片机语言用动态显示设计0-60秒的计时器程序,原理图如图。

红圈是有问题,改如下:
w1=1;w0=1;delay(1);
w1=0;P0=table(shi);delay(2);
w1=1;w0=0;P0=table(ge);delay(2);

‘叁’ 51单片机计时60毫秒怎么算呀,计数周期是啥意思呀

一般51单片机的晶振频率是fosc=12M,单片机内部计时的频率是fosc/12 即1MHZ
因此计数周期1us
内部定时器是16位,最多 计脉冲数为65536个,因此最长定时时间是65.536 ms
要定时60 ms,需经过的脉冲个数是60000个,由于51单片机的定时器是加法计数,因此初值应该写入(65536-60000)
这样经过60mS后,计数器的值就是 (65536-60000)+60000=65536,刚好溢出,溢出标志位TF置1或产生中断
定时器初值又分高8位和低8位,高8位的1代表256,因此高8位是256的倍数,低8位是256的余数
因此 C语言编程就这样 写:
TH0=(65536-60000)/256
TL0=(65536-60000)%256

‘肆’ 51单片机用定时器做动态显示,从数字0闪烁到60,到60之后再回到00闪烁到60再从60到0无限循环

看到你的题目,我就很温馨,这是我的专业课,可惜当年我用的都是编程语言,现在都是c语言了,不过这个还是很好做的,用跳转指令就可以实现

‘伍’ 利用51单片机动态显示0-60秒表

#include<reg52.h>
unsigned int s;
unsigned char key;
sbit d1=P3^7;

void delay() //动态显示延时
{
int k;
for(k=0;k<100;k++);
}

void delay1() //去抖动延时
{
unsigned char code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P2=table[s%10]; P3=0xf8; delay(); P3=0xf0;
P2=table[s/10%10]; P3=0xf4; delay(); P3=0xf0;
P2=table[s/100%10]; P3=0xf2; delay(); P3=0xf0;
P2=table[s/1000]; P3=0xf1; delay(); P3=0xf0;
}

void main()
{

TMOD = 0x01;
TH0 = (65536 - 10000) / 256;//初值,每10ms中断一次
TL0 = (65536 - 10000) % 256;
ET0=1;
EA=1;
while(1) {
delay1();
if(!d1) {
delay1();
if(!d1) { //去抖动
while(!d1) delay1();//等待释放
key++;
if(key == 4) key = 1;
}
}
if(key == 1) TR0 = 1;//开始计时
else if(key == 2) TR0 = 0;//停止
else s = 0;
}
}

void time0() interrupt 1 //内部中断
{
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256;
s++;
if(s == 10000) s = 0;
}

‘陆’ 单片机60秒计时器的程序,用AT89C51实现

//1:用AT89C51单片机的定时/计数器T0产生一秒的
//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#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--);
}

‘柒’ 怎么用51单片机的数码管写一个秒表60秒程序用定时器

这个应该不难啊。定时器确定相对准确的时间,在用数码管显示出来,设置一个标志,满了59自动归零

‘捌’ 51单片机能延时60秒时间吗

用定时器写;
#include <reg51.h>
sbit led = P1^0; //间隔60秒led亮灭
void Timer0_Init()
{
TMOD = 0X01; //使用定时器0,方式1
TH0=0X3C; //定时50毫秒
TL0=0XB0;
EA = 1; //使能总中断
ET0=1; //使能定时器0中断
TR0=1; //启动定时器0
}

void main()
{
Timer0_Init();
while(1);
}

void Timer0() interrupt 1
{
static unsigned int count = 0;
TH0=0X3C; //定时50毫秒
TL0=0XB0;
count++; //每中断一次就是50毫秒,中断1200 次就是60秒,计数1200次
if(count == 1200) //60秒后清零count,同时led的电平取反,若楼主想输出高电平就直
{ //接把led = 1即可
count=0;
led = ~led;
}
}

‘玖’ 51单片机 用定时器T1控制两位数码管做从0计数到60的实验,每一秒加1,可是怎都不显示,求高手帮忙找原因

通过定时器初值可以看出单片机使用的是11.0592MHz晶振

把函数void dispiay(uchar ge,uchar shi)
改成void display(uchar shi,uchar ge)
即可编译通过

只是函数拼写错误和变量顺序错误

‘拾’ 单片机开发板定时器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;
num1++;
if(num1==200) //定时1s
{
num1=0;
num2++;
if(num2=60) //定时60秒
num2=0;

}

}

阅读全文

与51单片机定时器输出0到60秒相关的资料

热点内容
五菱宏光空调压缩机 浏览:64
为什么app占用几百兆 浏览:676
自动解压失败叫我联系客服 浏览:482
易语言新手源码 浏览:456
oa服务器必须有固定ip地址 浏览:42
传奇源码分析是什么 浏览:267
解放压缩机支架 浏览:255
程序员秃顶搞笑相遇 浏览:6
IBM手机app商店叫什么名字 浏览:834
jpeg压缩质量 浏览:774
云服务器评测对比 浏览:145
java日期转string 浏览:221
openfire源码编译 浏览:897
在线小工具箱引流网站源码 浏览:337
非科班程序员自学 浏览:801
压缩泡沫鞋底底材 浏览:219
程序员职场第一课2正确的沟通 浏览:679
遇到不合法app应该怎么办 浏览:91
汇编程序编译后的文件 浏览:81
大智慧均线源码 浏览:374