久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 51單片機電子鐘程序設計

51單片機電子鐘程序設計

作者:admin 來源:不詳 發布時間:2018-05-08  瀏覽:22
硬件部分
   基于51單片機、 ds1302時鐘芯片、 ds18b20溫度芯片、 以及1602液晶顯示的    實時時間   和   實時溫度顯示 。同時可通過按鍵 設置 年、月、日、時、分、星期。并且可以設置鬧鐘  當鬧鐘時間到時 蜂鳴器持續發出 滴..聲 同時led燈不停閃爍   且在一分鐘內沒有按指定停止按鍵 鬧鐘將自動停止  。。。


軟件部分
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit spk=P1^7;
sbit led=P1^5;
sbit DQ=P1^0;
sbit RS=P2^4;
sbit RW=P2^5;
sbit EN=P2^6;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit IO=P3^6;
sbit RST=P3^7;
sbit SCLK=P3^5;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
int nian,xing,yue,ri,shi,fen,miao;
uchar num,temp,c,d,time[7],a,b,aa,bb,ns,ng,ys,yg,rs,rg,ss,sg,fs,fg,ms,mg,flag;
/*******************1602************************/
void delay(int z)
{
 int x,y;
 for(x=z;x>0;x--)
  for(y=100;y>0;y--);
}
void write_com(uchar com)   //寫命令
{
 RS=0;
 P0=com;
 delay(5);
 EN=1;
 delay(5);
 EN=0;
}
void write_data(uchar date)      //寫數據
{
 RS=1;
 P0=date;
 delay(5);
 EN=1;
 delay(5);
 EN=0;
}
void init()          //初始化
{
 RW=0;
 EN=0;
 write_com(0x38);    //顯示模式設置
 write_com(0x0c);    //開顯示 不顯示光標 不閃
 write_com(0x06); //寫一個字符 地址指針 光標 加一 整屏不移動
 write_com(0x01);    //顯示清零
 write_com(0x80+0x04);
 write_data('2');     
 write_com(0x80+0x05);
 write_data('0');     
 write_com(0x80+0x00);
 write_data('c');     
 write_com(0x80+0x01);
 write_data('a');
 write_com(0x80+0x02);
 write_data('i');      
 write_com(0x80+0x4e);
 write_data(0xdf);    
 write_com(0x80+0x4f);
 write_data('C');     
 write_com(0x80+0x4b);
 write_data(0x2e);       //顯示"。"
}
 
/**************DS18B20****************/
void delay1(unsigned int t) //延時函數
{
 while(t--);
}
void init1()  //初始化
{
 uchar n=0;
 DQ=1;      //DQ復位
 delay1(8);  
 DQ=0;      //主機將DQ拉低
 delay1(80);     //大于480us的延時
 DQ=1;
 delay1(5);    //延時15~60us
 n=DQ;
 delay1(5);   //若n=0初始成功 n=1初始失敗(可設置返回值查看n是否為1)
}
 
void write_byte(uchar dat)    //寫入一個字節
{
 uint i;
 for(i=0;i<8;i++)
 {
  DQ=0;
  DQ=dat&0x01;
  delay1(12);
  DQ=1;
  dat>>=1;
 }
 delay1(4);
}
uchar read_byte()    //讀入一個字節
{
 uint k=0;
 uchar value=0;
 for(k=0;k<8;k++)
 {
  DQ=0;
  value>>=1;
  DQ=1;
  if(DQ)
  value|=0x80;
  delay1(4);
 }
 return value;
}
uchar read_temp()    //讀取溫度函數
{
 uchar a=0,b=0;
 init1();
 write_byte(0xcc);
 write_byte(0x44);
 delay1(200);
 init1();
 write_byte(0xcc);
 write_byte(0xbe);
 a=read_byte(); 
 b=read_byte();
 c=b;
 d=a;
 b<<=4;
 b+=(a&0xf0)>>4;
 return b;
}
/***********************1302**********************/
void wirte_byte1(uchar date)    //寫入一個字節
{
 uchar i;
 for(i=8;i>0;i--)
 {
  IO=date&0x01;
  SCLK=0;
  SCLK=1;
  date=date>>1;
   }
}
uchar read_byte1()       //讀一個字節
{
 uchar dat,i;
 for(i=8;i>0;i--)
 {
  dat=dat>>1;
  SCLK=0;
  if(IO)
  dat=dat|0x80;
  SCLK=1;
 }
 return(dat);
}
void write_ds1302(uchar add,uchar date)     //將數據寫入1302中
{
 RST=0;
 SCLK=0;
 RST=1;
 wirte_byte1(add);
 wirte_byte1(date);
 RST=0;
 SCLK=1;
}
uchar read_ds1302(uchar add)  //讀出1302中數據
{
 uchar temp;
 RST=0;
 SCLK=0;
 RST=1;
 wirte_byte1(add);
 temp=read_byte1();
 RST=0;
 SCLK=0;
 return (temp);
}
uchar huan_BCD(uint z)   //將數據 轉換成BCD
{
 uint a,b;
  a=z/10;
  b=z%10;
  a=a&0xff;
  b=b&0xff;
  a<<=4;
  a=a|b;
 return (a);
}
void xian_shi()       //液晶顯示函數
{
 if(b==0&a==0)
 {
  ms=time[0]/16;
  mg=time[0]%16;
  fs=time[1]/16;
  fg=time[1]%16;
  fen=fs*10+fg;
 
  ss=time[2]/16;
  sg=time[2]%16;
  shi=ss*10+sg;
  rs=time[3]/16;
  rg=time[3]%16;
  ri=rs*10+rg;
  ys=time[4]/16;
  yg=time[4]%16;
  yue=ys*10+yg;
  ns=time[6]/16;
  ng=time[6]%16;
  nian=ns*10+ng;
  xing=time[5];
 }
 if(a==1|b==1)
 {
  ss=shi/10;
  sg=shi%10;
  write_com(0x80+0x41);
  write_data(0xff);
  write_com(0x80+0x40);   
  write_data(table[ss]);
  write_com(0x80+0x41);   
  write_data(table[sg]);
 }
 if(a==2|b==2)
    { 
  fs=fen/10;
  fg=fen%10;
  write_com(0x80+0x44);
  write_data(0xff);
  write_com(0x80+0x43);   
  write_data(table[fs]);
  write_com(0x80+0x44);   
  write_data(table[fg]);
 }
 if(a==3)
    { 
  rs=ri/10;
  rg=ri%10;
  write_com(0x80+0x0d);
  write_data(0xff);
  write_com(0x80+0x0c);   
  write_data(table[rs]);
  write_com(0x80+0x0d);   
  write_data(table[rg]);
 }
 if(a==4)
    { 
  ys=yue/10;
  yg=yue%10;
  write_com(0x80+0x0a);
  write_data(0xff);
  write_com(0x80+0x09);   
  write_data(table[ys]);
  write_com(0x80+0x0a);   
  write_data(table[yg]);
 }
 if(a==5)
    { 
  ns=nian/10;
  ng=nian%10;
  write_com(0x80+0x07);
  write_data(0xff);
  write_com(0x80+0x06);   
  write_data(table[ns]);
  write_com(0x80+0x07);   
  write_data(table[ng]);
 }
 if(a==6)
    { 
  write_com(0x80+0x0f);
  write_data(0xff);
  write_com(0x80+0x0f);   
  write_data(table[xing]);
 }
  write_com(0x80+0x06); //在液晶第一行第七八位顯示  年  
  write_data(table[ns]);
  write_com(0x80+0x07);   
  write_data(table[ng]);
  write_com(0x80+0x08);   
  write_data('-');
  write_com(0x80+0x09); //在液晶第一行第十十一位顯示  月  
  write_data(table[ys]);
  write_com(0x80+0x0a);   
  write_data(table[yg]);
  write_com(0x80+0x0b);   
  write_data('-');
  write_com(0x80+0x0c); //在液晶第一行第十三 十四位顯示  日  
  write_data(table[rs]);
  write_com(0x80+0x0d);   
  write_data(table[rg]);
  write_com(0x80+0x0f);   //在液晶第一行第十七位顯示  星期
  write_data(table[xing]);
  write_com(0x80+0x40);   //在液晶第二行第二三位顯示    時
  write_data(table[ss]);
  write_com(0x80+0x41);   
  write_data(table[sg]);
  write_com(0x80+0x42);   
  write_data(':');
  write_com(0x80+0x43);   //在液晶第二行第五六位顯示  分
  write_data(table[fs]);
  write_com(0x80+0x44);   
  write_data(table[fg]);
  write_com(0x80+0x45);   
  write_data(':');
  write_com(0x80+0x46);   //在液晶第二行第八九位顯示  秒
  write_data(table[ms]);
  write_com(0x80+0x47);   
  write_data(table[mg]);
}
void keyscan()    //按鍵設置函數  可任意設置年月日時分秒星期的數值
{
 if(key4!=0)
 {
  if(key1==0)   //key1按鍵 選擇需設置的位
  {
   if(key1==0)
   {
    a++;
    delay(1);
   }
         while(!key1)
   {      
    delay(1);
   }      
  }
 
  if(a!=0)
  {
   if(key2==0)    //key2按鍵 可將需設置的數 調大
   {
    if(a==1)
    {
     shi++;
     if(shi>=24)
     {
      shi=0;
     }
    }
    if(a==2)
    {
     fen++;
     if(fen>=60)
     {
      fen=0;
     }
    }
    if(a==3)
    {
     ri++;
     if(ri>=32)
     {
      ri=1;
     }
    }
    if(a==4)
    {
     yue++;
     if(yue>=12)
     {
      yue=1;
     }
    }
    if(a==5)
    {
     nian++;
     if(nian>=99)
     {
      nian=0;
     }
    }
    if(a==6)
    {
     xing++;
     if(xing>=8)
     {
      xing=1;
     }
    }
   }
   if(key3==0)    //key3按鍵 可將需設置的數 調小
   {
  
    if(a==1)
    {
     shi--;
     if(shi<0)
     {
      shi=23;
     }
    }
    if(a==2)
    {
     fen--;
     if(fen<0)
     {
      fen=59;
     }
    }
    if(a==3)
    {
     ri--;
     if(ri<1)
     {
      ri=31;
     }
    }
    if(a==4)
    {
     yue--;
     if(yue<1)
     {
      yue=12;
     }
    }
    if(a==5)
    {
     nian--;
     if(nian<0)
     {
      nian=99;
     }
    }
    if(a==6)
    {
     xing--;
     if(xing<1)
     {
      xing=7;
     }
    }
   }
   if(a==7)       //當按下key1 7次后  將個數據寫入1302 
   {
    a=0;
    write_ds1302(0x8e,0x00);   //WP=0 寫操作
    write_ds1302(0x80,0x00);   //0x80是寫秒數據
    write_ds1302(0x82,huan_BCD(fen)); //0x82是寫分數據
    write_ds1302(0x84,huan_BCD(shi)); //0x84是寫時數據
    write_ds1302(0x86,huan_BCD(ri)); //0x84是寫日數據
    write_ds1302(0x88,huan_BCD(yue)); //0x84是寫月數據
    write_ds1302(0x8a,huan_BCD(xing)); //0x84是寫星期數據
    write_ds1302(0x8c,huan_BCD(nian)); //0x84是寫年數據
    write_ds1302(0x8e,0x80);   //WP=1 寫保護   
   }
  }
 }
}
void naozhong()      //通過按鍵設置鬧鐘  時 分
{
 if(key1!=0)
 {
  if(key4==0)
  {
   if(key4==0)
   {
    b++;
    delay(1);
   }
         while(!key4)
   {      
    delay(1);
   }
  }
  if(b!=0)
  {
   if(key2==0)    //key2按鍵 可將需設置的數 調大
   {
    if(b==1)
    {
     shi++;
     if(shi>=24)
     {
      shi=0;
     }
    }
    if(b==2)
    {
     fen++;
     if(fen>=60)
     {
      fen=0;
     }
    }
   }
   if(key3==0)    //key3按鍵 可將需設置的數 調小
   {
    if(b==1)
    {
     shi--;
     if(shi<0)
     {
      shi=23;
     }
    }
    if(b==2)
    {
     fen--;
     if(fen<0)
     {
      fen=59;
     }
    }
   }
   aa=huan_BCD(shi);   //將設置的時鐘 賦值給aa
   bb=huan_BCD(fen); //將設置的分鐘 賦值給bb
   if(b==3)       //當按下key4 3次后 鬧鐘設置完成 
   {
    b=0;
   }
  }
 }
}
void main()
{
 uint i,temp;
 init();
 TMOD=0x10;
 EA=1;
 TH1=(65536-51200)/256;
 TL1=(65536-51200)%256;
 ET1=1;
 while(1)
 {
  temp=0x81;          //讀的初始地址                   
        for(i=0;i<7;i++)             //分別把秒分時日月年星期數據讀出分7次讀好一次地址加2" temp+=2;"
      {
         time[i]=read_ds1302(temp);
      temp+=2;
        }
  if(bb==time[1]&aa==time[2]&!time[0])  //如果讀出來的時鐘 分鐘與1302讀出來的值相等且讀出來的秒鐘為零時 進入中斷
  {
   TR1=1;
   flag=1;   //標志位設置為1
  }
  if(key3==0)   //進入鬧鐘后 可由key3按下 停止中斷 標志位置零 允許調時鬧鐘設置按鍵動作 停止鬧鈴
  {
   led=1;
   spk=1;
   flag=0;
   TR1=0;
  }
        if(flag!=1)   //當進入鬧鐘中斷后 調時與設置鬧鐘的按鍵  無效
     {
         naozhong();
   keyscan();
  }
  xian_shi();
  temp=read_temp();
  write_com(0x80+0x49);   
  write_data(table[temp/10]);    //在液晶第二行第十位顯示溫度的十位
  write_com(0x80+0x4a);  
  write_data(table[temp%10]);    //在液晶第二行第十一位顯示溫度的個位
  write_com(0x80+0x4c);   
  write_data(table[(d&0x0f)*625/1000]);   //在液晶第二行第十三位顯示溫度的小數點后一位
  write_com(0x80+0x4d);   
  write_data(table[(d&0x0f)*625/100%10]);   //在液晶第二行第十四位顯示溫度的小數點后二位
 }
}

void timer1() interrupt 3     //定時器 
{
 uint t;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 t++;
 spk=0;      //蜂鳴器  發出 滴答 聲
 led=!led;      //發光二極管  不停閃爍
 delay1(10);
 if(t==1120)    //約1分鐘后 鬧鐘自動停止 標志位
 {
  led=1;
  spk=1;
  t=0;
  TR1=0;
  flag=0;
 }
}

編輯:admin  最后修改時間:2018-05-08

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
国产毛片视频网站| 污视频在线观看免费网站| 欧美爱爱视频网站| 成人黄色一级大片| 日韩不卡一二三| av噜噜在线观看| 色婷婷综合在线观看| 免费观看黄色大片| 日本久久久网站| 一区二区传媒有限公司| 久久精品国产精品亚洲色婷婷| 99久久国产综合精品五月天喷水| 欧美狂野激情性xxxx在线观| 阿v天堂2018| www.亚洲天堂网| 亚洲性生活网站| 三日本三级少妇三级99| 大桥未久一区二区| 成年人观看网站| 天堂av8在线| 国产情侣第一页| 日本新janpanese乱熟| 九九热免费在线观看| 丁香色欲久久久久久综合网| aaa毛片在线观看| 中文字幕一区二区在线观看视频| 日韩成人午夜影院| 久草在在线视频| 亚洲区成人777777精品| 最近免费中文字幕中文高清百度| 九一精品久久久| 欧美一级在线看| www.黄色网址.com| 成人性做爰aaa片免费看不忠| 97人人模人人爽人人澡| 欧美日韩在线中文| 成人性做爰片免费视频| 欧美日韩在线免费播放| 亚洲 欧美 综合 另类 中字| 日韩av手机版| 日韩小视频在线播放| 亚洲男人天堂2021| 日韩精品你懂的| www黄色av| 国产精品自拍片| 女女百合国产免费网站| 中文字幕亚洲影院| 已婚少妇美妙人妻系列| 日韩精品―中文字幕| 经典三级在线视频| 国产四区在线观看| 黄色aaaaaa| 女人高潮一级片| 国产一级片自拍| 伊人国产在线视频| 亚洲老女人av| 依人在线免费视频| 在线观看国产一级片| 激情视频免费网站| 污版视频在线观看| 亚洲一级片网站| 在线黄色免费看| 一级做a爱视频| 日本中文字幕在线不卡| 中文字幕剧情在线观看| 制服丝袜中文字幕第一页| 久久久久久久久久久久久久久国产| 国产精品视频分类| 999在线观看| 午夜影院免费版| 大片在线观看网站免费收看| 黄黄视频在线观看| 日本www在线视频| 国产黄色特级片| 亚洲高清免费在线观看| 日本在线观看视频一区| 一二三四中文字幕| 日韩av在线播放不卡| 久久久999视频| 视色视频在线观看| 99精品视频网站| 日韩精品在线视频免费观看| 成人毛片视频网站| 中文字幕在线观看第三页| 三上悠亚在线一区| 女人色极品影院| www.xxx亚洲| 看全色黄大色大片| 免费激情视频在线观看| 久久久一二三四| 777久久久精品一区二区三区| 美女黄色片视频| www.av91| 一路向西2在线观看| 人妻av无码专区| 制服丝袜中文字幕第一页| 欧美无砖专区免费| 三级a三级三级三级a十八发禁止| 一区二区三区日韩视频| 欧美黄色一级片视频| 最新黄色av网站| 自拍偷拍 国产| 9久久9毛片又大又硬又粗| 亚洲国产成人va在线观看麻豆| 久久手机在线视频| 国产又大又长又粗又黄| 久久精品.com| 国产午夜福利100集发布| 波多野结衣免费观看| 国产精品人人妻人人爽人人牛| 日韩欧美视频免费在线观看| 国产又大又黄又猛| 日本在线观看a| 男人添女人下部高潮视频在观看| 九九九九九九九九| 国产一伦一伦一伦| 久久精品午夜福利| 99爱视频在线| 国产精品国产对白熟妇| 午夜久久久久久久久久久| 无需播放器的av| 黄色aaa级片| 香港日本韩国三级网站| 免费激情视频在线观看| 久久综合久久色| 北条麻妃视频在线| 亚洲视频在线a| 久久久久国产精品熟女影院| 欧美 国产 日本| 91免费视频网站在线观看| www在线观看免费| 久久久久久久久久久久久久国产| 日日摸日日碰夜夜爽无码| 国产日韩亚洲欧美在线| 日日摸日日碰夜夜爽无码| 成人免费观看cn| 人妻内射一区二区在线视频| 日韩欧美精品在线观看视频| 成熟老妇女视频| 九色porny自拍| 在线视频观看91| 日韩精品一区二区三区四| 久久国产精品网| 国产天堂在线播放| 亚洲欧美日本一区二区三区| 欧美爱爱视频网站| 黄色一级片在线看| 成人在线免费观看av| 日本新janpanese乱熟| 国产在线观看中文字幕| 奇米777四色影视在线看| 日本欧美黄色片| 青青在线免费观看视频| 手机在线观看日韩av| 国产xxxx振车| 天天干天天干天天干天天干天天干| 欧美在线aaa| 97视频在线免费| 中文字幕 欧美日韩| 人妻无码一区二区三区四区| 成人久久久久久久久| 亚洲热在线视频| 99精品视频播放| 国产日产欧美一区二区| 日韩手机在线观看视频| 日韩欧美一级在线| 亚洲国产日韩欧美在线观看| www.男人天堂网| 免费网站在线观看黄| 9久久9毛片又大又硬又粗| 污污视频网站在线| 欧美 激情 在线| 亚洲乱码日产精品bd在线观看| 大香煮伊手机一区| 国产真人做爰毛片视频直播| av中文字幕网址| 日本va中文字幕| 北条麻妃69av| 91网站在线观看免费| 不卡中文字幕在线| 日韩肉感妇bbwbbwbbw| 东京热加勒比无码少妇| 无码人妻少妇伦在线电影| 亚欧精品在线视频| 老司机午夜性大片| 91在线视频观看免费| 黄色成人在线看| 国产av麻豆mag剧集| 久久久久久久9| 国产精品久久久久9999爆乳| 可以在线看黄的网站| 99久久久无码国产精品性色戒| 99国产精品久久久久久| 97超碰人人爽| 婷婷激情综合五月天| 在线a免费观看| 91九色国产ts另类人妖| 亚洲国产精品影视| 特大黑人娇小亚洲女mp4| 国产精品va在线观看无码|