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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5235|回復: 21
打印 上一主題 下一主題
收起左側

誰能給個51單片機的電子時鐘

  [復制鏈接]
跳轉到指定樓層
樓主
要求要有,日期,時間,和鬧鐘,幫幫忙,
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:97831 發表于 2015-12-1 12:21 | 只看該作者
用按鍵調的
回復

使用道具 舉報

板凳
ID:18867 發表于 2015-12-1 20:58 | 只看該作者
自己找,很多!
回復

使用道具 舉報

地板
ID:96742 發表于 2015-12-1 21:25 | 只看該作者
我給   #include<reg52.h> #define uint unsigned int   #define uchar unsigned char  bit write=0;         //寫2402的標志 sbit scl=P2^1;                         //IC總線的位置 sbit sda=P2^0;  sbit RST=P2^5;    sbit CS_DA =P2^4 ;   sbit lcden=P2^5;                        //LCD使能端 sbit lcdrd=P1^0;                        //數據命令選擇端 sbit lcdwr=P1^1;                         //讀寫選端 uchar n,m; char miao,shi,fen; sbit k1=P3^4;                                   //開關的位置 sbit k2=P3^5; sbit k3=P3^6; sbit beep=P2^3;                                  //蜂鳴器的位置 uchar code t[]="2015-11-01 sun";  //時間 void delay()                                //延時函數 {;;} void delays(uint x)                         //延時函數2 { uint i,j;  for(i=0;i<x;i++)  for(j=0;j<115;j++);   }                                                         //延時X*MS void start()                                 //啟動信號 { sda=1;   delay();   scl=1;                                           //SCL高電平   delay();   sda=0;                                          //SDA下降沿的時候   delay();    } void stop()                                         //停止信號 { sda=0;   delay();   scl=1;   delay();   sda=1;   delay();     } void respons()                                         //應答信號 { uchar i;  scl=1;  delay();  while((sda==1)&&(i<250))  i++;  scl=0;                                                         //低電平應該成功  delay();    } void init()                                                //初始化24C16芯片 {     RST=0;    CS_DA =0 ;   sda=1;   delay();   scl=1;   delay();    } void write_byte(uchar date)                                        //寫一個字符 { uchar i,temp;  temp=date;  for(i=0;i<8;i++)    {  temp=temp<<1;    scl=0;    delay();    sda=CY;    delay();    scl=1;    delay();       }    scl=0;    delay();    sda=1;    delay();    } uchar read_byte()                                                 //讀一個字符 { uchar i,k;         scl=0;         delay();         sda=1;         delay();         for(i=0;i<8;i++)         { scl=1;         delay();         k=(k<<1)|sda;         scl=0;         delay();   }   return k;    }  void write_add(uchar a,uchar date)                                   //指定地址寫一個字符  { start();                                                                    write_byte(0xa0); //器件地址    respons();    write_byte(a);    respons();    write_byte(date);    respons();    stop();     } char read_add(uchar a)  { uchar date;                                                                                  //指定地址讀一個字符    start();    write_byte(0xa0);    respons();    write_byte(a);    respons();    start();    write_byte(0xa1);    respons();    date=read_byte();    stop();    return date;     } void di()                                                //蜂鳴器函數 {  beep=0;    delays(100);    beep=1;    } void write_com(uchar com)                          //寫命令函數 { lcdrd=0;                                                           //選命令端   P0=com;   delays(5);   lcden=1;   delays(5);   lcden=0;    } void write_date(uchar date)                          //寫數據函數 {  lcdrd=1;                                                           //選擇數據端    P0=date;    delays(5);    lcden=1;    delays(5);    lcden=0;    }  void write_sfm(uchar add,uchar date)                //寫時分秒函數  { uchar shi,ge;  shi=date/10;                                                 //分解一個2位數十位和個位  ge=date%10;  write_com(0x80+0x40+add);                          //設置顯示位置  write_date(0x30+shi);                                        //送液晶顯示十位    write_date(0x30+ge);                                        //送液晶顯示個位     } void inits()                                                 //初始化函數 { uchar a;  lcdrd=0;  lcden=0;  fen=0;                                                  //初始化分鐘設置  miao=0;  shi=0;  n=0;  m=0;  init();  write_com(0x38);                  //設置16*2顯示,5*7點陣,8位數據接口  write_com(0x0c);                  //打開顯示,不顯示光標  write_com(0x06);                  //寫一個字符后地址指針自動加1  write_com(0x01);                  //顯示清0,數據指針清0  write_com(0x80);                  //顯示初始值位置  for(a=0;a<14;a++)  {     write_date(t[a]);         delays(5);         }          write_com(0x80+0x40+6);          write_date(':');                                 //寫出時間的兩個冒號          delays(5);          write_date(':');          delays(5);          write_com(0x80+0x40+9);           //          write_date(':');          delays(5);          miao=read_add(1);                        //從AT24c16讀取數據          fen=read_add(2);          shi=read_add(3);          write_sfm(10,miao);                //分別送液晶顯示          write_sfm(7,fen);          write_sfm(4,shi);          TMOD=0x01;                                        //定時器0工作方式1          TH0=(65536-45872)/256;          TL0=(65536-45872)%256;          EA=1;                                          //開啟總中斷          ET0=1;                                           //開啟中斷          TR0=1;                                                //開啟定時器0    }  void keyscan()                                           //開關函數  { if(k1==0)    { delays(10);                                   //去抖動      if(k1==0)                                                //確認被按下          { m++;          while(!k1);                                 //等待按鍵釋放          di();          if(m==1)                                        //第一次被按下          {         TR0=0;          write_com(0x80+0x40+10);                //光標定位到秒位置          write_com(0x0f);                                //光標開始閃爍              }          if(m==2)                                                  //第二次按下光標閃爍到定位到分位置          { write_com(0x80+0x40+7);              }           if(m==3)                                                 //第三次按下光標閃爍定位到小時位置           {        write_com(0x80+0x40+4);              }           if(m==4)                                           //第四次被按下           {        m=0;            write_com(0x0c);            TR0=1;             }             }      }    if(m!=0)                                                          //只有被按下后,才有增大和減小    { if(k2==0)     {           delays(10);                                        //抖動           if(k2==0)                                                //確認被按下           {        while(!k2);           di();                                                   //每按下按鍵蜂鳴器響一次           if(m==1)           {         miao++;                                        //秒加1             if(miao==60)                                 //滿60后清0                 miao=0;                 write_sfm(10,miao);                          //每調節一次送液晶顯示一下                 write_com(0x80+0x40+10);           //顯示位置重新回到調節處                 write_add(1,miao);                           //數據改變立即存入24C16              }           if(m==2)                                                   //第二次被按下           {         fen++;                                                   //分加1           if(fen==60)                                           //滿60后 清0           fen=0;           write_sfm(7,fen);                                        //每調節一次送到液晶顯示           write_com(0x80+0x40+7);                         //顯示回到調節處           write_add(2,fen);                                         //改變的數據立即存入24C16              }         if(m==3)                                                         //第三次被按下         { shi++;                                                        //小時加1           if(shi==24)                                                //滿24后清0           shi=0;           write_sfm(4,shi);                                        //每調節一次送液晶顯示一次           write_com(0x80+0x40+4);                        //顯示位置重新回到調節處           write_add(3,shi);                                        //改變的數據立即存取24C16             }              }           }   if(k3==0) { delays(10);                                                //去抖動   if(k3==0)                                                        //確認被按下   {        while(!k3);     di();                                                         //第一次被按下秒減1         if(m==1)         {              miao--;           if(miao==-1)            miao=59;              write_sfm(10,miao);                   //每調節一次送液晶顯示                  write_com(0x80+0x40+10);                //顯示位置重新回到調節處                  write_add(1,miao);                                //數據改變立即存入24C16                    }            if(m==2)                                                   //第二次被按下分減1            { fen--;            if(fen==-1)              fen=59;                  write_sfm(7,fen);                                 //每調節一次送液晶顯示                  write_com(0x80+0x40+7);                   //顯示位置重新回到調節處                  write_add(2,fen);                                   //數據改變存入24C16               }           if(m==3)                                                          //第三次被按小時減1           {shi--;            if(shi==-1)             shi=23;                 write_sfm(4,shi);                                  //每調節一次送液晶顯示                 write_com(0x80+0x40+4);                          //顯示位置重新回到調節處                 write_add(3,shi);                                   //數據改變立即存入24C16                       }                   }           }        }     } void main()                                                                  //主函數 {  lcdwr=0;    inits();  while(1)  { keyscan();      }    } void time()interrupt 1                                  //定時器0中斷服務 {  TH0=(65536-45872)/256;    TL0=(65536-45872)%256;    n++;    if(n==20)                                                 //1秒到了    {  n=0;       miao++;                                                 //滿60清0           if(miao==60)           {        miao=0;           fen++;           if(fen==60)                                   //滿60清0            {  fen=0;                shi++;                    if(shi==24)                           //滿24清0                    {  shi=0;                       }                 write_sfm(4,shi);                        //小時變化則重新寫入                 write_add(3,shi);                         //數據改變麗江存入24C16               }                 write_sfm(7,fen);                   //分鐘變化則重新寫入                 write_add(2,fen);                        //數據改變立即存入24C16              }           write_sfm(10,miao);                   //秒變化則重新寫入           write_add(1,miao);                   //數據變化立即存入24C16       }    }
回復

使用道具 舉報

5#
ID:125752 發表于 2016-6-7 22:50 | 只看該作者
org 0000h  ajmp main    org 000bh     ljmp inti0  org 001bh     ljmp inti1  org 0030h  main:mov tmod,#11h   mov ie,#8ah   mov th0,#4ch     mov tl0,#00h  mov th1,#4ch      mov tl1,#00h  mov sp,#60h    mov r0,#20     mov 31h,#00    mov 32h,#00    mov 33h,#00    mov 38h,#00    mov 39h,#00    setb tr0     setb tr1     loop:lcall display    lcall key     lcall keynz    ajmp loop  inti0:push psw    push acc  clr ea    mov th0,#4ch   mov tl0,#00h  djnz r0,out    mov r0,#20     inc 31h   cpl p2.2    mov a,31h  cjne a,#60,out   mov 31h,#00   inc 32h   mov a,32h  cjne a,#60,out   mov 32h,#00    inc 33h    mov a,33h  cjne a,#24,out    mov 33h,#00     out: setb ea    pop acc  pop psw  reti    inti1:push psw   push acc  clr ea   mov th1,#4ch   mov tl1,#00h  inc 3ah  mov a,3ah  cjne a,#20,out1    mov 3ah,#00      mov a,32h  cjne a,38h,out1    mov a,33h  cjne a,39h,out1    clr p1.0     out1: setb ea   pop acc    pop psw  reti    display:mov a,31h       mov b,#10  div ab  mov 20h,a     mov 21h,b     disp1:  mov a,20h             mov dptr,#table      movc a,@a+dptr      mov p0,a        clr p2.0      lcall del1ms      setb p2.0    disp2:  mov a,21h             mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.1    lcall del1ms    setb p2.1  disp3:  mov a,32h            mov b,#10    div ab    mov 22h,a    mov 23h,b  disp4:  mov a,22h           mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.6    lcall del1ms    setb p2.6  disp5:  mov a,23h              mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.7    lcall del1ms    setb p2.7  disp6:  mov a,33h            mov b,#10    div ab    mov 24h,a    mov 25h,b  disp7:  mov a,24h       mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.4    lcall del1ms    setb p2.4  disp8:  mov a,25h             mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.5    lcall del1ms    setb p2.5    ret  display1:mov a,38h            mov b,#10    div ab    mov 26h,a    mov 27h,b  dispnz1:mov a,26h             mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.6    lcall del1ms    setb p2.6  dispnz2:mov a,27h            mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.7    lcall del1ms    setb p2.7  dispnz3:mov a,39h             mov b,#10    div ab    mov 28h,a    mov 29h,b  dispnz4:mov a,28h            mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.4    lcall del1ms    setb p2.4  dispnz5:mov a,29h            mov dptr,#table    movc a,@a+dptr    mov p0,a    clr p2.5    lcall del1ms    setb p2.5    ret  table:db 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H     del1ms:mov r7,#10    del1: mov r6,#50  del2:djnz r6,del2       djnz r7,del1    ret  del20ms:mov r5,#40    del3:mov r4,#250  del4:djnz r4,del4       djnz r5,del3    ret  key:jnb p3.2,key1       jnb p3.3,key2       sjmp keyout  key1:lcall del20ms    jb p3.2,keyout    jnb p3.2,$     inc 32h     mov a,32h    cjne a,#60,keyout    mov 32h,#00     sjmp keyout  key2:lcall del20ms        jb p3.3,keyout    jnb p3.3,$       inc 33h       mov a,33h    cjne a,#24,keyout     mov 33h,#00     sjmp keyout  keyout:ret  keynz:jnb p3.4,keynz1      jnb p3.5,keynz2      jnb p3.6,keynz3     jnb p3.7,keynz4      sjmp nzout  nz1:lcall display1        jnb p3.5,keynz2   jnb p3.6,keynz3  keynz1:jnb p3.4,nz1        sjmp nzout  keynz2:lcall del20ms         jb p3.5,nzout      jnb p3.5,$       inc 38h        mov a,38h      cjne a,#60,nzout      mov 38h,#00       sjmp nzout  keynz3:lcall del20ms         jb p3.6,nzout      jnb p3.6,$       inc 39h        mov a,39h      cjne a,#24,nzout       mov 39h,#00         sjmp nzout  keynz4:jb p3.7,nzout      jnb p3.7,$      setb p1.0       sjmp nzout  nzout:ret  end
回復

使用道具 舉報

6#
ID:125761 發表于 2016-6-7 23:13 | 只看該作者
謝謝樓上分享,正求呢
回復

使用道具 舉報

7#
ID:125796 發表于 2016-6-8 10:01 | 只看該作者
自己去百度搜索一下
回復

使用道具 舉報

8#
ID:111634 發表于 2016-6-8 17:07 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 17:21 編輯

先Proteus仿真一下

實例91 帶校正時鐘1302(LCD1602顯示).rar (52.74 KB, 下載次數: 15)







以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版




回復

使用道具 舉報

9#
ID:111634 發表于 2016-6-8 17:44 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 17:51 編輯

先Proteus仿真一下

實例90 開機顯示PC機時間的時鐘1302(LCD1602顯示).rar (50.36 KB, 下載次數: 9)





摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


回復

使用道具 舉報

10#
ID:111634 發表于 2016-6-8 18:36 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 18:41 編輯

先Proteus仿真一下

實例92 開機顯示PC機時分秒的時鐘1302(6位LED數碼管顯示).rar (50.05 KB, 下載次數: 5)   





摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


回復

使用道具 舉報

11#
ID:111634 發表于 2016-6-8 18:42 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 18:46 編輯

先Proteus仿真一下






摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版



回復

使用道具 舉報

12#
ID:111634 發表于 2016-6-8 18:47 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 18:49 編輯

功能設計



7-12電路,要求開機顯示134758秒,數據間用小數點分隔,其中秒數據閃爍(亮600ms,暗400ms),并不斷更新。同時要求K0、K1K2具有時鐘校正功能,其控制過程為:按下K0(帶鎖),進入時鐘修正;首先,時十位快速閃爍(亮暗各120ms);按一次K1(不帶鎖),被修正位(快速閃爍)按時十位、時個位、分十位、分個位、秒十位、秒個位次序向右移一位(循環往復);按一次K2(不帶鎖),被修正位加1(最大值不超過時鐘規定值,超過復0);時鐘修正期間,計時繼續運行;釋放K0,退出時鐘修正。


回復

使用道具 舉報

13#
ID:111634 發表于 2016-6-8 18:51 | 只看該作者
本帖最后由 zl2168 于 2016-6-8 18:52 編輯

先Proteus仿真一下

實例94 模擬電子鐘(由80C51定時器產生秒時基).rar (43.05 KB, 下載次數: 7)






摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


回復

使用道具 舉報

14#
ID:126006 發表于 2016-6-9 19:10 | 只看該作者
看看
回復

使用道具 舉報

15#
ID:125374 發表于 2016-6-12 08:57 | 只看該作者
我是想要點黑幣,下東西
回復

使用道具 舉報

16#
ID:125374 發表于 2016-6-12 08:57 | 只看該作者
我是想要點黑幣,下東西
回復

使用道具 舉報

17#
ID:125378 發表于 2017-2-26 14:13 | 只看該作者
求源碼
回復

使用道具 舉報

18#
ID:166724 發表于 2017-2-26 14:39 | 只看該作者
用按鍵自己按
回復

使用道具 舉報

19#
ID:166914 發表于 2017-2-27 15:20 | 只看該作者
網上也有很多
回復

使用道具 舉報

20#
ID:167311 發表于 2017-3-2 21:49 | 只看該作者
這個東西 網上多得是
回復

使用道具 舉報

21#
ID:122576 發表于 2017-3-3 14:16 | 只看該作者
相信樓主找到了很好
回復

使用道具 舉報

22#
ID:99130 發表于 2017-3-3 14:24 | 只看該作者
我這有12864做的,有代碼和原理圖,要的話加我QQ
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区在线观看 | 欧美1区2区 | 久久久久久毛片免费观看 | 国产精品69毛片高清亚洲 | 亚洲国产成人精品女人 | 日本精品一区 | 天天干天天草 | 国产黄色小视频 | 午夜电影福利 | 黄色精品 | 国产成人精品网站 | 国产精品久久久久久久久久久久冷 | 欧美一级视频 | 久久久视频在线 | 欧美中文字幕在线 | 国产精品99久 | 91国内在线观看 | 一区二区三区视频在线免费观看 | 国产精品久久久久久影视 | 一区二区三区日韩 | 国产二区三区 | 亚洲高清视频一区二区 | www.99re5.com| 成人欧美一区二区三区白人 | 色偷偷888欧美精品久久久 | www.久久| 韩日一区二区 | 午夜小电影 | 久久精品国产一区二区电影 | 国产伦精品一区二区三区四区视频 | www国产成人免费观看视频,深夜成人网 | 国产精品久久久久久久久久久免费看 | 久久精品91久久久久久再现 | 日韩一区二区三区在线视频 | 日本在线免费视频 | 日韩在线视频一区 | 欧美高清视频一区 | 国产精品久久久久久久久久久久久久 | 国产一区视频在线 | 亚洲视频在线一区 | 水蜜桃亚洲一二三四在线 |