專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

stc電子表c51程序V2.0

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年01月14日   【字體:

   電路很簡(jiǎn)單我就不畫了,是stc系列的單片機(jī)做的,顯示部分就是2個(gè)74hc573芯片連到P1口,然后用p3.0控制段選,按鍵的定義程序里有說明。很容易就能搭出來,下圖是效果圖,自己用萬用板焊的,技術(shù)不行。到處都是飛線呵呵,請(qǐng)大家多多指教

程序的c51語言完整版本的下載地址:http://www.torrancerestoration.com/f/biaoc4.rar
 

#include<stc90.h>
#define uchar unsigned char
#define uint unsigned int
uchar d0,ss,gs,sf,gf,sm,gm;
uchar e1,e2,e3,e4,e5,e6;
uchar s1,q1;
uchar shi,fen,miao;
// 8 4 2 1 8 4 2 1  
// h g f e d c b a
//效正 累加數(shù)98 跑1320秒 實(shí)際1316
//當(dāng)前已走秒數(shù) 乘以 當(dāng)前累加數(shù) 除以除以實(shí)際秒數(shù) 等于 累加數(shù)應(yīng)得值
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//0-9 點(diǎn)
uchar code wes[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x7f};//1-8位
sbit dua=P3^0;
sbit laba=P3^1;
sbit a1=P3^2;//時(shí)間設(shè)置
sbit a2=P3^3;//鬧鐘設(shè)置
sbit a3=P3^4;//按鍵+
sbit a4=P3^5;//按鍵-
sbit a5=P3^7;//返回 啟動(dòng)鬧鐘
void weiduan(uchar z,uchar x); //位段 函數(shù)
void chushi();    //初始化函數(shù)
void shijian();   //時(shí)間顯示函數(shù)
void shjianbata();//測(cè)試時(shí)間函數(shù)
void shezhi();    //時(shí)間設(shè)置函數(shù)
void naozhong();  //鬧鐘這是函數(shù)
void shu();       //時(shí)間最大值限制函數(shù)
void delay(uchar d1);//延時(shí)函數(shù)

//.....................................................................................
void main()
{ chushi(); //初始化時(shí)間
  TH0=(65535-40000)/256;//定時(shí)器裝初值
  TL0=(65535-40000)%256;
  ET0=1;//開定時(shí)器0中斷
  TR0=1;//啟動(dòng)定時(shí)器0
  EA=1; //打開總中斷
  laba=1;
while(1)
{  
 shijian(); //調(diào)用時(shí)間顯示函數(shù) 顯示時(shí)間 
 if(a1==1){if(a2==1){if(a3==1){if(a4==1){ weiduan(1,10);delay(5);weiduan(3,10);delay(5);weiduan(5,10);delay(5); }}}}
 if(a1==0){delay(100);if(a1==0){shezhi();}}
 if(a2==0){delay(100);if(a2==0){naozhong();}}//調(diào)用鬧鐘設(shè)置函數(shù)
 if(a5==0){delay(100);{if(a5==0){while(1){if(q1==0){q1=1;break;}else{q1=0;break;}}while(a5==0);delay(100);}}}
 if(a2==0){delay(100);if(a2==0){naozhong();}    }
 if(q1==1){weiduan(6,0);delay(20);if(fen==e2){if(shi==e1){laba=0;}}if(fen!=e2){laba=1;}  }
 else{laba=1;}
 
  
}
}
//.....................................................................................
void naozhong()
{while(1)
{   ss=e1/10;
    gs=e1%10;  
    sf=e2/10;
    gf=e2%10;   
    sm=e3/10;
    gm=e3%10;
  delay(10);
 weiduan(0,ss);delay(10);
 weiduan(1,gs);delay(10);
 weiduan(2,sf);delay(10);     
 weiduan(3,gf);delay(10);
 weiduan(4,sm);delay(10);
 weiduan(5,gm);delay(10);

if(a1==0){delay(100);if(a1==0){while(a1==0);delay(20);break;}}
 
if(a2==0){delay(100);while(a2==0);delay(20);s1++;}
if(s1==3){s1=0;}
if(s1==1){weiduan(0,10);delay(5);weiduan(1,10);delay(5);
if(a3==0){delay(20);if(a3==0){e1++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){e1--;}while(a4==0);delay(100);}
}
if(s1==2){weiduan(2,10);delay(5);weiduan(3,10);delay(5);
if(a3==0){delay(20);if(a3==0){e2++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){e2--;}while(a4==0);delay(100);}
}
if(s1==0){weiduan(4,10);delay(5);weiduan(5,10);delay(5);
if(a3==0){delay(20);if(a3==0){e3++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){e3--;}while(a4==0);delay(100);}
}

}


}
//.....................................................................................
void shezhi()//時(shí)間設(shè)置函數(shù)
{while(1)
{   
    ss=shi/10;
    gs=shi%10;  
    sf=fen/10;
    gf=fen%10;   
    sm=miao/10;
    gm=miao%10;
shijian();

if(a2==0){delay(100);if(a2==0){while(a2==0);delay(20);break;}}
if(a1==0){delay(100);while(a1==0);delay(20);s1++;}
if(s1==3){s1=0;}
if(s1==1){weiduan(0,10);delay(5);weiduan(1,10);delay(5);
if(a3==0){delay(20);if(a3==0){shi++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){shi--;}while(a4==0);delay(100);}
}
if(s1==2){weiduan(2,10);delay(5);weiduan(3,10);delay(5);
if(a3==0){delay(20);if(a3==0){fen++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){fen--;}while(a4==0);delay(100);}
}
if(s1==0){weiduan(4,10);delay(5);weiduan(5,10);delay(5);
if(a3==0){delay(20);if(a3==0){miao++;}while(a3==0);delay(100);}
if(a4==0){delay(20);if(a4==0){miao--;}while(a4==0);delay(100);}
}

}}
//.....................................................................................
void zhongduan() interrupt 1   //定時(shí)器中斷函數(shù)體
{  TH0=(65535-40400)/256;
   TL0=(65535-40400)%256;


  if(e3>=60)//判斷秒等于或超過60
  {e2++;   //分鐘加1
  e3=0;}   //秒數(shù)清零

  if(e2>=60) //判斷分鐘等于或超過60
  {e1++;   //小時(shí)加1
  e2=0;}   //分鐘數(shù)清零

  if(e1>=24) //判斷小時(shí)等于或大于24
  {e1=0;}   //小時(shí)數(shù) 清零
      d0++;//累加數(shù)
   shu(); //調(diào)用時(shí)間最大值限制函數(shù)

 

} 

//.....................................................................................
void delay(uchar d1)//延時(shí)函數(shù)
{uchar t0,t1;
for(t0=d1;t0>0;t0--)
for(t1=110;t1>0;t1--);

}

//.....................................................................................
void weiduan(uchar z,uchar x) //位段選擇函數(shù)
{  P1=num[x];
   dua=1;
   dua=0;
   P1=wes[z];
  
}

//.....................................................................................
void shijian()//動(dòng)態(tài)掃描時(shí)間顯示函數(shù) 帶延時(shí)
{
 chushi();//調(diào)用時(shí)間初始化函數(shù)  
 delay(10);
 weiduan(0,ss);delay(10);
 weiduan(1,gs);delay(10);
 weiduan(2,sf);delay(10);     
 weiduan(3,gf);delay(10);
 weiduan(4,sm);delay(10);
 weiduan(5,gm);delay(10);
}

//.....................................................................................
void shu()   //時(shí)間最大限制函數(shù)體
{  if(d0>=98)  //判斷定時(shí)器進(jìn)入 多少次
  {d0=0;    //清除累加數(shù)
  miao++;}   //秒數(shù)自+

  if(miao>=60)//判斷秒等于或超過60
  {fen++;   //分鐘加1
  miao=0;}   //秒數(shù)清零

  if(fen>=60) //判斷分鐘等于或超過60
  {shi++;   //小時(shí)加1
  fen=0;}   //分鐘數(shù)清零

  if(shi>=24) //判斷小時(shí)等于或大于24
  {shi=0;}   //小時(shí)數(shù) 清零
}
//.....................................................................................
void chushi() //時(shí)間初始化
{   ss=shi/10;
    gs=shi%10;  
    sf=fen/10;
    gf=fen%10;   
    sm=miao/10;
    gm=miao%10;
}
//.....................................................................................
關(guān)閉窗口

相關(guān)文章