導航:首頁 > 操作系統 > 簡易時鍾單片機

簡易時鍾單片機

發布時間:2023-09-09 04:50:14

⑴ 用單片機設計一個時鍾,可顯示時和分,可以調時間,也要有鬧鍾功能,要有設計的電路圖

其實不用定時中斷也能實現功能:
#include<reg51.h> 主函數
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定義0-9數組
unsigned int tmp;定義變數
void delay(unsigned int xms)定義延時函數
{unsigned int j,i;
for(i=0;i<xms;i++)
for(j=0;j<100;j++);
}
void disp()定義子函數
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp<<1;
}
void main( )
{

unsigned char z,s=00,m=00,h=00;給時鍾初始值
while(1)
{
for(z=0;z<100;z++)
{
tmp=0x01;
P2=tab[h/10];小時顯示

disp();
P2=tab[h%10];

disp();
P2=tab[m/10];分鍾顯示

disp();
P2=tab[m%10];

disp();
P2=tab[s/10];秒顯示

disp();
P2=tab[s%10];

disp();

}
s++;
while(s==60)秒進一位,到60清0
{
m++;
s=00;
}
while(m==60)分鍾進一位,到60清0

{
h++;
m=00;
}
while(h==24)小時進一位,到24清0
{
h=00;
}

}

}

⑵ 如何用51單片機製作簡易電子鍾

我自己做的一個課程設計,程序運行已經成功了:

編程序如下:

ORG0000H

AJMPmain

ORG000BH;定時器0的中斷向量地址

AJMPTIME0;跳轉到真正的定時器程序處

ORG30H

main:

movdptr,#k1;

start:

MOVP0,#00H;中斷預處理程序

MOVP1,#00H

MOVP3,#00H;關所有燈

MOVR0,#00H;軟體計數器預清0

MOVR7,#00H

MOVR6,#00H

MOVTMOD,#00000001B;定時/計數器0工作於方式1

MOVTH0,#3CH

MOVTL0,#0B0H;即數15536

SETBEA;開總中斷允許

SETBET0;開定時/計數器0允許

SETBTR0;定時/計數器0開始運行

LOOP:;判斷時鍾進位程序

MOVA,R1

CJNEA,#60,LOOP1;R1等於60嗎?

MOVR1,#0

INCR2;R1等於60那麼R2加一,R1清0

MOVA,R2

CJNEA,#60,LOOP1;R2等於60嗎?

MOVR2,#0

INCR3;R2等於60那麼R3加一,R2清0

MOVA,R3

CJNEA,#24,LOOP1;R3等於24嗎?

MOVR3,#0

;R3等於24那麼R3清0

LOOP1:

mova,r2;如果分鍾顯示為0,報警

cjnea,#01H,LOOP2

mova,r1

cjnea,#00H,LOOP3

clrp2.0

LOOP3:

mova,r1;如果秒鍾顯示為1,取消報警

cjnea,#05H,LOOP2

setbp2.0

LOOP2:;顯示數據處理

MOVA,R1;取來8位二進制數

MOVB,#100

DIVAB;除以100

MOVA,B;取回余數

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位數,存放到R4

MOVR5,B;余數是個位,存放到R5

MOV42H,R4

mOV41H,R5

;R1的BCD碼放入41-42H單元

MOVA,R2;取來8位二進制數

MOVB,#100

DIVAB;除以100

MOVA,B;取回余數

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位數,存放到R4

MOVR5,B;余數是個位,存放到R5

MOV44H,R4

MOV43H,R5

;R2的BCD碼放入43-44H單元

MOVA,R3;取來8位二進制數

MOVB,#100

DIVAB;除以100

MOVA,B;取回余數

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位數,存放到R4

MOVR5,B;余數是個位,存放到R5

MOV46H,R4

mov45H,R5

;R3的BCD碼放入45-46H單元

L1:

mova,41h

movca,@a+dptr

mov51h,a

mova,42h

movca,@a+dptr

mov52h,a

mova,43h

movca,@a+dptr

mov53h,a

mova,44h

movca,@a+dptr

mov54h,a

mova,45h

movca,@a+dptr

mov55h,a

mova,46h

movca,@a+dptr

mov56h,a;將顯示代碼送入51H--56H

display:;顯示程序

movp0,#0ffH;一

movp0,51H

movP1,#0feH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;二

movp0,52h

movP1,#0fdH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;三

movp0,53h

movP1,#0fbH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;四

movp0,54h

movP1,#0f7H

acalldelay1S

movp1,#0ffH

movp0,#0ffH;五

movp0,55h

movP1,#0efH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;六

movp0,56h

movP1,#0dfH

acalldelay1S

movp1,#0ffH

;將51H-56H數據顯示,

AJMPLOOP;工作處理程序

TIME0:;定時器0的中斷處理程序

INCR7

MOVA,R7

CJNEA,#20,T_RET;R7單元中的值到了20了嗎?

T_L1:

INCR1;到了20那麼R1+1

MOVR7,#0;清軟體計數器

T_RET:;二十分之一秒時的程序

incr6

mova,r6

cjner6,#3,T_over;調節時間的延遲時間

movr6,#0

jbp2.1,T_over1

mova,r2

adda,#1

cjnea,#60,T_tiao1

mova,#0

T_tiao1:

movr2,a

T_over1:

jbp2.2,T_over

mova,r3

adda,#1

cjnea,#24,T_tiao2

mova,#0

T_tiao2:

movr3,a

T_over:

MOVTH0,#3CH

MOVTL0,#0B0H;如果沒到一秒重置定時常數

reti

delay1s:MOV31H,#100

D1:MOV32H,#30

D2:DJNZ32H,D2

DJNZ31H,D1

RET

delay2s:MOV33H,#255

D3:MOV34H,#255

D4:DJNZ34H,D4

DJNZ33H,D3

RET

K1:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

⑶ 單片機C語言編程簡易數字電子時鍾

#include <AT89X52.h>
unsigned char X=10,sec,flag;
unsigned char key[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 數碼管顯示數字表
unsigned char key2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char key1[]={0,0,0,0};//key1[0]=9 key1[1]=1 key1[2]=2 key1[3]=3
void delay02s(void);
void dislplay(void);
void dislplay1(void);
void tim1(void);
void main()
{

tim1();
while(1)
{
if(flag==0) dislplay();
else dislplay1();
}
}

void time1(void) interrupt 3
{
TR1=0;
X=X-1;
if(X==0)
{
flag=flag+1;
if(flag==2)
{
flag=0;
sec=sec+1;

if(sec==60)
{
sec=0;
key1[3]=key1[3]+1;
if(key1[3]==10);
{
key1[3]=0;
key1[2]=key1[2]+1;
if(key1[2]==6)
{
key1[2]=0;
key1[1]=key1[1]+1;
if(key[0]!=2)
{
if(key1[1]==10)
{
key1[1]=0;
key1[0]=key1[0]+1;
}
}
if(key[0]==2)
{
if(key[1]==4)
{
key1[1]=0;
key1[0]=0;
}
}
}
}
}
}
X=10;
}

TL1=0xb0;
TH1=0x3c;
TF1=0;
TR1=1;
}

void tim1(void)
{
TMOD =0X10;
TL1=0xb0;
TH1=0x3c;
EA=1;
ET1=1;
TR1=1;
}

void dislplay(void)
{
P2=0xfe;
P0=key[key1[0]];
delay02s();
P2=0xfd;
P0=key[key1[1]];
delay02s();
P2=0xfb;
P0=key[key1[2]];
delay02s();
P2=0xf7;
P0=key[key1[3]];
delay02s();
}
void dislplay1(void)
{
P2=0xfe;
P0=key[key1[0]];
delay02s();
P2=0xfd;
P0=key2[key1[1]];
delay02s();
P2=0xfb;
P0=key[key1[2]];
delay02s();
P2=0xf7;
P0=key[key1[3]];
delay02s();
}
void delay02s(void)
{
unsigned char i,j,k;
for(i=2;i>0;i--)
{
for(j=15;j>0;j--) //198
{
for(k=25;k>0;k--)//248
{
;
}
}

}
}
我空間還有其他的 http://user.qzone.qq.com/615543707/infocenter?ptlang=2052&ADUIN=615543707&ADSESSION=1276219802&ADTAG=CLIENT.QQ.2653_Mysrv.0

⑷ 利用AT89C51單片機設計簡易電子鍾(六位),通過8位LED數碼管實現時間顯示;系統可以通過三個按鍵實現時間


程序設計思路:1.利用單片機內部定時器作為計時器,調用timer函數;2、設計一套按鍵子程序;(3)設計一套數碼顯示管子程序。下列提供一套程序供參考。


#include<iom16v.h>

#include <macros.h>

#define uchar unsigned char

#define uint unsigned int


const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9對應字元

const uchar key_value[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

uchar data[4]={0}; //顯示初始值為0

uint count=0; //初始計數值為0

uchar keynum;



void port_init() //埠初始化函數

{DDRA=0XFF; //埠A為推挽1輸出

PORTA=0XFF;

PORTB=0XFF; //埠B為推挽1輸出

DDRB=0XFF;

DDRC=0XFF; //埠C為不帶上拉電阻的輸入

PORTC=0XFF;

DDRD=0XFF; //埠D低4位為輸出

PORTD=0X0F;

}



void delay(uint j) //延時函數

{uint k;

while(j--)

{for(k=1000;k>0;k--) ;}

}



void display(uchar *p) //顯示函數

{uchar i,sel=0x01;

for(i=0;i<4;i++)

{PORTA=sel; //選通最右邊的數碼管

PORTB=table[p[i]]; //送字型碼

delay(1);

sel=sel<<1; //左移一位

}

}



uchar get_key(void)

{if((PIND&0X0F)!=0X0F) delay(3);

{

PORTD=0XEF;

switch(PIND&0X0F)

{case 0x0e: keynum=key_value[0];break;

case 0x0d: keynum=key_value[4];break;

case 0x0b: keynum=key_value[8];break;

case 0x07: keynum=key_value[12];break;

default:break;

}

PORTD=0xdf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[1];break;

case 0x0d:keynum=key_value[5];break;

case 0x0b:keynum=key_value[9];break;

case 0x07:keynum=key_value[13];break;

default:break;

}


PORTD=0xbf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[2];break;

case 0x0d:keynum=key_value[6];break;

case 0x0b:keynum=key_value[10];break;

case 0x07:keynum=key_value[14];break;

default:break;

}

PORTD=0x7f;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[3];break;

case 0x0d:keynum=key_value[7];break;

case 0x0b:keynum=key_value[11];break;

case 0x07:keynum=key_value[15];break;

default:break;

}

while((PIND&0x0f)!=0x0f);

}


return keynum;

}


void process(uint i,uchar *q) //拆分BCD碼函數,顯示千、百、十、個位

{ q[0]=i/1000;

i=i%1000;

q[1]=i/100;

i=i%100;

q[2]=i/10;

i=i%10;

q[3]=i;

}


void main(void)

{port_init();

PORTB=0xff;

PORTA=0X00;

delay(50);

PORTA=0xff;

while(1)

{get_key();

count=keynum;

process(count,data);

display(data);

}

}

⑸ 如何做一個單片機電子時鍾

這個很簡單啊,兩種思路:1,用單片機定時器來做,優點是外圍電路簡單,只需要一個單片機最小系統,和一個顯示模塊(1602液晶比較好);缺點是:定時不是很准,跑的時間長了會有誤差,而且主要是程序,要寫很多,不過程序不是很難。2,用時鍾晶元,一般都用DS1302,還需要單片機最小系統和顯示模塊,優點是:定時准確,誤差很小,在有備用電池的情況下,即使單片機掉電,也可以維持很長時間,程序相對簡單。缺點是:外圍電路比前者相對復雜一點。如果想做個實際的東西拿來用,建議使用第二種方法,如果是想鍛煉自己的編程能力的話,選第一種吧。祝成功!

⑹ 誰能告訴我51單片機簡單的led數碼管時鍾程序 24小時制的(c語言版的)

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位碼
P0=(tab[shi/10]); //段碼
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位碼
P0=0x40; //段碼
delay(2);
P2=3; //位碼
P0=(tab[fen/10]); //段碼
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位碼
P0=0x40; //段碼
delay(2);
P2=6; //位碼
P0=(tab[miao/10]); //段碼
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*還有什麼不明白繼續追加*/

⑺ 求一個簡單的單片機時鍾程序

#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsignedcharsec=0,min=0,hour=0,scanled;
unsignedcharkey,time;
unsignedchardisdat[6];
sbitK=P1^0;
voiddischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒計時
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
dischg();
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=0;
min=0;
hour=0;
scanled=0;
time=0;
key=0;
dischg();
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=2;
}
switch(key)
{
case0:
TR0=1;
break;
case1:
TR0=0;
break;
}
}
}

⑻ 51單片機簡單電子時鍾程序,通過按鍵設置時間,有圖,有解析!

#include<reg52.h>
#include<stddef.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD1602_FLAG
#defineLCD1602_PORTP0

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;
sbitkey_ch=P3^5;
sbitkey_add=P3^6;
sbitkey_minus=P3^7;

uchari,sec,min,h,date,month,flag;
uintyear;
uchar*chgstr[7]={"","sec","min","hour","date","min","year"};
ucharj,k,m,n,o,p;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchartimestr[10],datestr[10];
voidinit();
voiddelay(uint);
voidtime_display();
voiddate_display();
voidcontrol();
voidtime();
/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline,ucharxaddr)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}


voidmain()
{
lcd1602_Init();
init();
while(1)
{
time_display();
date_display();
control();
}
}
voidinit()
{
i=0;
sec=0;
min=30;
h=7;
date=17;
month=10;
year=2017;
flag=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtime_display()
{
timestr[7]=0x30+sec%10;
timestr[6]=0x30+sec/10;
timestr[5]=':';
timestr[4]=0x30+min%10;
timestr[3]=0x30+min/10;
timestr[2]=':';
timestr[1]=0x30+h%10;
timestr[0]=0x30+h/10;
timestr[8]=0;
lcd1602_Display(timestr,1,3);
}
voiddate_display()
{
datestr[9]=0x30+date%10;
datestr[8]=0x30+date/10;
datestr[7]=':';
datestr[6]=0x30+month%10;
datestr[5]=0x30+month/10;
datestr[4]=':';
datestr[3]=0x30+year%10;
datestr[2]=0x30+year/10%10;
datestr[1]=0x30+year/100%10;
datestr[0]=0x30+year/1000;
lcd1602_Display(datestr,0,2);
}
voidcontrol()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
TR0=0;
if(flag==7)
{flag=0;TR0=1;lcd1602_Init();}
lcd1602_Display(chgstr[flag],1,12);
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}

if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}

if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}

if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}

if(flag==4&&key_minus==0)
{
while(!key_minus);
if(date>1)date--;
}

if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}

if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}

voidT0_rpt()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}

voidtime()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}

⑼ 51單片機做數字電子鍾

這么復雜的東西給這么少分 暈死了 你也太小氣了吧,分多的話還可能幫你動動腦

⑽ 利用51單片機和3位數碼管實現10分鍾內的簡易計時器

修改如下:
#include<reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbitkey1=P2^7;
sbitkey2=P2^6;
sbitweiH=P3^0;
sbitweiM=P3^1;
sbitweiL=P3^2;
uintnum=0,ge=0,shi=0,fen=0,k;//num用來計數,ge為各位顯示,shi為十位顯示,fen為分鍾顯示

voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--) //i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}

ucharkey1scan(void)
{if(key1==0)
{delayms(10);
if(key1==0)
{while(!key1);
return1;
}
return0;
}

ucharkey2scan(void)
{if(key2==0)
{delayms(10);
if(key2==0)
{while(!key2);
return1;
}
}
return0;
}

voidshowtime()interrupt1//時間顯示
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
num%=3;
switch(num)
{
case0:
weiL=1;//顯示秒的個位
P1=0xff;
P1=table[ge];
delayms(5);
weiL=0;
break;
case1:
weiM=1;//顯示秒的十位
P1=0xff;
P1=table[shi];
delayms(5);
weiM=0;
break;
case2:
weiH=1;//顯示分鍾,只顯示0-9
P1=0xff;
P1=table[fen];
delayms(5);
weiH=0;
break;
}

voidmain()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
num=0;
while(1)
{
if((key1scan()==1)&&(key2scan()!=1))break;//按鍵1按下,按鍵2未按下開始計時
}
while(1)
{
delay(1000);
ge++;
if(ge>9)
{
ge=0;
shi++
if(shi>5)
{
fen++;
if(fen>9)fen=0;
}
}
showtime();
}
}

閱讀全文

與簡易時鍾單片機相關的資料

熱點內容
大話存儲pdf 瀏覽:520
中銘機器人怎麼編程 瀏覽:812
把字母變為數字的加密法 瀏覽:523
噬血狂襲第三季哪個app能看 瀏覽:421
江蘇螺桿壓縮機 瀏覽:980
android底部彈出對話框 瀏覽:501
怎麼查伺服器同行fc號 瀏覽:999
什麼伺服器雲鳥最便宜 瀏覽:220
vs編譯器反匯編 瀏覽:570
程序員直播做項目創業 瀏覽:403
linux下samba配置 瀏覽:797
程序員面試銀行崗位會有編制嗎 瀏覽:414
ex表怎麼加密碼保護 瀏覽:173
小孩上編程課用哪款好 瀏覽:559
如何製作伺服器商店 瀏覽:735
壓縮氣管閥門 瀏覽:465
pdf推文 瀏覽:360
69程序員 瀏覽:583
阿里雲伺服器鏡像如何遷移到騰訊 瀏覽:991
安卓如何顯示日期在狀態欄 瀏覽:807