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

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

QQ登錄

只需一步,快速開始

搜索
查看: 10005|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+Ds1302+lcd1602萬(wàn)年歷,可設(shè)置時(shí)間

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)萬(wàn)年歷1602仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //此為主程序,查看完成下載附件,包含仿真,可運(yùn)行
  2. #include "reg52.h"
  3. #include "main.h"
  4. #include "LCD1602.h"  //顯示模塊函數(shù)在LCD1602.c文件中
  5. //屏幕中第一行和第二行顯示的框架
  6. code char lcd_line[2][16]={
  7. "Date 20__-__-__ ",        //顯示日期
  8. "Time  __:__:__  ",        //顯示時(shí)間
  9. };
  10. //按鍵
  11. sbit S1 = P3^1;  //設(shè)置
  12. sbit S2 = P3^5;  //加
  13. sbit S3 = P3^6;  //減
  14. //當(dāng)前時(shí)間
  15. char time_hour=23;
  16. char time_min=59;
  17. char time_sec=55;

  18. char time_year=18;
  19. char time_month=6;
  20. char time_day=30;
  21. uchar mode = 0;                 //當(dāng)前模式


  22. //STC89系列單片機(jī)延時(shí)1ms
  23. void delay_ms(unsigned int x)
  24. {
  25.         char j=0;
  26.         while(x--)
  27.                 for(j=0;j<125;j++)
  28.                         ;
  29. }
  30. //讀取時(shí)間數(shù)據(jù)
  31. void read_ds1302_all()
  32. {
  33.         time_hour = ds1302_read_hour();//讀取小時(shí)
  34.         time_min = ds1302_read_min();//分鐘
  35.         time_sec = ds1302_read_sec();        //秒鐘
  36.         time_year = ds1302_read_year();
  37.         time_month = ds1302_read_month();
  38.         time_day = ds1302_read_day();

  39. }      
  40. //顯示
  41. void display_time()
  42. {
  43.         //時(shí)分秒
  44.         lcd_write_char(6,1,time_hour/10+'0');
  45.         lcd_write_char(7,1,time_hour%10+'0');
  46.         lcd_write_char(9,1,time_min/10+'0');
  47.         lcd_write_char(10,1,time_min%10+'0');
  48.         lcd_write_char(12,1,time_sec/10+'0');
  49.         lcd_write_char(13,1,time_sec%10+'0');
  50.         //年月日
  51.         lcd_write_char(7,0,time_year/10+'0');
  52.         lcd_write_char(8,0,time_year%10+'0');
  53.         lcd_write_char(10,0,time_month/10+'0');
  54.         lcd_write_char(11,0,time_month%10+'0');
  55.         lcd_write_char(13,0,time_day/10+'0');
  56.         lcd_write_char(14,0,time_day%10+'0');
  57. }                 
  58. //按鍵掃描
  59. char key_scan()
  60. {
  61.         if(S1==0 || S2==0 || S3==0)                                        // 如果按下了
  62.         {
  63.                 delay_ms(5);                                                                                                                   //去抖動(dòng)
  64.                 if(S1==0 || S2==0 || S3==0)                           //確實(shí)按下了
  65.                 {
  66.                         if(S1==0){while(S1==0); return 1;}          //按鍵1確實(shí)按下了。依此類推。
  67.                         if(S2==0){while(S2==0); return 2;}          //
  68.                         if(S3==0){while(S3==0); return 3;}          //
  69.                 }
  70.         }
  71.         return 0;                                                                          //沒有按鍵按下
  72. }

  73. //按鍵動(dòng)作
  74. void key_action()
  75. {
  76.         char key=0;
  77.         key=key_scan();
  78.     if(key == 0) return;

  79.         if(key==1)
  80.         {
  81.                 mode++;
  82.                 if(mode > 6)
  83.                 {
  84.                         mode = 0;
  85.                         lcd_write(0,0x0c);//顯示器開,光標(biāo)關(guān),字符不閃爍
  86.                 }
  87.         }
  88.         switch(mode)
  89.         {
  90.                 case 1:                 //秒
  91.                 {
  92.                        
  93.                         lcd_write(0,0x0f);                 //光標(biāo)閃爍      
  94.                         lcd_write(0,0x80+0x40+13);        //位置      
  95.                         if(key==2){time_sec++;}         //秒++
  96.                         if(key==3){time_sec--;}         //秒--
  97.                         if(time_sec>=60){time_sec=0;}
  98.                         if(time_sec<0){time_sec=59;}
  99.                         lcd_write_char(12,1,time_sec/10+'0'); //顯示
  100.                     lcd_write_char(13,1,time_sec%10+'0');
  101.                         lcd_write(0,0x80+0x40+13);        //回到原位
  102.                         ds1302_set_sec(time_sec );
  103.                        
  104.                 }
  105.                 break;
  106.                 case 2:                         //分
  107.                 {
  108.                        
  109.                         lcd_write(0,0x0f);                 //光標(biāo)閃爍      
  110.                         lcd_write(0,0x80+0x40+10);        //定位      
  111.                         if(key==2){time_min++;}         //分++
  112.                         if(key==3){time_min--;}         //分--
  113.                         if(time_min>=60){time_min=0;}
  114.                         if(time_min<0){time_min=59;}
  115.                         lcd_write_char(9,1,time_min/10+'0'); //顯示
  116.                         lcd_write_char(10,1,time_min%10+'0');
  117.                         lcd_write(0,0x80+0x40+10);        //回到原位
  118.                         ds1302_set_min(time_min );
  119.                 }
  120.                 break;
  121.                 case 3:                   //時(shí)
  122.                 {
  123.                        
  124.                         lcd_write(0,0x0f);                 //光標(biāo)閃爍      
  125.                         lcd_write(0,0x80+0x40+7);        //定位      
  126.                         if(key==2){time_hour++;}         //時(shí)++
  127.                         if(key==3){time_hour--;}         //時(shí)--
  128.                         if(time_hour>=24){time_hour=0;}
  129.                         if(time_hour<0){time_hour=23;}
  130.                         lcd_write_char(6,1,time_hour/10+'0'); //顯示
  131.                         lcd_write_char(7,1,time_hour%10+'0');
  132.                         lcd_write(0,0x80+0x40+7);        //回到原位
  133.                         ds1302_set_hour(time_hour);
  134.                 }
  135.                 break;
  136.                 case 4:                         //年
  137.                 {
  138.                        
  139.                         lcd_write(0,0x0f);                        
  140.                         lcd_write(0,0x80+8);               
  141.                         if(key==2){time_year++;}         
  142.                         if(key==3){time_year--;}
  143.                         lcd_write_char(7,0,time_year/10+'0');
  144.                         lcd_write_char(8,0,time_year%10+'0');
  145.                         lcd_write(0,0x80+8);        //回到原位         
  146.                         ds1302_set_year(time_year);
  147.                 }
  148.                 break;
  149.                 case 5:                         //月
  150.                 {
  151.                        
  152.                         lcd_write(0,0x0f);                        
  153.                         lcd_write(0,0x80+11);               
  154.                         if(key==2){time_month++;}         
  155.                         if(key==3){time_month--;}      
  156.                         if(time_month>12){time_month=1;}
  157.                         if(time_month<0){time_month=12;}
  158.                         lcd_write_char(10,0,time_month/10+'0');
  159.                         lcd_write_char(11,0,time_month%10+'0');
  160.                         lcd_write(0,0x80+11);        //回到原位
  161.                         ds1302_set_month(time_month);
  162.                 }
  163.                 break;
  164.                 case 6:                        //日
  165.                 {
  166.                        
  167.                         lcd_write(0,0x0f);               
  168.                         lcd_write(0,0x80+14);      
  169.                         if(key==2){time_day++;}         
  170.                         if(key==3){time_day--;}
  171.                         //判斷28天30天或31天
  172.                         if(time_min==2)          //2月28天
  173.                         {
  174.                         if(time_day>28){time_day=0;}
  175.                         if(time_day<0){time_day=28;}
  176.                         }
  177.                         if(time_month==4 || time_month==6  || time_month==9  || time_month==11)          //30天
  178.                         {
  179.                         if(time_day>30){time_day=0;}
  180.                         if(time_day<0){time_day=30;}
  181.                         }
  182.                         if(time_month==1 || time_month==3  || time_month==5  || time_month==7  || time_month==8  || time_month==10  || time_month==12 )          //31天
  183.                         {
  184.                         if(time_day>31){time_day=0;}
  185.                         if(time_day<0){time_day=31;}
  186.                         }                       
  187.                         lcd_write_char(13,0,time_day/10+'0');
  188.                         lcd_write_char(14,0,time_day%10+'0');
  189.                         lcd_write(0,0x80+14);        //回到原位         
  190.                         ds1302_set_day(time_day);
  191.                 }
  192.                 break;               
  193.         }

  194. }                        
  195. //主程序
  196. void main()
  197. {
  198.         lcd_init();//LCD1602液晶顯示屏初始化
  199.         ds1302_init();
  200.         lcd_write_line(0,lcd_line[0]);//屏幕顯示第一行框架        
  201.         lcd_write_line(1,lcd_line[1]);//屏幕顯示第二行框架
  202.         ds1302_set_sec(time_sec);
  203.         ds1302_set_min(time_min);      
  204.         ds1302_set_hour(time_hour);
  205.         //
  206.         ds1302_set_day(time_day);
  207.         ds1302_set_month(time_month);
  208.         ds1302_set_year(time_year);
  209.         //主循環(huán)
  210.         while(1)
  211.         {      
  212.                 key_action();
  213.                
  214.                 if(!mode)                   //沒有進(jìn)入設(shè)定時(shí)間
  215.                 {
  216.                          read_ds1302_all();           //顯示年月日時(shí)分秒
  217.                         display_time();                   //顯示
  218.                 }
  219.                 else  //讀回設(shè)定時(shí)間
  220.                 {
  221.                         ds1302_set_sec(time_sec);
  222.                         ds1302_set_min(time_min);      
  223.                         ds1302_set_hour(time_hour);
  224.                         //
  225.                         ds1302_set_day(time_day);
  226.                         ds1302_set_month(time_month);
  227.                         ds1302_set_year(time_year);      
  228.                 }
  229.                
  230.         }
  231. }
  232. ////////////////////////////////////
復(fù)制代碼


所有資料51hei提供下載:
ds1302萬(wàn)年歷.rar (107.16 KB, 下載次數(shù): 488)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:345157 發(fā)表于 2018-9-19 17:55 | 只看該作者
謝謝,正在學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

板凳
ID:400537 發(fā)表于 2018-9-20 17:46 | 只看該作者
感謝分享,對(duì)比著試下
回復(fù)

使用道具 舉報(bào)

地板
ID:253741 發(fā)表于 2018-9-27 17:56 | 只看該作者
正在學(xué)習(xí)  加油!
回復(fù)

使用道具 舉報(bào)

5#
ID:408289 發(fā)表于 2018-10-15 10:54 | 只看該作者
萬(wàn)年歷、加油!
回復(fù)

使用道具 舉報(bào)

6#
ID:684962 發(fā)表于 2020-1-11 12:33 | 只看該作者
真棒太感謝了
回復(fù)

使用道具 舉報(bào)

7#
ID:617682 發(fā)表于 2020-3-22 16:40 | 只看該作者
這萬(wàn)年歷 代碼可以解析嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:654855 發(fā)表于 2020-4-14 16:57 | 只看該作者
很強(qiáng),剛學(xué)看的有點(diǎn)吃力
回復(fù)

使用道具 舉報(bào)

9#
ID:732301 發(fā)表于 2020-5-3 19:53 | 只看該作者
想請(qǐng)問(wèn)一下作者在LCD那里RW為什么不用連接,直接接地?
回復(fù)

使用道具 舉報(bào)

10#
ID:249808 發(fā)表于 2020-9-28 09:57 | 只看該作者
仿真了一下!還可以!可以用老版本軟件仿真!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www久久av| 欧美一区二区三区在线 | 国产在线观 | 超碰成人免费 | 伊人狠狠 | 午夜a v电影 | 国产 亚洲 网红 主播 | 无人区国产成人久久三区 | 极品销魂美女一区二区 | 九九伦理电影 | 久久伊人一区二区 | 精品自拍视频在线观看 | 毛片一区二区三区 | www国产成人 | 黄色一级毛片免费看 | 精品亚洲一区二区三区四区五区 | 伊人春色在线 | 亚洲一区在线播放 | 激情视频一区 | 国产麻豆一区二区三区 | 久久一二 | 久久精品屋 | 毛片免费看的 | 久久综合狠狠综合久久综合88 | 欧美中文字幕在线观看 | 羞羞视频网站免费观看 | 日本精品视频在线 | 韩国精品在线观看 | 久久伊人精品一区二区三区 | 毛片视频免费观看 | 国产高潮av | 成年人视频在线免费观看 | 国产1区2区在线观看 | 夜夜夜久久 | 久久国产精品视频 | 日韩三级电影一区二区 | 在线看91 | 日皮视频免费 | 欧美一二三区 | 国产精品性做久久久久久 | 欧美一级免费 |