做的真不错 |
十分赞同 LZ 的观点,一头雾水却不得要领就失去学习意义。 |
不错,不错,要是能投影出来就更好了 |
还是分享源码好。好的新朋友没有黑币。这样都可以学习。个人的见解。 |
哪怕是部分也好,需要的可以自己添加或者移植,这样学习热情应该高! |
有的论坛只贴HEX文件,这样大家好累呀,想学都没有机会------------------ |
可以可以 |
程序: #include<reg52.h> unsigned char hour,min,sec,T50ms; unsigned char modstate; //模式状态 unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//段码P0口 void init(); //初始化子程序声明 void delay500us(unsigned char X); //延时子程序声明 void display(); //显示子程序声明 void display s(); //显示“时”子程序声 void display f(); //显示“分”子程序声明 void kscan(); //按键识别子程序声明 sbit fg=P1^3; //分钟个位控制端 sbit fs=P1^2; //分钟十位控制端 sbit sg=P1^1; //时钟个位控制端 sbit ss=P1^0; //时钟十位控制端 sbit md=P2^4; //秒灯 sbit k0=P3^7; //模式设置 sbit k1=P3^6; //加 sbit k2=P3^5; //减 void main() { init(); while(1) { kscan(); } } void init() //初始化子程序 { TMOD=0x01; TH0=(65536-49990)/256; TL0=(65536-49990)%256; ET0=1; EA=1; TR0=1; } void delay500us(unsigned char X) { unsigned char i,j; for(i=X;i>0;i--) for(j=248;j>0;j--); } void timer0() interrupt 1 { TMOD=0x01; TH0=(65536-49990)/256; TL0=(65536-49990)%256; T50ms++; if(T50ms>=20) { T50ms=0; sec++; if(sec>=60) { sec=0; min++; if(min>=60) { min=0; hour++; if(hour>=24)hour=0; } } } } void display() { P1=0xff; P0=table[hour/10]; ss=0; delay500us(5); P1=0xff; P0=table[hour%10]; sg=0; delay500us(5); P1=0xff; P0=table[min/10]; fs=0; delay500us(5); P1=0xff; P0=table[min%10]; fg=0; delay500us(5); if(T50ms<=10) md=0; if(T50ms>10) md=1; } void display001() { P1=0xff; P0=table[hour/10]; ss=0; delay500us(10); P1=0xff; P0=table[hour%10]; sg=0; delay500us(10); } void display002() { P1=0xff; P0=table[min/10]; fs=0; delay500us(10); P1=0xff; P0=table[min%10]; fg=0; delay500us(10); } void kscan() //按键识别程序 { while(modstate==0) { display(); if(k0==0) { display(); if(k0==0)modstate++; //按键延时10ms软件防抖设计。 while(k0==0)display s(); //等待按键释放。 } } while(modstate==1) { display001(); if(k0==0) { display001(); if(k0==0)modstate++; //按键延时10ms软件防抖设计。 while(k0==0)display f(); //等待按键释放。 } if(k1==0) { display001(); if(k1==0) { hour++; if(hour>=24)hour=0; while(k1==0)display s(); } } if(k2==0) { display s(); if(k2==0) { hour--; if(hour>=24)hour=0; while(k2==0)display s(); } } } while(modstate==2) { display f(); if(k0==0) { display f(); if(k0==0)modstate=0; //按键延时10ms软件防抖设计。 while(k0==0)display(); //等待按键释放。 } if(k1==0) { display f(); if(k1==0) { min++; if(min>=60)min=0; while(k1==0)display f(); } } if(k2==0) { display f(); if(k2==0) { min--; if(min>=60)min=0; while(k2==0)display f(); } } } } 结束。 |