|
| 做的真不錯 |
| 十分贊同 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(); } } } } 結束。 |