新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)電子時(shí)鐘完整版

        51單片機(jī)電子時(shí)鐘完整版

        作者: 時(shí)間:2012-08-02 來源:網(wǎng)絡(luò) 收藏

        點(diǎn)擊瀏覽下一頁

        本程序完全測試通過 按上面的電路圖 用顯示 可調(diào)時(shí)間.
        #includereg52.h>
        #define uint unsigned int
        #define uchar unsigned char
        #define w_Sec 0x80
        #define w_Min 0x82
        #define w_Hou 0x84
        #define w_Day 0x86
        #define w_Mou 0x88
        #define w_xi 0x8a
        #define w_Yea 0x8c // DS1302寫數(shù)據(jù)
        #define r_Sec 0x81
        #define r_Min 0x83
        #define r_Hou 0x85
        #define r_Day 0x87
        #define r_Mou 0x89
        #define r_xi 0x8b
        #define r_Yea 0x8d //DS1302讀數(shù)據(jù)
        #define w_protect 0x8e //DS1302寫保護(hù)
        uchar code table[]="11-6-20"; //制作時(shí)間
        uchar code time1[]="00:00:00"; //時(shí)間模式1,用于普通計(jì)時(shí)
        uchar code time2[]="00:00:00:00"; //時(shí)間模式2,用于秒表計(jì)時(shí)
        uchar code time3[]="00:00"; //時(shí)間模式3,用于鬧鐘設(shè)置
        uchar code miaobiao[]="StopWatch";
        uchar code naozhong[]="Alarm";
        uchar code stuinfo1[]="ZLW0800730203";
        uchar code stuinfo2[]="LWL0807030209";
        uchar code xi1[]="Mon";
        uchar code xi2[]="Tue";
        uchar code xi3[]="Wed";
        uchar code xi4[]="Thu";
        uchar code xi5[]="Fri";
        uchar code xi6[]="Sat";
        uchar code xi7[]="Sun";
        unsigned char code str1[]={"Temperature:"};
        unsigned char code str2[]={" "};
        uchar data disdata[5];
        uint tvalue; //溫度值
        uchar tflag; //溫度正負(fù)標(biāo)志 //18B20
        sbit RS=P2^0;
        sbit RW=P2^1;
        sbit EN=P2^2; //1602控制端定義
        sbit ACC_7 = ACC^7; //位尋址寄存器
        sbit SCK = P1^1; //DS1302時(shí)鐘信號
        sbit SDA = P1^0; //DS1302數(shù)據(jù)信號
        sbit RST = P1^2 ; //DS1302片選信號
        sbit k1=P1^4;
        sbit k2=P1^5;
        sbit k3=P1^6;
        sbit k4=P1^7;
        sbit alarm=P3^7;
        sbit DQ = P2^7; //DS18B20
        uint i,shi,fen,miao,haomiao,nian,yue,ri,num,x,menu,n,nshi=0,nfen=1; //nshi、nfen用來判別鬧鐘,與系統(tǒng)時(shí)間對比
        uchar sshi,sfen,smiao,snian,syue,sri,sxi;
        /***********************延時(shí)程序*********************************/
        void delay(uint z)
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        /********************************ds1302***************************************/
        //***************向DS1302寫入一字節(jié)數(shù)據(jù)
        void Write1302(uchar addr, uchar d)
        {
        unsigned char i;
        SCK=0;
        RST=1;
        //寫入目標(biāo)地址:addr
        for (i = 0; i 8; i ++)
        {
        if (addr 0x01)
        {
        SDA=1;
        }
        else
        {
        SDA=0;
        } //并口轉(zhuǎn)串口
        SCK=1; //上升沿寫數(shù)據(jù)
        SCK=0;
        addr = addr >> 1;
        }
        //寫入數(shù)據(jù):d
        for (i = 0; i 8; i ++)
        {
        if (d 0x01)
        {
        SDA=1;
        }
        else
        {
        SDA=0;
        }
        SCK=1;
        SCK=0;
        d = d >> 1;
        }
        RST=0; //停止DS1302總線
        }
        //*************************從DS1302讀出一字節(jié)數(shù)據(jù)
        unsigned char Read1302(uchar addr)
        {
        unsigned char i;
        unsigned char temp;
        unsigned char dat1=0;
        unsigned char dat2=0;
        SCK=0;
        RST=1;
        //寫入目標(biāo)地址:addr
        for (i = 0; i 8; i ++)
        {
        if (addr 0x01)
        {
        SDA=1;
        }
        else
        {
        SDA=0;
        }
        SCK=1;
        SCK=0;
        addr = addr >> 1;
        }
        //輸出數(shù)據(jù):temp
        for (i = 0; i 8; i ++)
        {
        temp = temp >> 1;
        if (SDA)
        {
        temp |= 0x80;
        }
        else
        {
        temp = 0x7F;
        }
        SCK=1;
        SCK=0;
        }
        RST=0; //停止DS1302總線
        dat2 = temp/16; // 數(shù)據(jù)進(jìn)制轉(zhuǎn)換
        dat1 = temp%16;
        dat1 = dat2*10+dat1;
        return dat1;
        }
        /*****************************1602顯示******************************************/
        void write_add(uchar add) //1602控制字
        {
        RS=0;
        P0=add;
        EN=1;
        delay(5);
        EN=0;
        }
        void write_date(uchar date) //1602顯示字
        {
        RS=1;
        P0=date;
        EN=1;
        delay(5);
        EN=0;
        }
        void writesfm(uchar add,uchar date) //1602顯示時(shí)分秒
        {
        uchar s,g;
        s = date/10;
        g = date%10;
        write_add(0x80+0x40+add);
        write_date(0x30+s);
        write_date(0x30+g);
        }
        void writenyr(uchar add,uchar date) //1602顯示年月日
        {
        uchar s,g;
        s=date/10;
        g=date%10;
        write_add(0x80+0x00+add);
        write_date(0x30+s);
        write_date(0x30+g);
        }
        void writexi(uchar a)
        {
        write_add(0x80+0x00+11);
        if(a==1)
        {
        for(i=0;i3;i++)
        {
        write_date(xi1[i]);
        delay(5);
        }
        }
        if(a==2)
        {
        for(i=0;i3;i++)
        {
        write_date(xi2[i]);
        delay(5);
        }
        }
        if(a==3)
        {
        for(i=0;i3;i++)
        {
        write_date(xi3[i]);
        delay(5);
        }
        }
        if(a==4)
        {
        for(i=0;i3;i++)
        {
        write_date(xi4[i]);
        delay(5);
        }
        }
        if(a==5)
        {
        for(i=0;i3;i++)
        {
        write_date(xi5[i]);
        delay(5);
        }
        }
        if(a==6)
        {
        for(i=0;i3;i++)
        {
        write_date(xi6[i]);
        delay(5);
        }
        }
        if(a==7)
        {
        for(i=0;i3;i++)
        {
        write_date(xi7[i]);
        delay(5);
        }
        }
        }
        void writefuhao(void) //寫符號
        {
        write_add(0x80+0x00+2);
        write_date(table[2]);
        delay(10);
        write_add(0x80+0x00+5);
        write_date(table[2]);
        delay(10);
        write_add(0x80+0x40+2);
        write_date(time1[2]);
        delay(10);
        write_add(0x80+0x40+5);
        write_date(time1[2]);
        delay(10);
        }

        51單片機(jī)相關(guān)文章:51單片機(jī)教程


        單片機(jī)相關(guān)文章:單片機(jī)教程


        單片機(jī)相關(guān)文章:單片機(jī)視頻教程


        單片機(jī)相關(guān)文章:單片機(jī)工作原理



        上一頁 1 2 3 下一頁

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 广东省| 高台县| 梁平县| 中山市| 哈尔滨市| 新密市| 静海县| 泸溪县| 威宁| 中牟县| 清新县| 谢通门县| 河源市| 朝阳县| 左权县| 元氏县| 富蕴县| 昆明市| 韶关市| 郎溪县| 云和县| 穆棱市| 尚义县| 凤冈县| 巧家县| 旌德县| 巨鹿县| 察隅县| 沂源县| 阿拉善右旗| 广丰县| 镇康县| 苏州市| 佛山市| 永清县| 江永县| 青川县| 景宁| 沁水县| 大安市| 舟山市|