熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2015-8-11 14:51
正文摘要:學(xué)習(xí)前輩的,自己再土做了個(gè)電子鐘,只是最簡單的那種,掉電沒有記憶,下次再補(bǔ)進(jìn)去,哈哈! |
做的真不錯(cuò) |
十分贊同 LZ 的觀點(diǎn),一頭霧水卻不得要領(lǐng)就失去學(xué)習(xí)意義。 |
不錯(cuò),不錯(cuò),要是能投影出來就更好了 |
還是分享源碼好。好的新朋友沒有黑幣。這樣都可以學(xué)習(xí)。個(gè)人的見解。 |
哪怕是部分也好,需要的可以自己添加或者移植,這樣學(xué)習(xí)熱情應(yīng)該高! |
有的論壇只貼HEX文件,這樣大家好累呀,想學(xué)都沒有機(jī)會(huì)------------------ |
可以可以 |
程序: #include<reg52.h> unsigned char hour,min,sec,T50ms; unsigned char modstate; //模式狀態(tài) 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); //延時(shí)子程序聲明 void display(); //顯示子程序聲明 void display s(); //顯示“時(shí)”子程序聲 void display f(); //顯示“分”子程序聲明 void kscan(); //按鍵識(shí)別子程序聲明 sbit fg=P1^3; //分鐘個(gè)位控制端 sbit fs=P1^2; //分鐘十位控制端 sbit sg=P1^1; //時(shí)鐘個(gè)位控制端 sbit ss=P1^0; //時(shí)鐘十位控制端 sbit md=P2^4; //秒燈 sbit k0=P3^7; //模式設(shè)置 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() //按鍵識(shí)別程序 { while(modstate==0) { display(); if(k0==0) { display(); if(k0==0)modstate++; //按鍵延時(shí)10ms軟件防抖設(shè)計(jì)。 while(k0==0)display s(); //等待按鍵釋放。 } } while(modstate==1) { display001(); if(k0==0) { display001(); if(k0==0)modstate++; //按鍵延時(shí)10ms軟件防抖設(shè)計(jì)。 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; //按鍵延時(shí)10ms軟件防抖設(shè)計(jì)。 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(); } } } } 結(jié)束。 |
Powered by 單片機(jī)教程網(wǎng)