導航:首頁 > 操作系統 > 單片機課程設計時鍾設計

單片機課程設計時鍾設計

發布時間:2024-12-09 17:56:51

單片機課程設計!不要復制百度!高分懸賞!!

1.單片機控制的60s倒計時
這個太簡單了,不用什麼提示吧?硬體上只要單片機最小系統加上數碼管兩個,程序上只要設置好定時器就行.
2.
基於單片機的電子鍾設計
這個要復雜一點.大概要單片機+數碼管+實時時鍾晶元如DS系列(ds1302加要電池)+存儲晶元如24C02,當然驅動數碼管的如解碼器或鎖存器也要有.
實在說你第一個設計網上能找到現成的,第二個設計網上也能找到現成的,不過要你自己使用keil、proteus軟體綜合調試模擬,這兩個內容都有,自己動手網路一下吧,不要太依賴別人.畢竟這樣才能提高一下你自己.

② 單片機秒錶課程設計,急求!!!!

原理圖如下,

程序如下:

;=================================================

;寄存器分配定義

;=================================================

LED_BUF EQU 50H ;顯示數據首址

COUNTER_INT EQU 3BH ;中斷計數器

SECOND EQU 3DH ;秒單元

;=================================================

;常數定義

;=================================================

CN_COUNT_INT EQU 100 ;10ms * 100 = 1S

SET_MODEL EQU 0FFH ;完全解碼模式

SET_BRIGHT EQU 04H ;占空比為15/32;顯示亮度;

SET_LIMIT EQU 01H ;2位顯示方式;

SET_NORMAL EQU 01H ;測試模式

SET_START EQU 01H ;進入啟動工作方式?

;=================================================

;管腳分配定義

;=================================================

m7219_DIN BIT P3.0

m7219_LOAD BIT P3.1

m7219_CLK BIT P3.2

KEYSTART BIT P1.0

KEYRESET BIT P1.1

;============================================

;模擬主程序

;===========================================


org 0000h

ajmp main

ORG 000BH

LJMP Timer0Interrupt

org 0030h

main:

mov sp,#70h


lcall Init_M7219

lcall InitTimer0

; MOV SECOND,#95H ;TEST

Loop:

CALL disp

key_reset:

SETB KEYRESET

JB KEYRESET,key_start

; DELAY

NOP

NOP

NOP

JB KEYRESET,key_start

JNB KEYRESET,$

CLR TR0

MOV A,#0

MOV SECOND,A

MOV led_buf,A

MOV LED_BUF+1,A

JMP key_SCAN_END

key_start:

SETB KEYSTART

JB KEYSTART,key_SCAN_END

; DELAY

NOP

NOP

NOP

JB KEYSTART,key_SCAN_END

JNB KEYSTART,$

SETB TR0

key_SCAN_END:


JMP loop

;===========================================

InitTimer0:;10ms一次中斷

MOV TMOD,#01H

MOV TH0,#0D8H

MOV TL0,#0F0H

SETB EA

SETB ET0

RET

;===========================================

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0D8H

MOV TL0,#0F0H

;========================

INC COUNTER_INT

MOV A,COUNTER_INT ;10ms 計數值加1

CJNE A,#CN_COUNT_INT,Timer0Interrupt_EXIT

MOV COUNTER_INT,#0

MOV A,SECOND

CJNE A,#99H,Timer0Int_sec

CLR TR0;關閉計時

JMP Timer0Interrupt_EXIT

Timer0Int_sec:

ADD A,#01 ;秒加1

DA A

MOV SECOND,A

SWAP A

ANL A,#0fH

MOV led_buf,A

MOV A,SECOND

ANL A,#0FH

MOV LED_BUF+1,A

;========================

Timer0Interrupt_EXIT:

POP ACC

POP DPL

POP DPH

RETI

;====================================================

; function:Init_M7219 ;初始化max719

; input: ------------

; output: ----------

; usage: a,b

;====================================================

Init_M7219: ;初始化Max7219

MOV a,#0bh ;設置掃描界限

MOV b,#set_limit ;設置位數

lcall w_7219

MOV a,#09h ;設置解碼模式

MOV b,#set_model ;00h非解碼模式;ffh為BCD解碼模式

lcall w_7219

MOV a,#0ah ;設置亮度

MOV b,#set_bright ;15/32亮度

lcall w_7219

MOV a,#0fh ;設置工作方式

MOV b,#set_normal ;正常工作方式

lcall w_7219

MOV a,#0ch ;進入啟動工作方式

MOV b,#set_start

lcall w_7219

RET


;===================================================

; function:disp ;顯示子程序

; input: r0

; output: -----------

; usage: r0,r3,r4,a,b

;===================================================

disp:

MOV r0,#led_buf

MOV r4,#01h

MOV r3,#set_limit

INC r3

disp1:

MOV a,@r0

MOV b,a

MOV a,r4

lcall w_7219

INC r0

INC r4

djnz r3,disp1

RET


;===================================================

; function:w_7219 ;顯示驅動程序;

; input: a ;傳送7219的地址

; b ;傳送7219的數據

; output:-------------

; usage: a,r2

;====================================================

w_7219:

CLR M7219_clk

CLR M7219_din

CLR M7219_load ;置load=0

lcall sd_7219 ;傳送7219的地址

MOV a,b

lcall sd_7219 ;傳送數據

setb M7219_load ;數據裝載

CLR M7219_din

RET

;=================================================

; function:sd_7219 ;向7219傳送數據或地址子程序

; input: a

; output: max7219

; usage: a, r2

;==================================================

sd_7219: ;向7219送地址或數據

MOV r2,#08h

c_sd:

CLR C

CLR M7219_clk

RLC a

MOV M7219_din,c ;准備數據

NOP

setb M7219_clk ;上升沿將數據傳入

NOP

NOP

CLR M7219_clk

djnz r2,c_sd

RET


③ 用8031單片機做——作息時間控制鍾

把燈(電鈴)接到P1.0(串個330歐姆的電阻再接個發光二極體,代替你說的那個燈),這樣在程序裡面你就可以用SETB P1.0 和CLR P1.0來控制其亮與不亮。

P0和P2先接個8255,帶6位LED數字顯示時分秒。還可以搞個4*4的鍵盤以便修改和設置時間,這個電路圖應該在網路上到處都是,找找看,再根據需要修改一下。

如果不想用8255,可以用些鎖存晶元也可以實現LED掃描和鍵盤掃描。

至於時間和控制都是在程序裡面實現了,一時半會是編不出來的。

如果對時間的精度要求比較高,可以再外接個時鍾晶元,比如DS1302.如果要求不高,就將單片機的時鍾用軟體進行計時,不過一斷電就得重新來過了,實用性不強。

有時間探討探討。我也正想弄個類似的東西玩,不過不是做什麼課程設計了。

④ 用C語言編寫AT89C51單片機程序,設計一個智能數字鍾。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit QB1=P1^0;
sbit QB2=P1^1; //數碼管段選
sbit QB3=P1^2;
sbit QB4=P1^3;
sbit QB5=P1^4;
sbit QB6=P1^5;
sbit fm=P1^6; //蜂鳴器
sbit s1=P2^4; //s5按鍵,切換顯示
sbit s2=P2^3; //s2按鍵,設置調時
sbit s3=P2^2; //s3按鍵,加1
sbit s4=P2^1; //s4按鍵,減1

sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;

uchar count;
uchar sec,minu,hour,day,week,mon;
uchar n_sec,n_minu,n_hour;
uint year;
uchar set_2=1,set_1=1;
uchar hs,hg,mis,mig,ss,sg;
uchar nhs,nhg,nms,nmg,nss=0,nsg=0;
uchar ms,mg,ds,dg,w;
uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,
0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf}; //0~F,-,共陽
//uchar code tableyi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//0-F,-,共陰
uchar code table_d[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef}; //0~9數組,帶小數點

uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //閏年
uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非閏年

void delay(uint); //延時函數
void timer0(); //走時中斷函數
void jishi(); //計時函數
void key_change(); //切換顯示按鍵函數
void key_set(); //設置時間按鍵函數
void disp(uchar,uchar,uchar,uchar,uchar,uchar); //顯示函數
void zd_clock(); //整點報時函數
void nz_clock(); //鬧鍾函數
uchar incone(uchar); //加1函數
uchar decone(uchar); //減1函數
void set_time(); //設置時間函數
void set_clock(); //設置鬧鍾函數
void set_mdw(); //設置月日星期函數

void main() //主函數
{
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=0x4c; //50ms初值 晶振11.0592
TL0=0x00;
hour=23;minu=59;sec=49; //賦初值:11點59分0秒
n_hour=12;n_minu=56;n_sec=0; //鬧鍾賦初值12點1分0秒
year=2008;mon=5;day=14;week=3;//年月日星期賦初值2008年5月11日星期天;祝天下所有母親節日快樂
while(1)
{
hs=hour/10; //時分秒HH.MM.SS
hg=hour%10;
mis=minu/10;
mig=minu%10;
ss=sec/10;
sg=sec%10;

ms=mon/10; //月日-星期MM.DD.-W
mg=mon%10;
ds=day/10;
dg=day%10;
w=week;

nhs=n_hour/10; //鬧鍾定時HH.MM.SS
nhg=n_hour%10;
nms=n_minu/10;
nmg=n_minu%10;
nss=n_sec/10;
nsg=n_sec%10;

key_change(); //s4按鍵掃描
key_set(); //s2按鍵掃描
set_time(); //設置時間
set_mdw(); //設置月日星期
set_clock(); //設置鬧鍾
if(set_1==1) //正常走時顯示
{
disp(hs,hg,mis,mig,ss,sg);
}
if(set_1==2) //設置時間,LED1閃亮
{
disp(hs,hg,mis,mig,ss,sg);
if(sec%2==0)
{led2=1;led3=1;led1=~led1;}
// else
// {led1=1;}
}
if(set_1==3) //正常顯示月日-星期
{
disp(ms,mg,ds,dg,16,w);
}
if(set_1==4) //設置月日-星期,LED2閃亮
{
disp(ms,mg,ds,dg,16,w);
if(sec%2==0)
{led1=1;led3=1;led2=~led2;}

// else
// {led2=1;}
}

if(set_1==5) //正常顯示定時
{
disp(nhs,nhg,nms,nmg,nss,nsg);
}
if(set_1==6) //設置鬧鍾定時,LED3閃亮
{
disp(nhs,nhg,nms,nmg,nss,nsg);
if(sec%2==0)
{led1=1;led2=1;led3=~led3;}

// else
// {led3=1;}
}

zd_clock(); //整點報時
nz_clock(); //鬧鍾
}

}

void timer0() interrupt 1 //50ms中斷函數

{
TMOD=0x01;
TH0=0x4c; //50ms初值 晶振11.0592
TL0=0x00;
count++;
if(count==20)
{
count=0;
sec++;
jishi(); //調計時函數
}
}

void jishi() //計時函數
{
if(sec==60)
{
sec=0;
minu++;
if(minu==60)
{
minu=0;
hour++;
if(hour==24)
{ hour=0;
day++;
week++;
if(week==8)
{week=0;}
if(year%4==0&&year%100!=0||year%400==0) //閏年
{
if(day==table1[mon]+1)
{
day=0;
mon++;
if(mon==13)
{mon=0;year++;}
}
}
else //非閏年
{
if(day==table2[mon]+1)
{
day=0;
mon++;
if(mon==13)
{mon=0;year++;}
}
}

}
}
}
}

void key_change() //s1按鍵掃描
{
if(s1==0)
{
delay(200);
if(s1==0)
{
set_1++;
while(!s1);
if(set_1==7)
{set_1=1;}
}
}
}

void key_set() //s2按鍵掃描
{
if(s2==0)
{
delay(10);
if(s2==0)
{
set_2++;
while(!s2);
if(set_2==4)
{set_2=1;}
}
}
}
void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //顯示函數
{
QB1=1;
QB2=0;
QB3=0;
QB4=0;
QB5=0;
QB6=0;
P3=table[a1]; //段碼送P0口
delay(10); //延時一小會
QB1=0;
QB2=1;
QB3=0;
QB4=0;
QB5=0;
QB6=0;
P3=table[a2]; //第2個數碼管顯示,帶小數點
delay(10);
QB1=0;
QB2=0;
QB3=1;
QB4=0;
QB5=0;
QB6=0;

P3=table[a3]; //第3個數碼管顯示
delay(10);
QB1=0;
QB2=0;
QB3=0;
QB4=1;
QB5=0;
QB6=0;

P3=table[a4]; //第4個數碼管顯示,帶小數點
delay(10);
QB1=0;
QB2=0;
QB3=0;
QB4=0;
QB5=1;
QB6=0;

//第5個數碼管顯示
P3=table[a5];
delay(10);
QB1=0;
QB2=0;
QB3=0;
QB4=0;
QB5=0;
QB6=1;

P3=table[a6]; //第6個數碼管顯示
delay(10);
QB1=0;
QB2=0;
QB3=0;
QB4=0;
QB5=0;
QB6=0;

}

void zd_clock() //整點報時函數
{
if(minu==59&&(sec==53||sec==55||sec==57))
{
fm=0;
delay(5);
fm=1;
delay(5);
}
fm=0;
if(minu==59&&sec==59)
{
fm=0;
delay(5);
fm=1;
delay(5);
fm=0;
}
}

void nz_clock() //鬧鍾函數
{
if(hour==n_hour&&minu==n_minu&&sec==n_sec)
//if((sec%2==0)&&sec<30)
{
fm=0;
delay(1);
fm=1;
delay(1);
}
}

void set_time() //設置時間函數
{
if(set_1==2)
{
if(set_2==1)
{
hour=incone(hour);
if(hour==24)
{hour=0;}
// if(hour<0)
// {hour=23;}
hour=decone(hour);

}
if(set_2==2)
{
minu=incone(minu);
if(minu==60)
{minu=0;}
// if(minu<0)
// {minu=59;}
minu=decone(minu);

}
}
}

void set_mdw() //設置月日星期函數
{
if(set_1==4)
{
if(set_2==1)
{
mon=incone(mon);
if(mon==13)
{mon=1;}
mon=decone(mon);
// if(mon==0)
// {mon=12;}
}
if(set_2==2)
{
day=incone(day);
if(day==32)
{day=0;}
day=decone(day);
// if(day==0)
// {day=0;}
}
if(set_2==3)
{
week=incone(week);
if(week==8)
{week=0;}
week=decone(week);
// if(week==0)
// {week=7;}
}
}
}

void set_clock() //設置鬧鍾函數
{
if(set_1==6)
{
if(set_2==1)
{
n_hour=incone(n_hour);
if(n_hour==24)
{n_hour=0;}
n_hour=decone(n_hour);
if(n_hour==0)
{n_hour=0;}
}
if(set_2==2)
{
n_minu=incone(n_minu);
if(n_minu==60)
{n_minu=0;}
n_minu=decone(n_minu);
if(n_minu==0)
{n_minu=0;}
}
}

}

uchar incone(uchar n) //加1函數
{
if(s3==0)
{ delay(200);
if(s3==0)
{
n++;
while(!s3);
}
}
return(n);
}

uchar decone(uchar m) //減1函數
{
if(s4==0)
{
delay(200);
if(s4==0)
{
m--;
while(!s4);
if(m<0)
{m=0;}
}
}
return(m);
}

void delay(uint k) //延時函數
{
uint i,j;
for(i=k;i>0;i--)
for(j=80;j>0;j--);
}

⑤ 設計一個單片機秒錶,該秒錶可顯示0.0到59.9秒的時間

P3接字碼,P2接位碼。沒有加按鍵功能。

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//數碼管字型表,對應0,1,2,3,4,5,6,7,8,9//

ucharTable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uintData[2]={0,0};

dataBuffer[1]={0};

uintTIME=0;//倒計時時間

uintj;

sbitBEEP=P1^2;

sbitPoint=P3^7;

voidDelayMs(uinti)

{

for(;i!=0;i--)

{for(j=100;j!=0;j--){;}}

}

voidDisplay(uint*p)//動態顯示函數,參數p為待顯示的數組名

{

P2=0xfe;

P3=Table[p[2]];//送字型碼

DelayMs(3);

P2=0xfb;

P3=Table[p[1]];//送字型碼

Point=0;

DelayMs(3);//顯示延時

P2=0xfd;

P3=Table[p[0]];

DelayMs(3);

}

voidProcess(uinti,uint*p)

{

p[0]=i/100;

i=i%100;

p[1]=i/10;

p[2]=i%10;

}

voidmain(void)

{

EA=1;IT1=1;ET0=1;

TMOD=0x01;//T0方式1計時0.01秒

TH0=65536-5000/256;

TL0=65536-5000%256;

TR0=1;//開中斷,啟動定時器

while(1)

{

Process(TIME,Data);

Display(Data);

if(TIME>599)

{

TIME=0;

}

}

}

/*定時計數器0的中斷服務子程序*/

voidintserv1(void)interrupt1using1

{

TH0=65536-5000/256;

TL0=65536-5000%256;

Buffer[0]=Buffer[0]+1;//定時器T0的低四位賦值

if(Buffer[0]==10)//百分秒進位

{

TIME+=1;

Buffer[0]=0;

}

}

⑥ 單片機89c51的電子時鍾課程設計

#include <reg52.h>

#include<stddef.h>

#define uchar unsigned char

#define uint unsigned int

#define LCD1602_FLAG

#define LCD1602_PORT P0


sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

sbit key_ch=P3^5;

sbit key_add=P3^6;

sbit key_minus=P3^7;


uchar i,sec,min,h,date,month,flag;

uint year;

uchar *chgstr[7]={" ","sec","min","hour","date","min","year"};

uchar j,k,m,n,o,p;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar timestr[10],datestr[10];

void init();

void delay(uint);

void time_display();

void date_display();

void control();

void time();

/*

************************************

* 函數名稱:lcd1602_CheckBusy()

* 函數功能:狀態查詢

************************************

*/


void lcd1602_CheckBusy()

{

do

{

lcd1602_busy=1;

lcd1602_rs=0;

lcd1602_rw=1;

lcd1602_e=0;

lcd1602_e=1;

}

while(lcd1602_busy);

}


/*

***************************************

* 函數名稱: lcd1602_WriteCmd()

* 函數功能:寫命令

* 入口參數:命令字

* 出口參數:無

***************************************

*/


void lcd1602_WriteCmd(const uchar cmd)

{

lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}


/*

*******************************************

* 函數名稱:lcd1602_WriteData()

* 函數功能:寫數據

* 入口參數:c--待寫數據

* 出口參數:無

*********************************************

*/


void lcd1602_WriteData(const uchar c)

{

lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}


/*

***********************************************

* 函數名稱:lcd1602_Init()

* 函數功能:初始化LCD

* 入口參數:無

* 出口參數:無

***********************************************

*/


void lcd1602_Init()

{

lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣

lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

lcd1602_WriteCmd(0x06); //flag move to right,screen don't move

lcd1602_WriteCmd(0x01); //clear screen

}


/*

************************************************

* 函數名稱: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);

************************************************

*/


void lcd1602_Display(const uchar *ptr,uchar line,uchar xaddr)

{

uchar data i=0;

uchar *data q;


q=ptr;

switch(line)

{

case 0:

lcd1602_WriteCmd(0x80+xaddr);

while(q!=NULL && (*q!='') && i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

case 1:

lcd1602_WriteCmd(0xc0+xaddr);

while(q!=NULL && (*q!='') && i<16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

}

}



void main()

{

lcd1602_Init();

init();

while(1)

{

time_display();

date_display();

control();

}

}

void init()

{

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;

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void time_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);

}

void date_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);

}

void control()

{

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;

}

}


void T0_rpt() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

time();

}


void time()

{

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++;

}

}

}

}

}

}

}

閱讀全文

與單片機課程設計時鍾設計相關的資料

熱點內容
精品php源碼 瀏覽:954
自己編寫雲伺服器搶紅包 瀏覽:199
java解壓縮文件加密 瀏覽:882
dlink列印伺服器默認地址 瀏覽:347
php休眠函數 瀏覽:365
金蝶如何打開伺服器 瀏覽:760
e4a手游輔助源碼 瀏覽:772
什麼app可以實時直播 瀏覽:102
蘋果13的app閃退什麼原因 瀏覽:770
尾盤選股源碼公式 瀏覽:445
php日期運算 瀏覽:928
天龍八部長歌伺服器什麼時候開的 瀏覽:197
鬼泣4模型在那個文件夾 瀏覽:226
單片機的串列口 瀏覽:55
phpjson轉化為數組 瀏覽:265
pdf導入excel 瀏覽:425
蘋果xsmax信任app在哪裡設置 瀏覽:50
自動外鏈php源碼 瀏覽:242
我的世界新手獎勵箱命令 瀏覽:142
linux更新vim 瀏覽:995