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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

protues仿真DS1302+LCD1602顯示實驗

[復制鏈接]
跳轉到指定樓層
樓主
萌新小白,第一次發帖,望見諒!這是我以前做的一個實驗,用protues仿真,DS1302讀取時間,LCD1602顯示出讀取的時間。
附件帶源文件和仿真工程。
實驗效果圖:


單片機源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define WRITE_SECOND 0x80
  5. #define WRITE_MINUTE 0x82
  6. #define WRITE_HOUR 0x84
  7. #define READ_SECOND 0x81
  8. #define READ_MINUTE 0x83
  9. #define READ_HOUR 0x85
  10. #define WRITE_PROTECT 0x8E
  11. sbit IO=P1^0;
  12. sbit SCLK=P1^1;
  13. sbit RST=P1^2;
  14. sbit LCD_RS=P2^0;
  15. sbit LCD_RW=P2^1;
  16. sbit LCD_E=P2^2;
  17. uchar DATE[]={"DATE:2000-00-00"};
  18. uchar TIME[]={"TIME:00:00:00  "};
  19. uchar date_time[7];
  20. void delay_ms(uint x)
  21. {
  22.         uint i,j;
  23.         for(i=x;i>0;i--)
  24.         {
  25.                 for(j=112;j>0;j--);
  26.         }
  27. }
  28.         void write_ds1302(uchar date)//寫入地址或者數據(控制字)
  29. {
  30.         uint i;
  31.         SCLK=0;//開始準備傳輸
  32.         for(i=0;i<8;i++)
  33.         {
  34.                 IO=date&0x01;//讀取每一位的值
  35.                 SCLK=1;
  36.                 delay_ms(2);
  37.                 SCLK=0;
  38.                 date>>=1;//右移一位
  39.         }
  40. }
  41. uchar read_ds1302()//讀取數據
  42. {
  43.         uint i;
  44.         uchar date=0x00;
  45.   for(i=0;i<8;i++)
  46.         {
  47.                 date>>=1;
  48.                 if(IO==1)//如果讀取出來的值是1,則將數據定為1,不是就定為0
  49.                 date|=0x80;
  50.                 SCLK=1;
  51.                 delay_ms(2);
  52.                 SCLK=0;
  53.         }
  54.         return date/16*10+date%16;//16進制轉換成10進制
  55. }
  56. void write_time(uchar addr,uchar date)//寫入你要修改的時間值
  57. {
  58.         RST=0;//初始化CE線,復位
  59.         SCLK=0;//時鐘總線清零
  60.         RST=1;//CE置1,傳輸開始
  61.         write_ds1302(addr);//傳入你要寫入的時間(時間或者日歷地址)
  62.         write_ds1302(date);//寫入你要修改的時間值
  63.         SCLK=1;//時間線拉高
  64.         RST=0;//寫入結束
  65. }
  66. uchar read_time(uchar addr)//讀取你需要的時間值
  67. {
  68.         uchar dat;
  69.         RST=0;//初始化CE線,復位
  70.         SCLK=0;//時鐘總線清零
  71.         RST=1;//CE置1,傳輸開始
  72.         write_ds1302(addr);//傳入你要讀取的時間地址
  73.         dat=read_ds1302();//讀取時間值
  74.         SCLK=1;//時間線拉高
  75.         RST=0;//讀取結束
  76.         return dat;
  77. }
  78. void LCD_write_commd(uchar com)//寫入命令,如顯示地址或者是寫入CGRAM,此次代碼沒有這個功能
  79. {
  80.         LCD_RS=0;//寫命令
  81.         LCD_RW=0;
  82.         P0=com;
  83.         delay_ms(2);
  84.         LCD_E=1;
  85.         delay_ms(2);
  86.         LCD_E=0;
  87. }
  88. void LCD_write_date(uchar dat)//寫入數據,這次是寫入字符碼,顯示在液晶屏上
  89. {
  90.         LCD_RS=1;//寫數據
  91.         LCD_RW=0;
  92.         P0=dat;
  93.         delay_ms(2);
  94.         LCD_E=1;
  95.         delay_ms(2);
  96.         LCD_E=0;
  97. }
  98. void init_LCD1602()//初始化
  99. {
  100.         LCD_write_commd(0x38);
  101.         delay_ms(2);
  102.         LCD_write_commd(0x0c);
  103.         delay_ms(2);
  104.         LCD_write_commd(0x06);
  105.         delay_ms(2);
  106.         LCD_write_commd(0x01);
  107.         delay_ms(2);
  108. }
  109. void set_lcd_pos(uchar p)//設置顯示位置
  110. {
  111.         LCD_write_commd(p|0x80);
  112. }
  113. void LCD_print(uchar p,uchar *s)//顯示
  114. {
  115.         uint i;
  116.         set_lcd_pos(p);
  117.         for(i=0;i<16;i++)
  118.         {
  119.                 LCD_write_date(s[i]);
  120.                 delay_ms(10);
  121.   }
  122. }
  123. void Get_time()//讀取時間
  124. {
  125.         uchar i,addr=0x81;
  126.         for(i=0;i<7;i++)
  127.         {
  128.                 date_time[i]=read_time(addr);
  129.                 addr+=2;
  130.         }
  131. }
  132. void Format_Datetime(uchar d,uchar *a)//將日期和時間值轉換成數字字符
  133. {
  134.         a[0]=d/10+'0';
  135.         a[1]=d%10+'0';
  136. }
  137. void init_DS1302()//DS1302初始化
  138. {
  139.         write_time(WRITE_PROTECT,0x00);
  140.         write_time(WRITE_SECOND,0x56);
  141.         write_time(WRITE_MINUTE,0x34);
  142.         write_time(WRITE_HOUR,0x12);
  143.         write_time(WRITE_PROTECT,0x80);
  144.        
  145. }
  146. void main()
  147. {
  148.         //init_DS1302();
  149.         init_LCD1602();//初始化液晶屏
  150.         while(1)
  151.         {
  152.                 Get_time();
  153.           Format_Datetime(date_time[6],DATE+7);
  154.           Format_Datetime(date_time[4],DATE+10);
  155.           Format_Datetime(date_time[3],DATE+13);
  156.           Format_Datetime(date_time[2],TIME+5);
  157.           Format_Datetime(date_time[1],TIME+8);
  158.           Format_Datetime(date_time[0],TIME+11);
  159.     LCD_print(0x00,DATE);
  160.           LCD_print(0x40,TIME);
  161.         }
  162.        
  163. }
復制代碼

所有資料51hei提供下載:
DS1302 LCD1602顯示.rar (64.47 KB, 下載次數: 92)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:84745 發表于 2019-10-20 11:58 來自手機 | 只看該作者
感謝分享
回復

使用道具 舉報

板凳
ID:670001 發表于 2019-12-21 19:10 | 只看該作者
十分感謝
回復

使用道具 舉報

地板
ID:621620 發表于 2019-12-24 17:04 | 只看該作者
感謝大佬分享,最近實訓需要參考。
回復

使用道具 舉報

5#
ID:302325 發表于 2020-5-12 01:42 | 只看該作者
感謝分享            
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线观看 | 中国美女av | 欧美成人影院在线 | 成人在线观看黄 | 日韩av美女电影 | 亚洲精品一区二区三区在线 | 一区欧美| 日韩视频精品在线 | 美美女高清毛片视频免费观看 | 九九视频在线观看视频6 | 一级全黄视频 | 日韩伦理电影免费在线观看 | 国产欧美一区二区在线观看 | 国产一区二区三区欧美 | 在线日韩视频 | 国产精品美女在线观看 | 中文字幕一区二区视频 | 作爱视频免费观看 | 天天天天天天天干 | 欧美黑人狂野猛交老妇 | 久久久久久国产一区二区三区 | 国产精品久久国产精品久久 | 日本不卡一区二区三区在线观看 | 亚洲人成人一区二区在线观看 | 97视频精品 | 青青草av在线播放 | 久久夜视频 | 久久久久久久99 | 国产午夜精品一区二区三区四区 | 亚洲视频精品在线 | 成人综合视频在线 | 一区二区国产精品 | 91精品久久久久久久久久入口 | 一区二区日韩 | 日本一区二区高清不卡 | 久久久精品 | 国产精品夜色一区二区三区 | 337p日本欧洲亚洲大胆鲁鲁 | 国产精品视频一二三区 | 亚洲午夜精品视频 | 欧美日韩精品在线一区 |