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

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

QQ登錄

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

搜索
查看: 2419|回復(fù): 1
收起左側(cè)

51單片機(jī) LCD1602萬(wàn)年歷

[復(fù)制鏈接]
ID:256524 發(fā)表于 2018-1-7 21:02 | 顯示全部樓層 |閱讀模式
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sfr AUXR=0x8e;

sbit rw=P2^1;
sbit rs=P2^0;
sbit en=P1^2;

sbit CE=P1^3;
sbit SCL=P1^7;
sbit io=P2^3;

sbit DQ=P1^4;

uchar hang1[17]={"temperature=    "};                        //溫度顯示
uchar hang2[17]={"2000-00-00-00-00"};                        //時(shí)間日期顯示
                                //年   月 時(shí) 分 秒

uchar hang3[17]={"Happy New Year!"};

uchar int_ds[]={50,59,23,31,12,7,17};                         //初始化時(shí)間
                        //  秒分 時(shí) 日 月 周 年
uchar cmd_ds[7];                                                                //存放讀取的時(shí)間

uchar new_char[]={0x04,0x0e,0x15,0x04,0x04,0x04,0x04,0x00};         //一個(gè)新的字符

uint sec_add;
bit sec_flag;

void int_t0();

void w_cmd(uchar cmd);                                                                 //1602寫(xiě)一個(gè)命令
void w_dat(uchar dat);                                                                 //1602寫(xiě)一個(gè)數(shù)據(jù)
void int_1602();                                                                         //初始化1602
void w_zfc(uchar x,uchar y,uchar *p);                                 //寫(xiě)入一個(gè)字符串
void delay_ms(uint time);                                                         //毫秒延時(shí)
void add_char(uchar cmd,uchar *p);                                         //新增一個(gè)自定義字符   cmd為字符地址  *p為字符點(diǎn)陣函數(shù)

void DS1302_wuchar(uchar cmd);                                                 //1302寫(xiě)入一個(gè)字節(jié)命令
uchar DS1302_ruchar();                                                                 //1302讀取一個(gè)字節(jié)命令
void write_DS1302(uchar cmd,uchar dat);                                //向cmd寄存器寫(xiě)入一個(gè)dat命令
uchar red_DS1302();                                                                        //讀取一個(gè)字節(jié)函數(shù)
void red_ds();                                                                                //
void int_DS1302();                                                                        

uchar red_temp();                                                        //溫度傳感器函數(shù)
void DS_int();
void write_DS(uchar cmd);
uchar red_DS_1820();
void Delay500us();
void Delay100us();

void main()
{
        uchar temp;
        int_1602();
        int_t0();
        int_DS1302();        
        add_char(0,new_char);
        w_zfc(0,0,hang1);
        w_zfc(0,1,hang2);
        while(1)
        {
                red_ds();

                if(sec_flag)
                {
                        temp=red_temp();
                        sec_flag=0;
                }
                hang1[12]=temp/10+0x30;
                hang1[13]=temp%10+0x30;

                hang2[14]=cmd_ds[0]/10+0x30;        //秒
                hang2[15]=cmd_ds[0]%10+0x30;

                hang2[11]=cmd_ds[1]/10+0x30;        //分
                hang2[12]=cmd_ds[1]%10+0x30;

                hang2[8]=cmd_ds[2]/10+0x30;                //時(shí)
                hang2[9]=cmd_ds[2]%10+0x30;

                hang2[2]=cmd_ds[6]/10+0x30;        //年
                hang2[3]=cmd_ds[6]%10+0x30;

                hang2[5]=cmd_ds[4]/10+0x30;        //月
                hang2[6]=cmd_ds[4]%10+0x30;


                w_zfc(0,0,hang1);
                w_zfc(0,1,hang2);
        }
}

void t0() interrupt 1
{
         sec_add++;
         if(sec_add==1000)
         {
                 sec_add=0;
                sec_flag=1;
         }
}

void int_t0()
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0xCD;                //設(shè)置定時(shí)初值
        TH0 = 0xD4;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)        
        EA=1;
        ET0=1;
}

void w_cmd(uchar cmd)
{
        rs=0;
        rw=0;
        en=0;
        P0=cmd;
        delay_ms(1);
        en=1;
        delay_ms(1);
        en=0;
}

void w_dat(uchar dat)
{
        rs=1;
        rw=0;
        en=0;
        P0=dat;
        delay_ms(1);
        en=1;
        delay_ms(1);
        en=0;
}

void int_1602()
{
        w_cmd(0x38);
        w_cmd(0x08);
        w_cmd(0x01);
        w_cmd(0x06);
        w_cmd(0x0c);
}

void add_char(uchar cmd,uchar *p)
{
        uchar i;
        cmd<<=4;
        for(i=0;i<8;i++)
        {
                w_cmd(0x40|cmd+i);
                w_dat(*p);
                p++;
        }
}

void w_zfc(uchar x,uchar y,uchar *p)
{
        if(y==0)
        w_cmd(0x80+x);
        else
        w_cmd(0xc0+x);

        while(*p!='\0')
        {
                w_dat(*p);
                p++;
        }
}

void delay_ms(uint time)                                         //毫秒延時(shí)函數(shù)   根據(jù)單片機(jī)速度不同更改  此處為15系列單片機(jī)速度  51應(yīng)i應(yīng)改成120左右
{
        uint i;
        while(time--)
        {
                for(i=0;i<800;i++);
        }
}




void int_DS1302()          //初始化DS1302,把int_ds[]數(shù)組里的數(shù)寫(xiě)入相應(yīng)時(shí)間寄存器地址
{
        write_DS1302(0x8e,0x00);
        write_DS1302(0x80,int_ds[0]);                //miao
        write_DS1302(0x82,int_ds[1]);                //fen
        write_DS1302(0x84,int_ds[2]);                //shi
    write_DS1302(0x86,int_ds[3]);           //ri
        write_DS1302(0x88,int_ds[4]);           //yue
        write_DS1302(0x8a,int_ds[5]);           //zhou
        write_DS1302(0x8c,int_ds[6]);           //nian
        write_DS1302(0x8e,0x80);
}

void DS1302_wuchar(uchar cmd)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                SCL=0;
                io=cmd&0x01;
                SCL=1;
                cmd>>=1;
        }
}

uchar DS1302_ruchar()
{
        uchar dat,i;
        for(i=0;i<8;i++)
        {
                SCL=0;
                dat>>=1;
                if(io)
                dat|=0x80;        
                SCL=1;
        }
        return dat;        
}

void write_DS1302(uchar cmd,uchar dat)
{
        uchar x;
        CE=0;
        SCL=0;
        CE=1;
        DS1302_wuchar(cmd);        
        x=(dat/10<<4)|(dat%10);//十進(jìn)制轉(zhuǎn)換十六進(jìn)制
        DS1302_wuchar(x);
        CE=0;        
}

uchar red_DS1302(uchar cmd)
{
        uchar dat;
        uchar dat1,dat2;
        CE=0;
        SCL=0;
        CE=1;
        DS1302_wuchar(cmd);
        dat=DS1302_ruchar();
        dat1=dat/16;                         //十六進(jìn)制轉(zhuǎn)十進(jìn)制
        dat2=dat%16;
        dat=dat1*10+dat2;
        io=0;
        CE=0;
        return dat;
}
void red_ds()
{
        write_DS1302(0x8e,0x00);
        cmd_ds[0]=red_DS1302(0x81);        
        cmd_ds[1]=red_DS1302(0x83);        
        cmd_ds[2]=red_DS1302(0x85);
        cmd_ds[3]=red_DS1302(0x87);         //
        cmd_ds[4]=red_DS1302(0x89);         //
        cmd_ds[5]=red_DS1302(0x8b);         //
        cmd_ds[6]=red_DS1302(0x8d);         //
        write_DS1302(0x8e,0x80);        
}


void DS_int()                                  //總線初始化
{
          DQ = 0;
          Delay500us();// 延時(shí)大于480us
          DQ = 1;
    Delay500us();
}

void write_DS(uchar cmd)                 //寫(xiě)命令到DS18B20
{
        uchar i;
        for(i=0;i<8;i++)
        {
                DQ=0;
                DQ=cmd&0x01;
                Delay100us();
                DQ=1;
                cmd>>=1;
        }
}

void Delay500us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 6;
        j = 93;
        do
        {
                while (--j);
        } while (--i);
}

void Delay100us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 2;
        j = 15;
        do
        {
                while (--j);
        } while (--i);
}

uchar red_DS_1820()                                                 //讀取一個(gè)字節(jié)溫度  
{
        uchar temp,i;
         for(i=0;i<8;i++)
         {
                 DQ=0;
                 temp>>=1;
                 DQ=1;
                 if(DQ)
                 {
                          temp=temp|0x80;
                 }
                 Delay100us();
         }
         return temp;
}

uchar red_temp()
{
        uchar low,high,temp;
        DS_int();
        write_DS(0xcc);
        write_DS(0x44);
               
           DS_int();
        write_DS(0xcc);
        write_DS(0xbe);
        low=red_DS_1820();
        high=red_DS_1820();

        temp=high<<4;
        temp=temp|(low>>4);
        return temp;
}


回復(fù)

使用道具 舉報(bào)

ID:657260 發(fā)表于 2019-12-23 23:44 | 顯示全部樓層
有沒(méi)有溫度模塊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频网站在线看 | 美女艹b| 国产在线中文字幕 | 日韩一区二区在线视频 | 伊人狠狠 | 精品一区二区三区在线观看 | 91av在线免费观看 | 久久视频精品 | 色五月激情五月 | 毛片在线看片 | 欧美成人精品一区二区三区 | 日韩在线国产 | 黄色网址在线免费观看 | 久久新视频| 欧美v日韩v | 三级视频在线观看电影 | 男人天堂手机在线视频 | 精品国产一区二区三区在线观看 | 国产亚洲一区二区三区在线观看 | 亚洲国产精品一区二区www | 成人免费在线视频 | 中文字幕韩在线第一页 | 国产精品一区二区免费 | 九九伦理片| 成人福利在线 | 91av视频在线观看 | 超碰欧美 | 国产伦精品一区二区三区精品视频 | 婷婷综合激情 | 一区二区精品视频 | 欧美成年人视频在线观看 | 精品久久国产 | 日韩在线免费观看视频 | 免费看爱爱视频 | 欧美日韩在线一区二区 | 精品一区二区三区免费视频 | 日韩欧美在线精品 | 97超碰在线免费 | 91大神在线资源观看无广告 | 欧美涩涩网 | 亚洲一区二区av在线 |