复制
收藏
提问
全网

include <reg51.h> #define SMG P0//定义数码管段选口 #define WE P2//定义数码管位选口 //sbit 定义了一系列按键的端口,包括秒、分、时的增加和减少按键,以及锁定键和LED指示灯。 sbit T_up= P3^0;//秒按键 sbit T_down = P3^1; sbit Fen_up = P3^2;//分钟按键 sbit Fen_down= P3^3; sbit Shi_up= P3^4;//小时按键 sbit Shi_down = P3^5; sbit key_lock=P3^6; sbit LED=P1^0; unsigned char key_flag = 0;//按键标志位 unsigned char m=0; unsigned char count = 0; unsigned long int S_Number = 0; unsigned char shi=0,fen=0,miao=0; unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0~9与- void display()//数码管显示函数 { switch(m) //位选,选择点亮的数码管, { case(1): WE=0xFE; SMG=gsmg_code[shi/10];break;//显示第7位(左边第一位) case(2): WE=0xFD;SMG=gsmg_code[shi%10]; break;//显示第6位 case(3): WE=0xFB;SMG=gsmg_code[10]; break;//显示第5位 case(4): WE=0xF7;SMG=gsmg_code[fen/10]; break;//显示第4位 case(5): WE=0xEF; SMG=gsmg_code[fen%10];break;//显示第3位 case(6): WE=0xDF;SMG=gsmg_code[10];break;//显示第2位 case(7): WE=0xBF;SMG=gsmg_code[miao/10]; break;//显示第1位 case(8): WE=0x7F;SMG=gsmg_code[miao%10]; break;//显示第0位 case(9): m=0;break; } } void t_5ms(void) interrupt 1//定时5ms,每5毫秒触发一次,用于更新秒数和刷新数码管的显示。 { TH0 = (65536-5000)/256;// TL0 = (65536-5000)%256; count++; m++; if(count==200)//5毫秒计时满200次,则1秒 { count = 0; S_Number++;//秒加1 if(S_Number>=86400)//24*60*60=86400 { S_Number = 0;//计满24小时 } shi = S_Number/3600; fen = S_Number%3600/60; miao = S_Number%60; } display(); if(key_lock==0)//按键锁定,按下不能调节时间 { while(key_lock==0); key_flag=~key_flag; } } void key_accommodation_time()//按键调节时间函数 { if(0==key_flag)//为0,秒钟 { if(T_up==0) { while(T_up==0); S_Number=S_Number+9; } else if(T_down==0) { while(T_down==0); S_Number=S_Number-2; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//非0,分钟 { if(Fen_up==0) { while(Fen_up==0); S_Number=S_Number+60; } else if(Fen_down==0) { while(Fen_down==0); S_Number=S_Number-60; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//时钟 { if(Shi_up==0) { while(Shi_up==0); S_Number=S_Number+3600; } else if(Shi_down==0) { while(Shi_down==0); S_Number=S_Number-3600; } } else { if(S_Number>3600) S_Number=S_Number-3600; } } void main() { TMOD = 0X01; TH0 = (65536-5000)/256;//设置定时器的初始值,用于定时5毫秒 TL0 = (65536-5000)%256; TR0 = 1;//启动定时器0 ET0 = 1;//开启定时器0的中断 EA = 1;//开启全局中断 while(1) { key_accommodation_time(); } }详细解释每句话,让我看明白

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

理解问题include <reg51.h> #define SMG P0//定义数码管段选口 #define WE P2//定义数码管位选口 //sbit 定义了一系列按键的端口,包括秒、分、时的增加和减少按键,以及锁定键和LED指示灯。 sbit T_up= P3^0;//秒按键 sbit T_down = P3^1; sbit Fen_up = P3^2;//分钟按键 sbit Fen_down= P3^3; sbit Shi_up= P3^4;//小时按键 sbit Shi_down = P3^5; sbit key_lock=P3^6; sbit LED=P1^0; unsigned char key_flag = 0;//按键标志位 unsigned char m=0; unsigned char count = 0; unsigned long int S_Number = 0; unsigned char shi=0,fen=0,miao=0; unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0~9与- void display()//数码管显示函数 { switch(m) //位选,选择点亮的数码管, { case(1): WE=0xFE; SMG=gsmg_code[shi/10];break;//显示第7位(左边第一位) case(2): WE=0xFD;SMG=gsmg_code[shi%10]; break;//显示第6位 case(3): WE=0xFB;SMG=gsmg_code[10]; break;//显示第5位 case(4): WE=0xF7;SMG=gsmg_code[fen/10]; break;//显示第4位 case(5): WE=0xEF; SMG=gsmg_code[fen%10];break;//显示第3位 case(6): WE=0xDF;SMG=gsmg_code[10];break;//显示第2位 case(7): WE=0xBF;SMG=gsmg_code[miao/10]; break;//显示第1位 case(8): WE=0x7F;SMG=gsmg_code[miao%10]; break;//显示第0位 case(9): m=0;break; } } void t_5ms(void) interrupt 1//定时5ms,每5毫秒触发一次,用于更新秒数和刷新数码管的显示。 { TH0 = (65536-5000)/256;// TL0 = (65536-5000)%256; count++; m++; if(count==200)//5毫秒计时满200次,则1秒 { count = 0; S_Number++;//秒加1 if(S_Number>=86400)//24*60*60=86400 { S_Number = 0;//计满24小时 } shi = S_Number/3600; fen = S_Number%3600/60; miao = S_Number%60; } display(); if(key_lock==0)//按键锁定,按下不能调节时间 { while(key_lock==0); key_flag=~key_flag; } } void key_accommodation_time()//按键调节时间函数 { if(0==key_flag)//为0,秒钟 { if(T_up==0) { while(T_up==0); S_Number=S_Number+9; } else if(T_down==0) { while(T_down==0); S_Number=S_Number-2; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//非0,分钟 { if(Fen_up==0) { while(Fen_up==0); S_Number=S_Number+60; } else if(Fen_down==0) { while(Fen_down==0); S_Number=S_Number-60; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//时钟 { if(Shi_up==0) { while(Shi_up==0); S_Number=S_Number+3600; } else if(Shi_down==0) { while(Shi_down==0); S_Number=S_Number-3600; } } else { if(S_Number>3600) S_Number=S_Number-3600; } } void main() { TMOD = 0X01; TH0 = (65536-5000)/256;//设置定时器的初始值,用于定时5毫秒 TL0 = (65536-5000)%256; TR0 = 1;//启动定时器0 ET0 = 1;//开启定时器0的中断 EA = 1;//开启全局中断 while(1) { key_accommodation_time(); } }详细解释每句话,让我看明白

已完成理解include <reg51.h> #define SMG P0//定义数码管段选口 #define WE P2//定义数码管位选口 //sbit 定义了一系列按键的端口,包括秒、分、时的增加和减少按键,以及锁定键和LED指示灯。 sbit T_up= P3^0;//秒按键 sbit T_down = P3^1; sbit Fen_up = P3^2;//分钟按键 sbit Fen_down= P3^3; sbit Shi_up= P3^4;//小时按键 sbit Shi_down = P3^5; sbit key_lock=P3^6; sbit LED=P1^0; unsigned char key_flag = 0;//按键标志位 unsigned char m=0; unsigned char count = 0; unsigned long int S_Number = 0; unsigned char shi=0,fen=0,miao=0; unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0~9与- void display()//数码管显示函数 { switch(m) //位选,选择点亮的数码管, { case(1): WE=0xFE; SMG=gsmg_code[shi/10];break;//显示第7位(左边第一位) case(2): WE=0xFD;SMG=gsmg_code[shi%10]; break;//显示第6位 case(3): WE=0xFB;SMG=gsmg_code[10]; break;//显示第5位 case(4): WE=0xF7;SMG=gsmg_code[fen/10]; break;//显示第4位 case(5): WE=0xEF; SMG=gsmg_code[fen%10];break;//显示第3位 case(6): WE=0xDF;SMG=gsmg_code[10];break;//显示第2位 case(7): WE=0xBF;SMG=gsmg_code[miao/10]; break;//显示第1位 case(8): WE=0x7F;SMG=gsmg_code[miao%10]; break;//显示第0位 case(9): m=0;break; } } void t_5ms(void) interrupt 1//定时5ms,每5毫秒触发一次,用于更新秒数和刷新数码管的显示。 { TH0 = (65536-5000)/256;// TL0 = (65536-5000)%256; count++; m++; if(count==200)//5毫秒计时满200次,则1秒 { count = 0; S_Number++;//秒加1 if(S_Number>=86400)//24*60*60=86400 { S_Number = 0;//计满24小时 } shi = S_Number/3600; fen = S_Number%3600/60; miao = S_Number%60; } display(); if(key_lock==0)//按键锁定,按下不能调节时间 { while(key_lock==0); key_flag=~key_flag; } } void key_accommodation_time()//按键调节时间函数 { if(0==key_flag)//为0,秒钟 { if(T_up==0) { while(T_up==0); S_Number=S_Number+9; } else if(T_down==0) { while(T_down==0); S_Number=S_Number-2; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//非0,分钟 { if(Fen_up==0) { while(Fen_up==0); S_Number=S_Number+60; } else if(Fen_down==0) { while(Fen_down==0); S_Number=S_Number-60; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//时钟 { if(Shi_up==0) { while(Shi_up==0); S_Number=S_Number+3600; } else if(Shi_down==0) { while(Shi_down==0); S_Number=S_Number-3600; } } else { if(S_Number>3600) S_Number=S_Number-3600; } } void main() { TMOD = 0X01; TH0 = (65536-5000)/256;//设置定时器的初始值,用于定时5毫秒 TL0 = (65536-5000)%256; TR0 = 1;//启动定时器0 ET0 = 1;//开启定时器0的中断 EA = 1;//开启全局中断 while(1) { key_accommodation_time(); } }详细解释每句话,让我看明白

展开阅读网页

更专业一些
转笔记
专业
include <reg51.h> #define SMG P0//定义数码管段选口 #define WE P2//定义数码管位选口 //sbit 定义了一系列按键的端口,包括秒、分、时的增加和减少按键,以及锁定键和LED指示灯。 sbit T_up= P3^0;//秒按键 sbit T_down = P3^1; sbit Fen_up = P3^2;//分钟按键 sbit Fen_down= P3^3; sbit Shi_up= P3^4;//小时按键 sbit Shi_down = P3^5; sbit key_lock=P3^6; sbit LED=P1^0; unsigned char key_flag = 0;//按键标志位 unsigned char m=0; unsigned char count = 0; unsigned long int S_Number = 0; unsigned char shi=0,fen=0,miao=0; unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0~9与- void display()//数码管显示函数 { switch(m) //位选,选择点亮的数码管, { case(1): WE=0xFE; SMG=gsmg_code[shi/10];break;//显示第7位(左边第一位) case(2): WE=0xFD;SMG=gsmg_code[shi%10]; break;//显示第6位 case(3): WE=0xFB;SMG=gsmg_code[10]; break;//显示第5位 case(4): WE=0xF7;SMG=gsmg_code[fen/10]; break;//显示第4位 case(5): WE=0xEF; SMG=gsmg_code[fen%10];break;//显示第3位 case(6): WE=0xDF;SMG=gsmg_code[10];break;//显示第2位 case(7): WE=0xBF;SMG=gsmg_code[miao/10]; break;//显示第1位 case(8): WE=0x7F;SMG=gsmg_code[miao%10]; break;//显示第0位 case(9): m=0;break; } } void t_5ms(void) interrupt 1//定时5ms,每5毫秒触发一次,用于更新秒数和刷新数码管的显示。 { TH0 = (65536-5000)/256;// TL0 = (65536-5000)%256; count++; m++; if(count==200)//5毫秒计时满200次,则1秒 { count = 0; S_Number++;//秒加1 if(S_Number>=86400)//24*60*60=86400 { S_Number = 0;//计满24小时 } shi = S_Number/3600; fen = S_Number%3600/60; miao = S_Number%60; } display(); if(key_lock==0)//按键锁定,按下不能调节时间 { while(key_lock==0); key_flag=~key_flag; } } void key_accommodation_time()//按键调节时间函数 { if(0==key_flag)//为0,秒钟 { if(T_up==0) { while(T_up==0); S_Number=S_Number+9; } else if(T_down==0) { while(T_down==0); S_Number=S_Number-2; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//非0,分钟 { if(Fen_up==0) { while(Fen_up==0); S_Number=S_Number+60; } else if(Fen_down==0) { while(Fen_down==0); S_Number=S_Number-60; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//时钟 { if(Shi_up==0) { while(Shi_up==0); S_Number=S_Number+3600; } else if(Shi_down==0) { while(Shi_down==0); S_Number=S_Number-3600; } } else { if(S_Number>3600) S_Number=S_Number-3600; } } void main() { TMOD = 0X01; TH0 = (65536-5000)/256;//设置定时器的初始值,用于定时5毫秒 TL0 = (65536-5000)%256; TR0 = 1;//启动定时器0 ET0 = 1;//开启定时器0的中断 EA = 1;//开启全局中断 while(1) { key_accommodation_time(); } }详细解释每句话,让我看明白
不在提醒

更专业内容正在努力生成中
知识树
include <reg51.h> #define SMG P0//定义数码管段选口 #define WE P2//定义数码管位选口 //sbit 定义了一系列按键的端口,包括秒、分、时的增加和减少按键,以及锁定键和LED指示灯。 sbit T_up= P3^0;//秒按键 sbit T_down = P3^1; sbit Fen_up = P3^2;//分钟按键 sbit Fen_down= P3^3; sbit Shi_up= P3^4;//小时按键 sbit Shi_down = P3^5; sbit key_lock=P3^6; sbit LED=P1^0; unsigned char key_flag = 0;//按键标志位 unsigned char m=0; unsigned char count = 0; unsigned long int S_Number = 0; unsigned char shi=0,fen=0,miao=0; unsigned char gsmg_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0~9与- void display()//数码管显示函数 { switch(m) //位选,选择点亮的数码管, { case(1): WE=0xFE; SMG=gsmg_code[shi/10];break;//显示第7位(左边第一位) case(2): WE=0xFD;SMG=gsmg_code[shi%10]; break;//显示第6位 case(3): WE=0xFB;SMG=gsmg_code[10]; break;//显示第5位 case(4): WE=0xF7;SMG=gsmg_code[fen/10]; break;//显示第4位 case(5): WE=0xEF; SMG=gsmg_code[fen%10];break;//显示第3位 case(6): WE=0xDF;SMG=gsmg_code[10];break;//显示第2位 case(7): WE=0xBF;SMG=gsmg_code[miao/10]; break;//显示第1位 case(8): WE=0x7F;SMG=gsmg_code[miao%10]; break;//显示第0位 case(9): m=0;break; } } void t_5ms(void) interrupt 1//定时5ms,每5毫秒触发一次,用于更新秒数和刷新数码管的显示。 { TH0 = (65536-5000)/256;// TL0 = (65536-5000)%256; count++; m++; if(count==200)//5毫秒计时满200次,则1秒 { count = 0; S_Number++;//秒加1 if(S_Number>=86400)//24*60*60=86400 { S_Number = 0;//计满24小时 } shi = S_Number/3600; fen = S_Number%3600/60; miao = S_Number%60; } display(); if(key_lock==0)//按键锁定,按下不能调节时间 { while(key_lock==0); key_flag=~key_flag; } } void key_accommodation_time()//按键调节时间函数 { if(0==key_flag)//为0,秒钟 { if(T_up==0) { while(T_up==0); S_Number=S_Number+9; } else if(T_down==0) { while(T_down==0); S_Number=S_Number-2; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//非0,分钟 { if(Fen_up==0) { while(Fen_up==0); S_Number=S_Number+60; } else if(Fen_down==0) { while(Fen_down==0); S_Number=S_Number-60; } } else { if(S_Number>60) S_Number=S_Number-60; } if(0==key_flag)//时钟 { if(Shi_up==0) { while(Shi_up==0); S_Number=S_Number+3600; } else if(Shi_down==0) { while(Shi_down==0); S_Number=S_Number-3600; } } else { if(S_Number>3600) S_Number=S_Number-3600; } } void main() { TMOD = 0X01; TH0 = (65536-5000)/256;//设置定时器的初始值,用于定时5毫秒 TL0 = (65536-5000)%256; TR0 = 1;//启动定时器0 ET0 = 1;//开启定时器0的中断 EA = 1;//开启全局中断 while(1) { key_accommodation_time(); } }详细解释每句话,让我看明白

以上内容由AI搜集生成,仅供参考

在线客服