找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2406|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)數(shù)碼管電子表,注:時(shí)間上有微小的誤差。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:402350 發(fā)表于 2018-12-31 13:32 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


#include <reg52.h>
#define uint  unsigned int
#define uchar unsigned char  
uint yi,er,si,wu,qi,ba;//數(shù)碼管所顯示的位置
uint num, b; k;//時(shí)分秒
uint num1;//定時(shí)器參數(shù)
uchar  code table1[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x40};//0到9和G數(shù)組
sbit dula=P2^6;//段選
sbit wela=P2^7;//位選
sbit s1=P3^0;//按鍵
sbit s2=P3^1;
sbit s3=P3^2;
sbit s4=P3^3;

void delay(uint z)//ms延時(shí)函數(shù)
{
uint i,j;
for(i=z;i>0;i--)
  for(j=114;j>0;j--);
}
void key()
{
if(s1==0)
   {
     delay(20);
     if(s1==0)
     b++;
while(!s1);
}
     if(s2==0)
   {
     delay(20);
     if(s2==0)
   k++;
while(!s2);
}
   if(s3==0)
   {
     delay(20);
     if(s2==0)
     num1++;
while(!s3);
}
  if(s4==0)
   {
     delay(20);
     if(s4==0)
{ b=0;k=0;num1=0; }
while(!s4);

}
}


void display(uchar yi, uchar er, uchar si,uchar wu,uchar qi,uchar ba)
{
//第一位數(shù)碼管
P0=0XFF;
wela=1;
P0=0xfe;
wela=0;

dula=1;  
P0=table1[yi];
dula=0;
delay(1);
//第二位數(shù)碼管
P0=0XFF;
wela=1;
P0=0xfd;
wela=0;

dula=1;  
P0=table1[er];
dula=0;
delay(1);
//第三位數(shù)碼管,橫杠
P0=0XFF;
wela=1;
P0=0xfb;
wela=0;

dula=1;
P0=table1[10];
dula=0;
delay(1);
//第四位數(shù)碼管
P0=0XFF;
wela=1;
P0=0xf7;
wela=0;

dula=1;  
P0=table1[si];
dula=0;
delay(1);
//第五位數(shù)碼管
P0=0XFF;
wela=1;
P0=0xef;
wela=0;

dula=1;  
P0=table1[wu];
dula=0;
delay(1);
//第六位數(shù)碼管,橫杠
P0=0XFF;
wela=1;
P0=0xdf;
wela=0;

dula=1;  
P0=table1[10];
dula=0;
delay(1);
//第七位數(shù)碼管
P0=0XFF;
wela=1;
P0=0xbf;
wela=0;

dula=1;  
P0=table1[qi];
dula=0;
delay(1);
//第八位數(shù)碼管
P0=0XFF;
wela=1;
P0=0x7f;
wela=0;

dula=1;  
P0=table1[ba];
dula=0;
delay(1);
}
//主函數(shù)
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;

EA=1;//開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器0中斷
TR0=1;
while(1)//等待中斷
  {

    key();
    display(yi,er,si,wu,qi,ba);
  }
}
void T0_time()interrupt 1{
   TH0=(65536-46083)/256; //重裝初值
   TL0=(65536-46083)%256; //50ms
   num++;
   if(num==20)//當(dāng)num到達(dá)20次是為1000ms也就是1s
   {
    num=0; //清零
    num1++;//秒自加
    if(num1==60)//當(dāng)num1到達(dá)60次是為60s也就是1分鐘
        {
         num1=0;//清零
         k++;//分自加
        }
    if(k==60)//當(dāng)k到達(dá)60次是為60分鐘也就是1小時(shí)
    {
          k=0;//清零
          b++;//時(shí)自加
        }
    if(b==24)//當(dāng)k到達(dá)24次是為24小時(shí)
        {
     b=0;//此時(shí)為00點(diǎn)
        }
        yi=b/10;//求模運(yùn)算
        er=b%10;//求余運(yùn)算
        si=k/10;
        wu=k%10;
        qi=num1/10;
    ba=num1%10;
   }

}







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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