久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: [原創(chuàng)][分享]新手完成的數(shù)字鐘,給大家給分享一下 [打印本頁]

作者: hsllssmxian    時(shí)間: 2009-9-20 13:50
標(biāo)題: [原創(chuàng)][分享]新手完成的數(shù)字鐘,給大家給分享一下

//*************************C語言寫的可調(diào)數(shù)字時(shí)鐘顯示 *************************
//*******************************2009-10-15***********************************
//***************************可調(diào)數(shù)字鐘功能介紹*******************************
//K1:adjtime  K2:hour  K3:min  K4:OK
//K2:lookalarm  K4:OK
//K3:adjalarm  K2:hh  K3:mm  K4:OK
//K4:SET alarm OFF/ON
//****************************************************************************
#include"reg51.h"
unsigned char ss=0,hour=12,min=0,hh=7,mm=30; //初始化  顯示12:00鬧鈴:7:30
unsigned char code leds_a[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //0-9
unsigned char code leds_b[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};   //帶點(diǎn)的0-9
sbit P37=P3^7; //蜂鳴器開關(guān)
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;  //數(shù)碼管選位
#define K1 0xde
#define K2 0xee
#define K3 0xf6
#define K4 0xdd //按鍵的分別代碼
TIMER_INTO();
unsigned char kbscan();  //鍵盤掃描
void lookalarm();  //查看鬧鈴
void disp_off(); //鬧鈴關(guān)的顯示
void process();    //有按鍵按下的處理
void disp_on();   //鬧鈴開的顯示
void alarm();   //鬧鈴
void disp();
unsigned char flag_alarm=0;  //鬧鐘標(biāo)志位,默認(rèn)鬧鈴關(guān)
static unsigned int count=0;  //計(jì)數(shù)器初始
unsigned int dema;    //數(shù)碼管顯示的延時(shí)標(biāo)中斷志
unsigned int demb;   //按鍵的延時(shí)中斷標(biāo)志
unsigned int demc,demd,deme;   //demc,demd分別是兩種頻率的半周期計(jì)數(shù),deme是頻率之間轉(zhuǎn)換的標(biāo)志
unsigned char key,flag,temp=0; //key:按鍵代碼的返回,flag:頻率的響應(yīng)時(shí)間控制,temp:控制選擇輸出頻率

main()      //主程序
{
 TIMER_INTO();   //定時(shí) 中斷 初始化
 while(1)
 { 
  alarm();    //鬧鈴
  key=kbscan();//掃描鍵盤
   process();
  disp();
 }
}
void process() //按鍵的處理
{
 if(key!=0)
 {
  if(key==K1)
  {
   
    while((key=kbscan())!=K4)
   {

    disp_off();
    if((key=kbscan())==K2)
    {
     hour++;
     disp_off();
     if(hour>=24)
     {
      hour=0;
     }
    }
    if((key=kbscan())==K3)
    {
     min++;
     if(min>=60)
     {
      min=0;
     }
    }
   }

  }

  else if(key==K2)
  {
   while((key=kbscan())!=K4)
   {
    lookalarm();
   }
  }
     
  else if(key==K3)
  {
    while((key=kbscan())!=K4)
   {
    lookalarm();
    if((key=kbscan())==K2)
    {
     hh++;
     lookalarm();
     if(hh>=24)
     {
      hh=0;
     }
    }
    if((key=kbscan())==K3)
    {
     mm++;
     if(mm>=60)
     {
      mm=0;
     }
    }
   }
  }

  else if(key==K4)
  {
   if(flag_alarm==0)
   {
    flag_alarm=1;
   }
   else
   {
    flag_alarm=0;
   }
  }
 }
}
TIMER_INTO()   //中斷初始化
{
 TMOD=0X01;
 TH0=0Xfe;
 TL0=0X0c;  //500uS初值
 TR0=1;
 ET0=1;
 EA=1;
}
timer0() interrupt 1  //中斷進(jìn)程
{
 TR0=0;
 TH0=0Xfe;
 TL0=0X0c;  //重裝初值
 TR0=1;
 if(dema)
 {
  dema--;    //2mS延時(shí)
 }
 if(demb)
 {
  demb--;   //40mS延時(shí)
 }
 if(demc)
 {
  demc--;
 }
 if(demd)
 {
  demd--;
 }
 flag++;
 if(flag>=2000)//調(diào)整此處可以調(diào)整頻率響應(yīng)的時(shí)間
 {
  flag=0;
  temp=1;
  deme++;
  if(deme>=2)
  {
   deme=0;//這里設(shè)計(jì)的是500HZ響應(yīng)1S,1kHZ響應(yīng)1S
   temp=0;
  }
 }
 count++;
 if(count>=2000) //1S延時(shí)
 {
  count=0;
  ss++;
  if(ss>=60)
  {
   ss=0;
   min++;
   if(min>=60)
   {
    min=0;
    hour++;
    if(hour>=24)
    {
     hour=0;
    }
   }
  }
 }
}
void disp()
{
 if(flag_alarm==0)
 {
  disp_off(); //關(guān)閉鬧鐘的顯示
 }
 else
 {
  disp_on();  //鬧鐘開啟 的顯示
 }
}

void disp_off() //鬧鈴關(guān)的走時(shí)
{
 P23=0;
 P0=leds_a[min%10];
 dema =4;//2mS  
 while(dema!=0);
 P23=1;

 P22=0;
 P0=leds_a[min/10];
 dema =4;  
 while(dema!=0);
 P22=1;
 
 P21=0;
 P0=leds_b[hour%10];
 dema =4;  
 while(dema!=0);
 P21=1;
 
 P20=0;
 P0=leds_a[hour/10];
 dema =4;  
 while(dema!=0);
 P20=1; 
}
void disp_on()   //鬧鈴開的走時(shí)
{
 P23=0;
 P0=leds_b[min%10];
 dema =4;  
 while(dema!=0);
 P23=1;

 P22=0;
 P0=leds_a[min/10];
 dema =4;  
 while(dema!=0);
 P22=1;

 P21=0;
 P0=leds_b[hour%10];
 dema =4;  
 while(dema!=0);
 P21=1;

 P20=0;
 P0=leds_a[hour/10];
 dema =4;  
 while(dema!=0);
 P20=1;
}
void lookalarm() //查看鬧鐘
{
 P23=0;
 P0=leds_a[mm%10];
 dema =4;  
 while(dema!=0);
 P23=1;

 P22=0;
 P0=leds_a[mm/10];
 dema =4;  
 while(dema!=0);
 P22=1;

 P21=0;
 P0=leds_b[hh%10];
 dema =4;  
 while(dema!=0);
 P21=1;

 P20=0;
 P0=leds_a[hh/10];
 dema =4;  
 while(dema!=0);
 P20=1;
}

unsigned char kbscan()   //掃描鍵盤
{
 unsigned char sccode,recode,temp;
 P1=0XF8;
 temp=P1;
 if(temp!=0xf8)
 {
  demb=80;   //40mS
  while(demb!=0);
  if(temp==P1)
  {
   sccode=0xfe;
   while((sccode&0xf7)!=0)
   {
    P1=sccode;
    if((P1&0xf8)!=0xf8)
    {
     recode=P1&0Xf8;
     sccode=sccode&0xc7;
     return(recode|sccode);
    }
    else
     sccode=sccode<<1|0x01;
   }

  }
 }
 return(0);
}
void alarm()//鬧鈴
{
 if((min==mm)&&(hour==hh))
 {
  if(flag_alarm==1)
  {
   if(temp)
    {
     demb=2;
     while(demb!=0);//500HZ  1mS取反
     P37=~P37;
    }
   else
    {
     dema=1;
     while(dema!=0);//1KHZ 500uS取反
     P37=~P37;
    } 
  }
  else
  {
    P37=1;
  }
 }
 else
  P37=1;
}

 

 




說明一下,鍵盤是3*3的矩陣鍵盤,4個(gè)數(shù)碼管24小時(shí)走時(shí)。另外就是鬧鈴的聲音太難聽了,程序肯定有很多不足,希望大家指正給我指出來,感激不盡,謝謝

[此貼子已經(jīng)被作者于2009-10-15 22:48:49編輯過]

作者: sijuan2006    時(shí)間: 2009-9-20 14:54

加油哦,


作者: admin    時(shí)間: 2009-9-20 16:18

不錯(cuò),用有源還是無源的喇叭哦?


作者: wml1314hy    時(shí)間: 2009-9-20 16:37
很不錯(cuò)~~謝謝分享~~我剛開始接觸~~
作者: hsllssmxian    時(shí)間: 2009-9-20 18:59
喇叭就是一般的蜂鳴器,低電平有效
作者: 1qaz2wsx77    時(shí)間: 2015-10-12 20:32
整的不錯(cuò),很好




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一区二区三区欧美 | 国产精品精品视频一区二区三区 | av在线一区二区三区 | 国产精品一区二区福利视频 | 欧美精品一区二区免费 | 精品视频在线免费观看 | 老牛嫩草一区二区三区av | 日韩欧美中文字幕在线观看 | 色综合美女 | 福利片一区二区 | 波多野结衣中文视频 | 国产探花在线精品一区二区 | 一级片免费网站 | 欧美日韩精品一区二区三区四区 | 免费看片国产 | 天天草天天操 | 国内精品久久久久久久影视简单 | 亚洲精品在线观 | 国产精品久久一区二区三区 | 国产男人的天堂 | 97在线播放 | 国产毛片久久久 | 中文字幕视频在线看 | 欧美一区二区三区在线看 | 国产精品免费高清 | 亚洲一区中文字幕 | 免费黄色在线观看 | 久久久精品综合 | 欧美日韩国产中文字幕 | 99久久久久 | 日韩亚洲一区二区 | 狠狠操狠狠干 | 午夜视频在线观看网址 | 高清一区二区三区 | 亚洲狠狠丁香婷婷综合久久久 | 国产精品久久久久久久午夜片 | 国产精品国产三级国产aⅴ中文 | 一区二区免费在线 | 韩日在线观看视频 | 最新免费黄色网址 | 91精品久久 |