找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 7751|回復(fù): 5
收起左側(cè)

基于AT89C51的時(shí)鐘程序

[復(fù)制鏈接]
ID:15279 發(fā)表于 2009-7-14 10:26 | 顯示全部樓層 |閱讀模式
只是一個(gè)簡單的小程序。 時(shí)鐘.txt (1.2 KB, 下載次數(shù): 47)
回復(fù)

使用道具 舉報(bào)

ID:15310 發(fā)表于 2009-7-15 00:48 | 顯示全部樓層

小弟也曬曬自己的時(shí)鐘程序。。。。。。。。。。。。。。。。。

//////////////////////////////////
//工程名稱;外部秒基準(zhǔn),電子鐘表//
//單片機(jī)型號:AT98S51           //
//時(shí)鐘頻率?12M?                 //
//制作時(shí)間;2009-7-13            //
//制作者;呂貝貝                 //
//////////////////////////////////////////////////////////////////////////////////////
#include <reg51.h>
char TAB[10]={0X11,0Xbd,0X23,0X25,0X8d,0x45,0x41,0x3d,0x01,0x05};//數(shù)碼管0-9編碼
char disp[4]={0,0,0,0};//四位數(shù)碼管初始化都為零
unsigned char scan;//位數(shù)掃描寄存器
unsigned char s=0;//秒寄存器
unsigned char f=0;//分寄存器
unsigned char h=0;//時(shí)寄存器
unsigned char f1=0;//分個(gè)位寄存器
unsigned char f2=0;//分十位寄存器
unsigned char h1=0;//時(shí)個(gè)位寄存器
unsigned char h2=0;//時(shí)十位寄存器
sbit fj=P3^7;//分位加1引腳
sbit hj=P3^6;//時(shí)位加1引腳
sbit zd=P3^3;//中斷1引腳
void disp1m(int);//定義延時(shí)函數(shù)
void ff(unsigned char);//定義分位分裂函數(shù)
void fh(unsigned char);//定義時(shí)位分裂函數(shù)
////////////////////////////////////////////////////////////////////////////////////////
main()
{
  IE=0X85;//準(zhǔn)許INT0中斷,準(zhǔn)許int1中斷
  IP=0x04;//設(shè)定INT1具有最高優(yōu)先級
  TCON=0X05;//INT0設(shè)置負(fù)邊緣觸發(fā),int1設(shè)置負(fù)邊緣觸發(fā)。
  while(1)
       { 
      char i,j;
      scan=1;
   for(i=3;i>=0;i--)
      {
     j=disp;
      P1=TAB[j];
      P2=scan;
      disp1m(4);
      scan<<=1;
   }
  disp[0]=h2;//顯示時(shí)十位
  disp[1]=h1;//顯示時(shí)個(gè)位
  disp[2]=f2;//顯示分十位
  disp[3]=f1;//顯示分個(gè)位
    }
}
//////////////////////////////////////////////////////////////////////////////////////////
void my_int0(void)interrupt 0//外部中斷0,P3.2,秒脈沖輸入短,下降邊緣觸發(fā)
{
 s++;//秒寄存器加1
 if(s==60)//秒數(shù)是否到六十
   {
     s=0;//秒數(shù)清零
  f++;//分?jǐn)?shù)寄存器加1
  if(f==60)//分是否到60
    {
      f=0;//分?jǐn)?shù)清零
   h++;//時(shí)寄存器加1
   if(h==24)//時(shí)是否到24
      {
    h=0;
   }
    }
  
   }
   ff(f);//調(diào)用分位分裂函數(shù)
   fh(h);//調(diào)用時(shí)位分裂函數(shù)
   P3=255;
}
///////////////////////////////////////////////////////////////////////////////////////////
void my_int1(void)interrupt 2//外部中斷1,P3.3。時(shí)間調(diào)整輸入端下降邊緣觸發(fā)
{
  disp1m(10);//延時(shí)消除抖動
  if(zd==0)//再次判斷中斷腳位是否在低電平
    {
      if(hj==0)//判斷是時(shí)要修改
   {
        if(h==24){h=0;}else{h++;};//時(shí)加1
   }
   else if(fj==0)//判斷是分要修改
   {
        if(f==60){f=0;}else{f++;}//分加1
   }
   else {}//都不是,退出中斷,
   
    }
 P3=255;//P3腳位全部拉高,以便等待下一個(gè)中斷

}
//////////////////////////////////////////////////////////////////////////////////////////////
void ff(unsigned char y)//分位分裂函數(shù)
{
 f1=y%10;
 f2=y/10;
}
//--------------------------------------
void fh(unsigned char y)//時(shí)位分裂函數(shù)
{
 h1=y%10;
 h2=y/10;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void disp1m(x)//延時(shí)函數(shù)
{
   int i,j;
   for(i=0;i<x;i++)
      for (j=1;j<=150;j++);
}

 

回復(fù)

使用道具 舉報(bào)

ID:15320 發(fā)表于 2009-7-15 11:22 | 顯示全部樓層
可以用嗎??
回復(fù)

使用道具 舉報(bào)

ID:15320 發(fā)表于 2009-7-15 11:23 | 顯示全部樓層
不過還不錯(cuò)咯
 有注釋
  不知道能用不??
回復(fù)

使用道具 舉報(bào)

ID:15017 發(fā)表于 2009-7-15 15:49 | 顯示全部樓層
看下 謝謝
回復(fù)

使用道具 舉報(bào)

ID:253724 發(fā)表于 2017-12-19 13:02 | 顯示全部樓層
上面那個(gè)是仿真嗎
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表