wubingbing 发表于 2018-11-21 09:19 #include<reg51.h> #define char unsigned char char code dis_7[12] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xb2,0xf8,0x80,0x90,0xff,0xbf}; char code scan_con[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; char data dis[8] = {0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00}; char data timedata[3] = {0x00,0x00,0x00}; char data ms50=0x00, con=0x00, con1=0x00, con2=0x00; sbit key0 = P1^0; sbit key1 = P1^1; sbit key2 = P1^2; delaylms(int t) { int i,j; for(i=0;i<t;i++) for(j=0;j<120;j++) ; } keyscan() { EA=0; if(key0 == 0) { delaylms(10); while(key0 == 0); con++;TR0=0;ET0=0; if(con >= 3) {con=0;TR0=0;ET0=0;} } if(con != 0) { if(key1 == 0) { delaylms(10); while(key1 == 0); timedata[con]++; if(con == 2) con1=24; else con1=60; if(timedata[con] >= con1) {timedata[con] = 0;} } } if(con != 0) { if(key2 == 0) { delaylms(10); while(key2 == 0); timedata[con]--; if(con == 2) con2=23; else con2=59; if(timedata[con] <= 0) {timedata[con] = con2;} } } EA=1; } scan() { char k; dis[0]=timedata[0]%10; dis[1]=timedata[0]/10; dis[3]=timedata[1]%10; dis[4]=timedata[1]/10; dis[6]=timedata[2]%10; dis[7]=timedata[2]/10; for (k=0;k<8;k++) { P0=dis_7[dis[k]]; P2=scan_con[k]; delaylms(1); P2=0xff; } } main() { TH0=0x3c; TL0=0xb0; TMOD=0x01; ET0=1; TR0=1; EA=1; while(1) { scan(); keyscan(); } } void time_intt0(void) interrupt 1 { ET0=0; TR0=0; TH0=0x3c; TL0=0xb0; TR0=1; ms50++; if(ms50 == 20) { ms50=0x00; timedata[0]++; if(timedata[0] == 60) { timedata[0]=0; timedata[1]++; if(timedata[1] == 60) { timedata[1]=0; timedata[2]++; if(timedata[2] == 24) {timedata[2] = 0; } } } } ET0 = 1; } |
HC6800-ES-V2.0 发表于 2018-11-21 09:11 #include<reg51.h> #define char unsigned char char code dis_7[12] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xb2,0xf8,0x80,0x90,0xff,0xbf}; char code scan_con[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; char data dis[8] = {0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00}; char data timedata[3] = {0x00,0x00,0x00}; char data ms50=0x00, con=0x00, con1=0x00, con2=0x00; sbit key0 = P1^0; sbit key1 = P1^1; sbit key2 = P1^2; delaylms(int t) { int i,j; for(i=0;i<t;i++) for(j=0;j<120;j++) ; } keyscan() { EA=0; if(key0 == 0) { delaylms(10); while(key0 == 0); con++;TR0=0;ET0=0; if(con >= 3) {con=0;TR0=0;ET0=0;} } if(con != 0) { if(key1 == 0) { delaylms(10); while(key1 == 0); timedata[con]++; if(con == 2) con1=24; else con1=60; if(timedata[con] >= con1) {timedata[con] = 0;} } } if(con != 0) { if(key2 == 0) { delaylms(10); while(key2 == 0); timedata[con]--; if(con == 2) con2=23; else con2=59; if(timedata[con] <= 0) {timedata[con] = con2;} } } EA=1; } scan() { char k; dis[0]=timedata[0]%10; dis[1]=timedata[0]/10; dis[3]=timedata[1]%10; dis[4]=timedata[1]/10; dis[6]=timedata[2]%10; dis[7]=timedata[2]/10; for (k=0;k<8;k++) { P0=dis_7[dis[k]]; P2=scan_con[k]; delaylms(1); P2=0xff; } } main() { TH0=0x3c; TL0=0xb0; TMOD=0x01; ET0=1; TR0=1; EA=1; while(1) { scan(); keyscan(); } } void time_intt0(void) interrupt 1 { ET0=0; TR0=0; TH0=0x3c; TL0=0xb0; TR0=1; ms50++; if(ms50 == 20) { ms50=0x00; timedata[0]++; if(timedata[0] == 60) { timedata[0]=0; timedata[1]++; if(timedata[1] == 60) { timedata[1]=0; timedata[2]++; if(timedata[2] == 24) {timedata[2] = 0; } } } } ET0 = 1; } |
本帖最后由 zl2168 于 2018-11-21 22:58 编辑 给你介绍一个参考案例,自己去琢磨吧! 实例94 模拟电子钟(由80C51定时器产生秒时基) ![]() ![]() 先Proteus仿真一下,确认有效。 ![]() 以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。 |
这样不能编辑还是把源码发出来比较好 |
读你的程序好费眼睛的。 直接发程序出来,还可以在我的电脑上编译,我的板子上试验找问题。 |