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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自寫電子鐘c程,求學(xué)怎么實現(xiàn)定鬧

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71774 發(fā)表于 2015-1-14 10:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用數(shù)碼管顯示的吧,電路下載:http://www.zg4o1577.cn/f/ks51.pdf
#include <reg52.h>                                   //        自寫數(shù)碼鐘程序,已在學(xué)習(xí)板上運行,能整點鬧。想加定時鬧,50后的腦子不夠用,剛學(xué),敬請指導(dǎo)!
typedef  unsigned char   uint8;
typedef  unsigned int    uint16;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
                      0x99,0x92,0x82,0xf8,
                      0x80,0x90};
uint8 a[6];
uint16 counter = 0;        
uint8 sec=0,min=0,hour=0;
uint16  counter1=0;
sfr T2MOD=0XC9;
sbit BUZZ = P1^6;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;                                 
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit KeyOut1=P2^3;
sbit K1 = P2^4;
sbit K2 = P2^5;
void timer1_init()   //定時器1初使化
{
        TMOD |= 0x10;
        TMOD &= 0xdf;  
        TH1   = 0xFC;
        TL1   = 0x67;
    ET1 = 1;
        EA  = 1;
         TR1 = 1;  }
void interrupt_timer1()interrupt 3  //T1中斷函數(shù)
{          TH1 = 0xFC;
          TL1 = 0x67;
          counter1++;
          if(counter1 == 1000)
          { counter1 =0;
           TR1 = 0;}
           BUZZ = ~BUZZ;
}
void timer2_init()         //  定時器T2運行函數(shù)
{      
        T2MOD=0X00;         
        TH2=(65536-110592/60)/256;
        TL2=(65536-110592/60)%256;
        RCAP2H=TH2;              
        RCAP2L=TL2;                 
        EA=1;                  
        ET2=1;                  
        TR2=1;                  

}
void refresh_led() //數(shù)碼管刷新函數(shù)
{
          static uint8 j = 0;
                switch(j)
           {
                   case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 =0x7f & number[a[0]];break;
                case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break;
                case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 =0x7f & number[a[2]];break;
                case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break;
                case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 =0x7f & number[a[4]];break;
                case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break;
                default: break;
                }
        
}
void Hms(void)         //秒,分,時計算函數(shù)
{
        static uint16 ui2msCount=0;
        ui2msCount++;              
                if(ui2msCount>499)  
                {
                 ui2msCount=0;        
                sec++;                     
                  if(sec>59)   
                        {
                        sec=0;
                        min++;
                          if(min>59)
                                {
                                min=0;
                                hour++;
                                 timer1_init();      
                                 if(hour>23)
                                   hour=0;
                                }
                        }
                }
                 a[5]=hour/10;  
                 a[4]=hour%10;  
                 a[3]=min/10;   
                 a[2]=min%10;  
                 a[1]=sec/10;   
                 a[0]=sec%10;  
}
  void Key2(void) //K2按鍵處理函數(shù)
{
            
        while(!K2);
        min++;
        if(min>59)
        min=0;
}

void Key1(void)          //K1按鍵處理函數(shù)
{        

        while(!K1);
        hour++;
        if(hour>23)
        hour=0;
}

void Delay(uint16 ms)        //毫秒延時函數(shù)
{
uint8 i;
        while(ms--)      
        {
           for( i=0;i<125;i++);

        }
}
main()                   //主函數(shù)
{                                                                                                                  
        ENLED = 0; ADDR3 = 1;
        timer2_init();
     KeyOut1=0;
         while(1)               
        {
                if(!K1)         
                Delay(5);      
                if(!K1)
                Key1();        
                if(!K2)         
                Delay(5);      
                if(!K2)
                Key2();
                }
}
void interrupt_timer2()        interrupt 5           //定時器T2中斷函數(shù)
{
          TF2=0;
          Hms();
          refresh_led();
                                 
}

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

使用道具 舉報

沙發(fā)
ID:67796 發(fā)表于 2015-1-14 13:09 | 只看該作者
min++的時候判斷一下即是。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:1 發(fā)表于 2015-1-14 13:12 來自手機(jī) | 只看該作者
樓上說得很對,同時向50后還在編碼的同仁致敬
回復(fù)

使用道具 舉報

地板
ID:71774 發(fā)表于 2015-1-14 13:43 | 只看該作者
是不是要加個功能切換按鍵和功能切換函數(shù),以及調(diào)整定時時間函數(shù)和數(shù)碼管刷新函數(shù)用于調(diào)整和顯示定時時間,然后再在秒,分,時計算函數(shù)中進(jìn)行判斷?

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:71774 發(fā)表于 2015-1-15 01:14 | 只看該作者
本帖最后由 三元里 于 2015-1-15 10:33 編輯
admin 發(fā)表于 2015-1-14 13:12
樓上說得很對,同時向50后還在編碼的同仁致敬

在以上兩位老師的指導(dǎo)下,我的帶定鬧時電子鐘c程完工了,在學(xué)習(xí)機(jī)上通過。剛學(xué),程序?qū)懙蒙泊舭澹赡艽嬖阱e誤,還望指導(dǎo)!

#include <reg52.h>                                   //        自寫數(shù)碼鬧鐘程序
typedef  unsigned char   uint8;
typedef  unsigned int    uint16;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
                                              0x99,0x92,0x82,0xf8,
                                            0x80,0x90};
uint8 a[6], b[6];
uint16 counter = 0;        
uint8 sec=0,min=0,hour=0,t_min=0,t_hour=0,ky;
uint16  counter1=0;                           
sfr T2MOD=0XC9;                                                                          
sbit BUZZ = P1^6;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;                                 
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit KeyOut1=P2^3;
sbit K1 = P2^4;
sbit K2 = P2^5;
sbit K3 = P2^6;
void timer1_init()   //定時器1初使化
{
        TMOD |= 0x10;
        TMOD &= 0xdf;  
        TH1   = 0xFC;
        TL1   = 0x67;
    ET1 = 1;
        EA  = 1;
         TR1 = 1;  }
void interrupt_timer1()interrupt 3  //T1中斷函數(shù)
{          TH1 = 0xFC;
          TL1 = 0x67;
          counter1++;
          if(counter1 == 10000)
          { counter1 =0;
           TR1 = 0;}
           BUZZ = ~BUZZ;
}
void timer2_init()         //  定時器T2運行函數(shù)
{      
        T2MOD=0X00;         
        TH2=(65536-110592/60)/256;
        TL2=(65536-110592/60)%256;
        RCAP2H=TH2;            
        RCAP2L=TL2;                 
        EA=1;                    
        ET2=1;                  
        TR2=1;                           

}
void refresh_led() //數(shù)碼管刷新函數(shù)
{
          static uint8 j = 0;
            if(ky==1)                 //刷新走時
                switch(j)
           {
                   case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 =0x7f & number[a[0]];break;
                case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break;
                case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 =0x7f & number[a[2]];break;
                case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break;
                case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 =0x7f & number[a[4]];break;
                case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break;
                default: break;
                }
         else if(ky==0)                //刷新鬧時
                switch(j)
           {
                   case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 = 0x7f & number[b[0]];break;
                case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[b[1]];break;
                case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 = 0x7f & number[b[2]];break;
                case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[b[3]];break;
                case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 = 0x7f & number[b[4]];break;
                case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[b[5]];break;
                default: break;
                }
}
void Hms(void)         //秒,分,時計算函數(shù)
{
        static uint16 ui2msCount=0;  
        ui2msCount++;              
                if(ui2msCount>499)   
                {
                 ui2msCount=0;        
                sec++;                       
                  if(sec>59)  
                        {
                        sec=0;
                        min++;
                        if((ky==1)&&(t_hour==hour))                      {if(t_min==min)timer1_init();}
                        if(min>59)
                                {
                                min=0;
                                hour++;
                                if(hour>23)
                                hour=0;
                                }
                        }
                }
                 a[5]=hour/10;  
                 a[4]=hour%10;  
                 a[3]=min/10;   
                 a[2]=min%10;   
                 a[1]=sec/10;   
                 a[0]=sec%10;   
                  if(ky==0)
                            { b[5]=t_hour/10;
                 b[4]=t_hour%10;
                 b[3]=t_min/10;  
                 b[2]=t_min%10;  
                 b[1]=0;  
                 b[0]=0;  
                                };
}

void Key3(void) //K3按鍵處理函數(shù)
   {
             while(!K3);
              ky++;
             if(ky > 1)
              ky=0;
   }

void Key2(void) //K2按鍵處理函數(shù)
{
           
  while(!K2);
   {if(ky==1)     
       { min++;
        if(min>59)
        min=0;};
      if(ky==0)
           {t_min++;
                if(t_min>59)
                t_min=0;};
        }
}
void Key1(void)          //K1按鍵處理函數(shù)
{        
   while(!K1);
    {if(ky==1)   
           { hour++;
         if(hour>23)
         hour=0;};
     if(ky==0)  
           {t_hour++;
                if(t_hour>59)
                t_hour=0;};
        }
}

void Delay(uint16 ms)        //毫秒延時函數(shù)
{
uint8 i;
        while(ms--)        
        {
          for( i=0;i<125;i++)
                ;
        }
}
main()                   //主函數(shù)
{                                                                                                                  
        ENLED = 0; ADDR3 = 1;
        timer2_init();
     KeyOut1=0;
         while(1)               
        {         
                if(!K1)         
                Delay(5);      
                if(!K1)
                Key1();        
                if(!K2)        
                Delay(5);      
                if(!K2)
                Key2();
                                if(!K3)                        
                                Delay(5);               
                                if(!K3)
                                Key3();
                                }
}
void interrupt_timer2()        interrupt 5         //  定時器T2中斷函數(shù)
{
          TF2=0;
          Hms();
          refresh_led();
}
回復(fù)

使用道具 舉報

6#
ID:71774 發(fā)表于 2015-1-21 01:31 | 只看該作者
謝謝管理員先生贈予的50個M幣,我會繼續(xù)努力學(xué)習(xí),爭取早日入門單片機(jī)。這幾天在寫個倒計時器的c程,完工后還請各位先生指教

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 黄色网址在线免费播放 | 久久一区二区视频 | 日韩在线视频免费观看 | 亚洲成人av | 国产免费a | 一区二区三区国产在线观看 | 一级a性色生活片久久毛片 午夜精品在线观看 | 一区二区日韩 | 中文字幕在线免费视频 | 国产精品永久 | 天天综合天天 | 色妹子综合网 | 在线视频一区二区 | 一区二区电影网 | 99精品国产一区二区青青牛奶 | 伊人久久精品 | 成人免费精品视频 | 91久久久久久久 | 99re在线| 欧美一区二区三区在线观看 | 一区二区不卡 | 超碰成人免费观看 | 国产精品69久久久久水密桃 | 欧美日韩一区二区三区不卡视频 | 中文天堂网 | 欧美成年视频 | 亚洲精品女人久久久 | 热久久久久| 秋霞电影院午夜伦 | 黑人一级片视频 | 日韩欧美不卡 | 日本精品网站 | 成人影院一区二区三区 | 日韩欧美大片在线观看 | 午夜影院在线观看 | 伊人看片 | 99精品视频网 | 亚洲精品区 | 在线免费激情视频 | 亚洲一级黄色 | 国产美女在线免费观看 |