找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1646|回復: 0
打印 上一主題 下一主題
收起左側(cè)

stc15f2k60s2單片機1302-1602程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:392097 發(fā)表于 2018-8-31 19:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<stc15f2k60s2.h>
  2. #include<intrins.h>
  3. #include<string.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit RST=P1^2;
  7. sbit IO=P1^0;
  8. sbit SCLK=P1^1;
  9. sbit RS=P5^5;
  10. sbit RW=P5^4;
  11. sbit EN=P5^3;

  12. uchar *WEEK[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"};
  13. uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00   "};
  14. uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00   "};
  15. uchar DateTime[7];

  16. void DelayMS(uint x)
  17. {
  18.    uchar i;
  19.    while(x--) for(i=0;i<120;i++);
  20. }

  21. void Write_A_Byte_TO_DS1302(uchar x)
  22. {
  23.    uchar i;
  24.    for(i=0;i<8;i++)
  25.    {
  26.    IO = x & 0x01; SCLK =1; SCLK = 0; x >>= 1;
  27.     }
  28. }

  29. uchar Get_A_Byte_FROM_DS1302()
  30. {
  31.   uchar i,b=0x00;
  32.   for(i=0;i<8;i++)
  33.   {
  34.     b |=_crol_((uchar)IO,i);
  35.     SCLK=1;SCLK=0;
  36.    }
  37.    return b / 16 * 10 + b % 16;
  38. }

  39. uchar Read_Data(uchar addr)
  40. {
  41.    uchar dat;
  42.    RST = 0; SCLK = 0;RST = 1;
  43.    Write_A_Byte_TO_DS1302(addr);
  44.    dat = Get_A_Byte_FROM_DS1302();
  45.    SCLK = 1; RST = 0;
  46.    return dat;
  47. }

  48. void GetTime()
  49. {
  50.    uchar i,addr = 0x81;
  51.    for (i = 0; i < 7;i++)
  52.    {
  53.       DateTime[i] = Read_Data(addr); addr += 2;
  54.     }
  55. }

  56. uchar Read_LCD_State()
  57. {
  58.    uchar state;
  59.    RS = 0; RW = 1; EN = 1; DelayMS(1); state = P0; EN = 0; DelayMS(1);
  60.    return state;
  61. }

  62. void LCD_Busy_Wait()
  63. {
  64.    while((Read_LCD_State() & 0x80) == 0x80);
  65.    DelayMS(5);
  66. }

  67. void Write_LCD_Data(uchar dat)
  68. {
  69.    LCD_Busy_Wait();
  70.    RS = 1; RW = 0; EN = 0; P0 = dat; EN = 1; DelayMS(1); EN = 0;
  71. }

  72. void Write_LCD_Command(uchar cmd)
  73. {
  74.    LCD_Busy_Wait();
  75.    RS = 0; RW = 0; EN = 0; P0 = cmd; EN = 1; DelayMS(1); EN = 0;
  76. }

  77. void Init_LCD()
  78. {
  79.    Write_LCD_Command(0x38); DelayMS(1);
  80.    Write_LCD_Command(0x01); DelayMS(1);
  81.    Write_LCD_Command(0x06); DelayMS(1);
  82.    Write_LCD_Command(0x0C); DelayMS(1);
  83. }

  84. void Set_LCD_POS(uchar p)
  85. {
  86.    Write_LCD_Command(p | 0x80);
  87. }

  88. void Display_LCD_String(uchar p,uchar *s)
  89. {
  90.    uchar i;
  91.    Set_LCD_POS(p);
  92.    for (i = 0;i < 16; i++)
  93.    {
  94.        Write_LCD_Data(s[i]);
  95.        DelayMS(1);
  96.     }
  97. }

  98. void Format_DateTime(uchar d, uchar *a)
  99. {
  100.    a[0] = d / 10 + '0'; a[1] = d % 10 + '0';
  101. }

  102. void main()
  103. {
  104.    Init_LCD();
  105.    while(1)
  106.    {
  107.       GetTime();
  108.       Format_DateTime(DateTime[6],LCD_DSY_BUFFER1 + 5);
  109.       Format_DateTime(DateTime[4],LCD_DSY_BUFFER1 + 8);
  110.       Format_DateTime(DateTime[3],LCD_DSY_BUFFER1 + 11);

  111.       strcpy(LCD_DSY_BUFFER1 + 13,WEEK[DateTime[5]]);

  112.       Format_DateTime(DateTime[2],LCD_DSY_BUFFER1 + 5);
  113.       Format_DateTime(DateTime[1],LCD_DSY_BUFFER1 + 8);
  114.       Format_DateTime(DateTime[0],LCD_DSY_BUFFER1 + 11);

  115.       Display_LCD_String(0x00,LCD_DSY_BUFFER1);
  116.       Display_LCD_String(0x40,LCD_DSY_BUFFER2);
  117.     }
  118. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表