當前位置:編程學習大全網 - 編程語言 - 求程序用AT89C51單片機......用六位數碼管實現數字時鐘,顯示時分秒,用兩個按鍵可分別調整時、分。

求程序用AT89C51單片機......用六位數碼管實現數字時鐘,顯示時分秒,用兩個按鍵可分別調整時、分。

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar temp,aa,miao,fen,shi;

sbit m=P3^0;

sbit n=P3^1;

uchar code table[]={ //數碼管編碼表

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

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

0x7f,0x6f};

void display(uchar miao,uchar fen,uchar shi);

void delay(uint z);

void init();

void main()

{

init();//初始化子程序

miao=0;

shi=0;

fen=0;

while(1)

{

display(miao,fen,shi);

}

}void delay(uint z)

{

uint x,y;

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

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

}void display(uchar miao,uchar fen,uchar shi) // 顯示子函數

{

P0=0x00;

P0=table[miao%10];

P2=0x7f;

delay(1);

P0=0x00;

P0=table[miao/10];

P2=0xbf;

delay(1); P0=0x00;

P0=table[fen%10];

P2=0xdf;

delay(1);

P0=0x00;

P0=table[fen/10];

P2=0xef;

delay(1);

P0=0x00;

P0=table[shi%10];

P2=0xf7;

delay(1); P0=0x00;

P0=table[shi/10];

P2=0xfb;

delay(1);

}void init() // 初始化子函數

{

temp=0;

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256; //定時器初值,定時50ms(12M晶振),由於考慮MCU指令處理時間,此處賦初值位45872

EA=1;

ET0=1;

TR0=1;

}void timer0() interrupt 1 //定時計數器中斷

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256; 、

aa++;

if(aa==20) //中斷2次位1S,秒加1

{

miao++;

aa=0;

if(miao==60)

{

fen++; // 滿60S, 分加1,秒清0

miao=0;

if(fen==60)

{

shi++; // 小時加1

fen=0;

if(shi==24) shi=0; //小時滿

}

}

}

if(m==0) // 調分

{

delay(2);

if(m==0) fen++;

if(fen==60) fen=0;

delay(2);

while(!m);

}

if(n==0) // 調小時

{

delay(2);

if(n==0) shi++;

if(shi==24) shi=0;

delay(2);

while(!n);

}

}

  • 上一篇:壹個沒學過音樂的人學習FL Studio水果音樂制作軟件需要多久?
  • 下一篇:創建多線程有幾種方法
  • copyright 2024編程學習大全網