天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

鬧鐘程序[PICC+PIC16F877A]

更新時間: 2019-01-05
閱讀量:645

//////////////////////////////////////////////////
//  Author  : Toby
//  Date  : 2008/09/06
//      Function : 時間顯示與定時功能等
//  MCU   : PIC16F877A
//  C Compiler : PICC 8.05
//  IDE   : MPLAB IDE v8.10               
/////////////////////////////////////////////////

#include
__CONFIG(0x0f3a);
#define  ADD           RB0
#define  REDUCE        RB1
#define  LED           RC2
#define  SEC           RC1
void reset(void); 
void tmint(void);  
void interrupt clkint(void);                                
delay(unsigned char x);
const unsigned char TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90};    //0-9的數據段
void display(void);           
unsigned long QC=0,temp=0,n=1;
double bf=0,sc=0;

void main()                    //主函數
{
    reset();

    display();
}

void reset(void)
{
   ADCON1=0B0110;              //全做普通I/O
   TRISA=0x0;
   PORTA=0xff;
   TRISD=0x0;            
   PORTD=0xff;           
   TRISB=0xff;
   PORTB=0x0;
   TRISC=0x0;
   PORTC=0x0;
   tmint();
   GIE=1;
}


void display(void)  //顯示函數
   {   
     unsigned long qian_1,bai_1,shi_1,shiwan,wan_1,wan,qian,bai,shi,ge;   //定義臨時變量

                    while(1)
                    {
                          bf=QC;
                          if(ADD==0)                    QC+=2;                //時間(秒)調整加 
                          if(REDUCE==0)                 QC-=2;                //時間(秒)調整減
                          if((ADD==0)&&(REDUCE==0))     QC+=2500;             //兩個按鍵同時按下,時間快速增加
                          if(bf>=1318359.375)           QC=0;                 //24小時到,重新開始計時,如果24小時時間有
                          誤差可以在這修正。
                          if(((bf>430297.8515625)&&(bf<439453.125))||((bf>549316.40625)&&(bf<558471.6796875))||((bf>659179.6875)&&(bf<668334.9609375))||((bf>704956.0546875)&&(bf<714111.328125))||((bf>823974.609375)&&(bf<833129.8828125))||((bf>933837.890625)&&(bf<942993.1640625))) LED=1; else LED=0;
                          //----------7:50---8:00-------------     ----------------10;00---10:10-----------    ----------12:00---12:100------------    --------------12:50---13:00----------       -------------15:00---15:10---------      ---------17:00---17:10-------------

                          temp=bf/15.2587890625;
                          shiwan=temp/36000;          //求小時的十位

                          wan_1=temp/3600;            //求小時的個位
                          wan=wan_1%10;

                          qian_1=temp%3600;           //求分鐘的十位
                          qian=qian_1/600;

                          bai_1=qian_1%600;           //求分鐘的個位
                          bai=bai_1/60; 

                          shi_1=bai_1%60;             //求秒的十位
                          shi=shi_1/10; 

                          ge=shi_1%10;                //求秒的個位

                          PORTD=TABLE[shiwan];        //查表得小時的十位數,
                          PORTA=0B111110;             //RA0輸出低電平,點亮小時的十位數
                          delay(5);                   //延時一定時間,保證顯示亮度  

                          PORTD=TABLE[wan];           // 小時個位顯示
                          PORTA=0B111101;            
                           delay(5);                

                          PORTD=TABLE[qian];          //分鐘十位顯示  
                          PORTA=0B1111011;         
                          delay(5);                 

                          PORTD=TABLE[bai];           //分鐘個位顯示          
                          PORTA=0x37;               
                          delay(5);                

                          PORTD=TABLE[shi];           //秒的十位顯示     
                          PORTA=0x2F;               
                          delay(5);                 

                          PORTD=TABLE[ge];            //查表得秒的個位位數,         
                          PORTA=0x1F;                 //RA5輸出低電平,點亮秒的個位數             
                          delay(5);                  //延時一定時間,保證顯示亮度              
                          PORTD=0xff;
                    }
    }


  delay(unsigned char x)       //延時函數
    {
        unsigned char a=x,b;
        for(a;a--;)
        for(b=50;b>=1;b--)
        asm("nop");     
    } 

void tmint(void)               //定時初始化函數               
{
        T0CS=0;                //T0CS是TMR0的時鐘源選擇位,當其=1時是用RA4(T0CKI)的外部輸入時鐘,當其=0時是用內部指令周期時鐘(CLKOUT)
        PSA=0;                 //PSA是預分頻器分配位,當其=1預分頻器分配給WDT,當其=0時預分頻器分配給Timer0 模塊
        PS2=1;                 //PS2:PS1:PS0:預分頻比選擇位  1 1 1是256分頻
        PS1=1;
        PS0=1;
        T0IF=0;                //T0IF是TMR0溢出中斷標志位,當其=1時TMR0 寄存器已經溢出(必須用軟件清零),當其=0時寄存器尚未發生溢出
        T0IE=1;                //T0IE是TMR0 溢出中斷允許位當其=1時允許TMR0 溢出中斷,當其=0時禁止TMR0 溢出中斷
}

 void interrupt clkint(void)   //定時器中斷函數
{  
           TMR0=0x0;
           QC++;
           T0IF=0x0;
}

联系我们: 金华市| 喜德县| 广宁县| 曲周县| 临沧市| 天等县| 工布江达县| 新余市| 正安县| 仁化县| 稻城县| 金门县| 于田县| 涞源县| 青浦区| 得荣县| 什邡市| 乳山市| 霞浦县| 衡阳县| 双桥区| 德惠市| 得荣县| 盖州市| 景泰县| 南靖县| 阳曲县| 赫章县| 新丰县| 中西区| 洛浦县| 玉林市| 广宁县| 榆树市| 富平县| 监利县| 黄石市| 河津市| 元谋县| 莱芜市| 鄢陵县|