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

標題: protues仿真DS1302+LCD1602顯示實驗 [打印本頁]

作者: 回來哥啦    時間: 2019-10-15 11:30
標題: protues仿真DS1302+LCD1602顯示實驗
萌新小白,第一次發(fā)帖,望見諒!這是我以前做的一個實驗,用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)//寫入地址或者數(shù)據(jù)(控制字)
  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()//讀取數(shù)據(jù)
  42. {
  43.         uint i;
  44.         uchar date=0x00;
  45.   for(i=0;i<8;i++)
  46.         {
  47.                 date>>=1;
  48.                 if(IO==1)//如果讀取出來的值是1,則將數(shù)據(jù)定為1,不是就定為0
  49.                 date|=0x80;
  50.                 SCLK=1;
  51.                 delay_ms(2);
  52.                 SCLK=0;
  53.         }
  54.         return date/16*10+date%16;//16進制轉(zhuǎn)換成10進制
  55. }
  56. void write_time(uchar addr,uchar date)//寫入你要修改的時間值
  57. {
  58.         RST=0;//初始化CE線,復(fù)位
  59.         SCLK=0;//時鐘總線清零
  60.         RST=1;//CE置1,傳輸開始
  61.         write_ds1302(addr);//傳入你要寫入的時間(時間或者日歷地址)
  62.         write_ds1302(date);//寫入你要修改的時間值
  63.         SCLK=1;//時間線拉高
  64.         RST=0;//寫入結(jié)束
  65. }
  66. uchar read_time(uchar addr)//讀取你需要的時間值
  67. {
  68.         uchar dat;
  69.         RST=0;//初始化CE線,復(fù)位
  70.         SCLK=0;//時鐘總線清零
  71.         RST=1;//CE置1,傳輸開始
  72.         write_ds1302(addr);//傳入你要讀取的時間地址
  73.         dat=read_ds1302();//讀取時間值
  74.         SCLK=1;//時間線拉高
  75.         RST=0;//讀取結(jié)束
  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)//寫入數(shù)據(jù),這次是寫入字符碼,顯示在液晶屏上
  89. {
  90.         LCD_RS=1;//寫數(shù)據(jù)
  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)//設(shè)置顯示位置
  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)//將日期和時間值轉(zhuǎn)換成數(shù)字字符
  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. }
復(fù)制代碼

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


作者: 8imi8    時間: 2019-10-20 11:58
感謝分享
作者: 露西亞想沙    時間: 2019-12-21 19:10
十分感謝

作者: qq1306575750    時間: 2019-12-24 17:04
感謝大佬分享,最近實訓需要參考。
作者: swustlx86    時間: 2020-5-12 01:42
感謝分享            




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久久久久香蕉 | 就操在线 | 黄色三级毛片 | 中文字幕日韩欧美一区二区三区 | 毛片在线看看 | 91欧美| 久久精品欧美一区二区三区不卡 | 亚洲精品久久久久久一区二区 | 日韩av啪啪网站大全免费观看 | 欧美成人精品欧美一级 | 国内自拍偷拍一区 | 日韩不卡三区 | 精品欧美一区二区三区久久久 | 一区二区三区四区不卡 | 秋霞电影一区二区三区 | 91视频官网| 亚洲欧美日本国产 | 粉嫩av| 啪啪毛片| 亚洲一区二区国产 | 国产视频久久久 | 日日日操 | 亚州综合在线 | 一区免费视频 | 欧美八区 | 久久久五月天 | 亚洲香蕉在线视频 | 青青草华人在线视频 | 亚洲精品一区国产精品 | 亚洲九九色 | 欧美一级毛片在线播放 | 欧美一区二区三区,视频 | 羞羞视频网站 | 一级a性色生活片久久毛片波多野 | 日韩三级免费观看 | 国产精品久久久久久久久久了 | 久久一级免费视频 | 懂色av一区二区三区在线播放 | 免费欧美 | 久久黄色精品视频 | 中文字幕 欧美 日韩 |