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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5200|回復: 5
收起左側

IAP15W4k58S4單片機DS1302在LCD1602顯示

[復制鏈接]
ID:228755 發表于 2018-9-3 12:11 | 顯示全部樓層 |閱讀模式
IAP15W4k58S4 DS1302在LCD1602顯示

單片機源程序如下:
  1. /************************************************************************************
  2. Copyright,  LCE STUDIO   
  3. 程序名稱:1602顯示屏測試程序   (晶振頻率12MHz)
  4. 功能說明: 通過1602顯示屏顯示字符            
  5. 程序版本:1.0 (2015/06)
  6. ************************************************************************************/


  7. #include "stc15f2k60s2.h"            // 單片機STC15F2K60S2頭文件,可以不再加入reg51.h
  8. #include <intrins.h>                            // 加入此頭文件后,可使用_nop_庫函數
  9. #include "delay.h"                        // 延時函數頭文件
  10. #include "1602.h"                          // 1602顯示屏驅動程序頭文件
  11.                        
  12. #define uchar unsigned char
  13. #define uint unsigned int
  14.        
  15. //DS1302引腳定義
  16. sbit RST=P0^0;
  17. sbit IO=P0^1;
  18. sbit SCK=P0^2;
  19. //DS1302地址定義
  20. #define ds1302_sec_add                        0x80                //秒數據地址
  21. #define ds1302_min_add                        0x82                //分數據地址
  22. #define ds1302_hr_add                        0x84                //時數據地址
  23. #define ds1302_date_add                        0x86                //日數據地址
  24. #define ds1302_month_add                0x88                //月數據地址
  25. #define ds1302_day_add                        0x8a                //星期數據地址
  26. #define ds1302_year_add                        0x8c                //年數據地址
  27. #define ds1302_control_add                0x8e                //控制數據地址
  28. #define ds1302_charger_add                0x90                                          
  29. #define ds1302_clkburst_add                0xbe
  30. /********************************************************************/
  31. uchar dis_time_buf[16]={0};
  32. uchar time_buf[8] = {0x20,0x18,0x09,0x02,0x18,0x52,0x00,0x07};//初始時間2010年6月1號23點59分55秒 星期二
  33. uint t;
  34. /*單字節寫入一字節數據*/
  35. //DS1302初始化函數
  36. void ds1302_init(void)
  37. {
  38.         RST=0;                        //RST腳置低
  39.         SCK=0;                        //SCK腳置低
  40. }
  41. //向DS1302寫入一字節數據
  42. void ds1302_write_byte(uchar addr, uchar d)
  43. {
  44.         uchar i;
  45.         RST=1;                                        //啟動DS1302總線       
  46.         //寫入目標地址:addr
  47.         addr = addr & 0xFE;   //最低位置零,寄存器0位為0時寫,為1時讀
  48.         for (i = 0; i < 8; i ++) {
  49.                 if (addr & 0x01) {
  50.                         IO=1;
  51.                         }
  52.                 else {
  53.                         IO=0;
  54.                         }
  55.                 SCK=1;      //產生時鐘
  56.                 SCK=0;
  57.                 addr = addr >> 1;
  58.                 }       
  59.         //寫入數據:d
  60.         for (i = 0; i < 8; i ++) {
  61.                 if (d & 0x01) {
  62.                         IO=1;
  63.                         }
  64.                 else {
  65.                         IO=0;
  66.                         }
  67.                 SCK=1;    //產生時鐘
  68.                 SCK=0;
  69.                 d = d >> 1;
  70.                 }
  71.         RST=0;                //停止DS1302總線
  72. }

  73. //從DS1302讀出一字節數據
  74. uchar ds1302_read_byte(uchar addr) {

  75.         uchar i,temp;       
  76.         RST=1;                                        //啟動DS1302總線
  77.         //寫入目標地址:addr
  78.         addr = addr | 0x01;    //最低位置高,寄存器0位為0時寫,為1時讀
  79.         for (i = 0; i < 8; i ++) {
  80.                 if (addr & 0x01) {
  81.                         IO=1;
  82.                         }
  83.                 else {
  84.                         IO=0;
  85.                         }
  86.                 SCK=1;
  87.                 SCK=0;
  88.                 addr = addr >> 1;
  89.                 }       
  90.         //輸出數據:temp
  91.         for (i = 0; i < 8; i ++) {
  92.                 temp = temp >> 1;
  93.                 if (IO) {
  94.                         temp |= 0x80;
  95.                         }
  96.                 else {
  97.                         temp &= 0x7F;
  98.                         }
  99.                 SCK=1;
  100.                 SCK=0;
  101.                 }       
  102.         RST=0;                                        //停止DS1302總線
  103.         return temp;
  104. }
  105. //向DS302寫入時鐘數據
  106. void ds1302_write_time(void)
  107. {
  108.         ds1302_write_byte(ds1302_control_add,0x00);                        //關閉寫保護
  109.         ds1302_write_byte(ds1302_sec_add,0x80);                                //暫停時鐘
  110.         //ds1302_write_byte(ds1302_charger_add,0xa9);            //涓流充電
  111.         ds1302_write_byte(ds1302_year_add,time_buf[1]);                //年
  112.         ds1302_write_byte(ds1302_month_add,time_buf[2]);        //月
  113.         ds1302_write_byte(ds1302_date_add,time_buf[3]);                //日
  114.         ds1302_write_byte(ds1302_hr_add,time_buf[4]);                //時
  115.         ds1302_write_byte(ds1302_min_add,time_buf[5]);                //分
  116.         ds1302_write_byte(ds1302_sec_add,time_buf[6]);                //秒
  117.         ds1302_write_byte(ds1302_day_add,time_buf[7]);                //周
  118.         ds1302_write_byte(ds1302_control_add,0x80);                        //打開寫保護     
  119. }
  120. //從DS302讀出時鐘數據
  121. void ds1302_read_time(void)  
  122. {
  123.         time_buf[1]=ds1302_read_byte(ds1302_year_add);                //年
  124.         time_buf[2]=ds1302_read_byte(ds1302_month_add);                //月
  125.         time_buf[3]=ds1302_read_byte(ds1302_date_add);                //日
  126.         time_buf[4]=ds1302_read_byte(ds1302_hr_add);                //時
  127.         time_buf[5]=ds1302_read_byte(ds1302_min_add);                //分
  128.         time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7f;//秒,屏蔽秒的第7位,避免超出59
  129.         time_buf[7]=ds1302_read_byte(ds1302_day_add);                //周        
  130. }
  131. void Display(void)
  132. {
  133.    
  134.    LCD_write_char(3,0,dis_time_buf[0]+'0');
  135.    
  136.    LCD_write_char(4,0,dis_time_buf[1]+'0');
  137.    
  138.    LCD_write_char(5,0,dis_time_buf[2]+'0');
  139.    
  140.    LCD_write_char(6,0,dis_time_buf[3]+'0');

  141.    LCD_write_char(7,0,'/');
  142.    
  143.    
  144.    LCD_write_char(8,0,dis_time_buf[4]+'0');
  145.    
  146.    LCD_write_char(9,0,dis_time_buf[5]+'0');

  147.    LCD_write_char(10,0,'/');

  148.    
  149.    LCD_write_char(11,0,dis_time_buf[6]+'0');
  150.    
  151.    LCD_write_char(12,0,dis_time_buf[7]+'0');
  152.    
  153.    
  154.    LCD_write_char(15,0,dis_time_buf[14]+'0');
  155.    //第2行顯示  
  156.    
  157.    LCD_write_char(3,1,dis_time_buf[8]+'0');
  158.   
  159.    LCD_write_char(4,1,dis_time_buf[9]+'0');

  160.    LCD_write_char(5,1,':');

  161.   
  162.    LCD_write_char(6,1,dis_time_buf[10]+'0');
  163.    
  164.    LCD_write_char(7,1,dis_time_buf[11]+'0');

  165.    LCD_write_char(8,1,':');

  166.    
  167.    LCD_write_char(9,1,dis_time_buf[12]+'0');
  168.    
  169.    LCD_write_char(10,1,dis_time_buf[13]+'0');
  170. }

  171. void main(void)
  172. {
  173.        
  174.         P0M0=0X00;
  175.         P0M1=0X00;
  176.         P2M0=0X00;
  177.         P2M1=0X00;
  178.         P4M0=0X00;
  179.         P4M1=0X00;
  180.         P5M0=0X00;
  181.         P5M1=0X00;       
  182.         DelayMS(50);
  183.        
  184.         AUXR |= 0x80;                //定時器時鐘1T模式
  185.         TMOD &= 0xF0;                //設置定時器模式
  186.         TL0 = 0x00;                        //設定定時器初值
  187.         TH0 = 0xDC;                        //設定定時器初值
  188.         EA  = 1;        //總中斷打開
  189.         ET0 = 1;        //定時器0中斷打開  
  190.         TF0 = 0;                                //清楚TF0標志
  191.         TR0 = 1;                                //定時器0開始計時
  192.        
  193.         lcd_init();
  194.         lcd_clear();
  195.         ds1302_init();
  196.         ds1302_write_time(); //寫入初始值
  197.         while(1)
  198.         {
  199.                        
  200.                 Display();
  201.         }
  202. }
  203. void tm0_isr() interrupt 1           //中斷入口
  204. {
  205.    
  206.    
  207.     TL0 = 0x00;                        //設定定時器初值
  208.         TH0 = 0xDC;                        //設定定時器初值
  209.   //每500us進行中斷,輸出取反,即1ms周期的方波
  210.           t++;
  211.          if(t==400)               //間隔200ms(50ms*4)讀取一次時間
  212.   {

  213.    t=0;
  214.    ds1302_read_time();  //讀取時間
  215.    dis_time_buf[0]=(time_buf[0]>>4); //年   
  216.    dis_time_buf[1]=(time_buf[0]&0x0f);
  217.    
  218. ……………………

  219. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
13. 1602顯示屏測試 (12MHz).zip (591.93 KB, 下載次數: 49)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-9-3 17:41 | 顯示全部樓層
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

ID:228755 發表于 2018-9-4 10:18 | 顯示全部樓層
admin 發表于 2018-9-3 17:41
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣

時鐘芯片的RST引腳接單片機P0.0引腳,DAT接P0.1引腳,SCK接P0.2引腳,DAT有可能出現信號不穩的情況,可接上拉電阻,1602的RS接P5.5,RW接P5.4,EN接P5.3數據引腳接P4,可通過改變組織調整背光度

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:228755 發表于 2018-9-4 10:21 | 顯示全部樓層

1602的RS引腳接P5.5,RW接P5.4,EN接P5.3,數據引腳接P4,可通過調整電阻調整背光度,DS1302模塊的RST的引腳接P0^0;IO接P0^1;SCK接P0^2;IO引腳可根據具體情況選擇上拉電阻

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:422925 發表于 2018-11-9 15:12 來自手機 | 顯示全部樓層
用的單片機是iap15w4k58s4,LQFP48-JX嗎
回復

使用道具 舉報

ID:422925 發表于 2018-11-9 15:13 來自手機 | 顯示全部樓層
是實現數字時鐘的程序嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久国产越南 | 污视频在线免费观看 | www.日韩 | 天天拍天天操 | 一区二区三区四区不卡 | 福利片在线观看 | 亚洲天堂av一区 | 国产精品国产三级国产aⅴ无密码 | 亚洲aⅴ | 国产精品久久久久久婷婷天堂 | 国产在线观| 国产精品久久久久无码av | 国产精品久久久久久久久久免费 | 国产成人精品免费视频大全最热 | 成人精品毛片国产亚洲av十九禁 | 97人人澡人人爽91综合色 | 天天综合久久网 | 欧美日韩福利视频 | 日韩在线观看中文字幕 | 一区二区三区中文字幕 | 婷婷丁香激情 | 人人干在线视频 | 国产欧美日韩一区二区三区在线 | 精品国产乱码久久久久久影片 | 亚洲欧美日韩精品久久亚洲区 | 午夜羞羞| 手机av在线 | 欧美视频一区二区三区 | 嫩草视频在线看 | 爱爱免费视频 | 欧美伦理一区 | 久久91精品国产一区二区 | 亚洲成人播放器 | 99久久夜色精品国产亚洲96 | 日日射夜夜骑 | 国产亚洲精品久久午夜玫瑰园 | 美女久久久久久久久 | 三级在线免费观看 | 久久久久久一区 | 免费的色网站 | 色www精品视频在线观看 |