复制
收藏
提问
全网

#include<reg51.h> unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char int_time; unsigned char second; unsigned char minute; unsigned char hour; sbit SA=P1^4; sbit SB=P1^5; sbit SC=P1^6; sbit SD=P1^7; void delay(void) { unsigned char i; for(i=0;i<200;i++) ; } void delay60ms(void) { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<100;j++) ; } void DisplaySecond(unsigned char s) { P0=Tab[s/10]; P2=0xfd; delay(); P2=0xff; P0=Tab[s%10]; P2=0xfe; delay(); P2=0xff; } void DisplayMinute(unsigned char m) { P0=Tab[m/10]; P2=0xf7; delay(); P2=0xff; P0=Tab[m%10]; P2=0xfb; delay(); P2=0xff; } void Displayhour(unsigned char h) { P0=Tab[h/10]; P2=0xdf; delay(); P2=0xff; P0=Tab[h%10]; P2=0xef; delay(); P2=0xff; } void key_scan(void) { P1=0xf0; if((P1&0xf0)!=0xf0) { delay60ms(); if((P1&0xf0)!=0xf0) { if(SA==0) second++; if(SB==0) minute++; if(SC==0) hour++; if(SD==0) { second=0; minute=0; hour=0; } } } } void mian(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=0; minute=0; hour=0; while(1) { DisplaySecond(second); DisplayMinute(minute); Displayhour(hour); } } void interserve(void) interrupt 1 using 1 { TR0=0; int_time++; if(int_time==20) { int_time=0; second++; } if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } key_scan(); TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }

5月前
全网
文档
学术
百科
知识库
时间不限
自动

理解问题#include<reg51.h> unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char int_time; unsigned char second; unsigned char minute; unsigned char hour; sbit SA=P1^4; sbit SB=P1^5; sbit SC=P1^6; sbit SD=P1^7; void delay(void) { unsigned char i; for(i=0;i<200;i++) ; } void delay60ms(void) { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<100;j++) ; } void DisplaySecond(unsigned char s) { P0=Tab[s/10]; P2=0xfd; delay(); P2=0xff; P0=Tab[s%10]; P2=0xfe; delay(); P2=0xff; } void DisplayMinute(unsigned char m) { P0=Tab[m/10]; P2=0xf7; delay(); P2=0xff; P0=Tab[m%10]; P2=0xfb; delay(); P2=0xff; } void Displayhour(unsigned char h) { P0=Tab[h/10]; P2=0xdf; delay(); P2=0xff; P0=Tab[h%10]; P2=0xef; delay(); P2=0xff; } void key_scan(void) { P1=0xf0; if((P1&0xf0)!=0xf0) { delay60ms(); if((P1&0xf0)!=0xf0) { if(SA==0) second++; if(SB==0) minute++; if(SC==0) hour++; if(SD==0) { second=0; minute=0; hour=0; } } } } void mian(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=0; minute=0; hour=0; while(1) { DisplaySecond(second); DisplayMinute(minute); Displayhour(hour); } } void interserve(void) interrupt 1 using 1 { TR0=0; int_time++; if(int_time==20) { int_time=0; second++; } if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } key_scan(); TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }

已完成理解#include<reg51.h> unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char int_time; unsigned char second; unsigned char minute; unsigned char hour; sbit SA=P1^4; sbit SB=P1^5; sbit SC=P1^6; sbit SD=P1^7; void delay(void) { unsigned char i; for(i=0;i<200;i++) ; } void delay60ms(void) { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<100;j++) ; } void DisplaySecond(unsigned char s) { P0=Tab[s/10]; P2=0xfd; delay(); P2=0xff; P0=Tab[s%10]; P2=0xfe; delay(); P2=0xff; } void DisplayMinute(unsigned char m) { P0=Tab[m/10]; P2=0xf7; delay(); P2=0xff; P0=Tab[m%10]; P2=0xfb; delay(); P2=0xff; } void Displayhour(unsigned char h) { P0=Tab[h/10]; P2=0xdf; delay(); P2=0xff; P0=Tab[h%10]; P2=0xef; delay(); P2=0xff; } void key_scan(void) { P1=0xf0; if((P1&0xf0)!=0xf0) { delay60ms(); if((P1&0xf0)!=0xf0) { if(SA==0) second++; if(SB==0) minute++; if(SC==0) hour++; if(SD==0) { second=0; minute=0; hour=0; } } } } void mian(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=0; minute=0; hour=0; while(1) { DisplaySecond(second); DisplayMinute(minute); Displayhour(hour); } } void interserve(void) interrupt 1 using 1 { TR0=0; int_time++; if(int_time==20) { int_time=0; second++; } if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } key_scan(); TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }

展开阅读网页

您提供的代码是一个基于51单片机的数字电子钟程序,它使用了定时器中断来实现秒、分、时的计时功能。以下是对代码的简要解释:

  1. 定义和初始化:程序首先定义了显示数字的编码Tab,以及秒second、分minute、时hour的变量,还有控制位SA、SB、SC、SD。delaydelay60ms函数用于实现延时功能,DisplaySecondDisplayMinuteDisplayhour函数用于在数码管上显示秒、分、时14

  2. 定时器配置:在main函数中,设置了定时器模式TMOD为模式1,启用了全局中断EA和定时器0中断ET0。定时器0的初始值设置为TH0TL0,这是为了实现大约50ms的中断周期。然后启动定时器0TR0=128

  3. 主循环:在while(1)循环中,不断调用显示函数来更新数码管上的显示。

  4. 中断服务interserve函数是一个中断服务程序,它响应定时器0的中断。每次中断触发时,中断服务程序会增加int_time计数,当int_time达到20时,表示1秒已经过去,因此秒数增加1。如果秒数达到60,则分钟数增加1,依此类推。此外,还包含了一个按键扫描功能,用于手动调整时间46

  5. 重置定时器:在中断服务程序的最后,重新设置定时器0的初始值,并重新启动定时器0。

  6. 注意mian函数名应为main,这是一个拼写错误。另外,interrupt 1 using 1是51单片机的中断服务程序声明,其中1表示中断号,using 1指定了寄存器组1

整体上,这段代码实现了一个简单的数字电子钟,通过定时器中断来更新时间,并可以通过按键来调整时间。357

更专业一些
转笔记
专业
#include<reg51.h> unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char int_time; unsigned char second; unsigned char minute; unsigned char hour; sbit SA=P1^4; sbit SB=P1^5; sbit SC=P1^6; sbit SD=P1^7; void delay(void) { unsigned char i; for(i=0;i<200;i++) ; } void delay60ms(void) { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<100;j++) ; } void DisplaySecond(unsigned char s) { P0=Tab[s/10]; P2=0xfd; delay(); P2=0xff; P0=Tab[s%10]; P2=0xfe; delay(); P2=0xff; } void DisplayMinute(unsigned char m) { P0=Tab[m/10]; P2=0xf7; delay(); P2=0xff; P0=Tab[m%10]; P2=0xfb; delay(); P2=0xff; } void Displayhour(unsigned char h) { P0=Tab[h/10]; P2=0xdf; delay(); P2=0xff; P0=Tab[h%10]; P2=0xef; delay(); P2=0xff; } void key_scan(void) { P1=0xf0; if((P1&0xf0)!=0xf0) { delay60ms(); if((P1&0xf0)!=0xf0) { if(SA==0) second++; if(SB==0) minute++; if(SC==0) hour++; if(SD==0) { second=0; minute=0; hour=0; } } } } void mian(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=0; minute=0; hour=0; while(1) { DisplaySecond(second); DisplayMinute(minute); Displayhour(hour); } } void interserve(void) interrupt 1 using 1 { TR0=0; int_time++; if(int_time==20) { int_time=0; second++; } if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } key_scan(); TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }
不在提醒

更专业内容正在努力生成中
知识树
#include<reg51.h> unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char int_time; unsigned char second; unsigned char minute; unsigned char hour; sbit SA=P1^4; sbit SB=P1^5; sbit SC=P1^6; sbit SD=P1^7; void delay(void) { unsigned char i; for(i=0;i<200;i++) ; } void delay60ms(void) { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<100;j++) ; } void DisplaySecond(unsigned char s) { P0=Tab[s/10]; P2=0xfd; delay(); P2=0xff; P0=Tab[s%10]; P2=0xfe; delay(); P2=0xff; } void DisplayMinute(unsigned char m) { P0=Tab[m/10]; P2=0xf7; delay(); P2=0xff; P0=Tab[m%10]; P2=0xfb; delay(); P2=0xff; } void Displayhour(unsigned char h) { P0=Tab[h/10]; P2=0xdf; delay(); P2=0xff; P0=Tab[h%10]; P2=0xef; delay(); P2=0xff; } void key_scan(void) { P1=0xf0; if((P1&0xf0)!=0xf0) { delay60ms(); if((P1&0xf0)!=0xf0) { if(SA==0) second++; if(SB==0) minute++; if(SC==0) hour++; if(SD==0) { second=0; minute=0; hour=0; } } } } void mian(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=0; minute=0; hour=0; while(1) { DisplaySecond(second); DisplayMinute(minute); Displayhour(hour); } } void interserve(void) interrupt 1 using 1 { TR0=0; int_time++; if(int_time==20) { int_time=0; second++; } if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } key_scan(); TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }
如何使用8051微控制器实现定时器中断?
8051微控制器的定时器配置方法
如何用C语言编写8051微控制器的中断服务程序?
在线客服