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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求幫忙 程序有錯誤不會改

[復制鏈接]
跳轉到指定樓層
樓主
ID:192801 發(fā)表于 2017-4-23 21:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


  1. #include<reg51.h>

  2. #include"lcd.h"


  3. void Lcd1602_Delay1ms(uint c);   //誤差 0us
  4. {  
  5.     uchar a,b;
  6.         for (; c>0; c--)
  7.         {
  8.                  for (b=199;b>0;b--)
  9.                  {
  10.                           for(a=1;a>0;a--);
  11.                  }      
  12.         }
  13.             
  14. }

  15. #ifndef         LCD1602_4PINS         //當沒有定義這個LCD1602_4PINS時
  16. /*



  17.   */
  18. void LcdWriteCom(uchar com)          //寫入命令
  19. {
  20.         LCD1602_E = 0;     //使能
  21.         LCD1602_RS = 0;           //選擇發(fā)送命令
  22.         LCD1602_RW = 0;           //選擇寫入
  23.         
  24.         LCD1602_DATAPINS = com;     //放入命令
  25.         Lcd1602_Delay1ms(1);                //等待數據穩(wěn)定

  26.         LCD1602_E = 1;                  //寫入時序
  27.         Lcd1602_Delay1ms(5);          //保持時間
  28.         LCD1602_E = 0;
  29. }
  30. #else
  31. void LcdWriteCom(uchar com)          //寫入命令
  32. {
  33.         LCD1602_E = 0;         //使能清零
  34.         LCD1602_RS = 0;         //選擇寫入命令
  35.         LCD1602_RW = 0;         //選擇寫入

  36.         LCD1602_DATAPINS = com;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  37.         Lcd1602_Delay1ms(1);

  38.         LCD1602_E = 1;         //寫入時序
  39.         Lcd1602_Delay1ms(5);
  40.         LCD1602_E = 0;

  41. //        Lcd1602_Delay1ms(1);
  42.         LCD1602_DATAPINS = com << 4; //發(fā)送低四位
  43.         Lcd1602_Delay1ms(1);

  44.         LCD1602_E = 1;         //寫入時序
  45.         Lcd1602_Delay1ms(5);
  46.         LCD1602_E = 0;
  47. }
  48. #endif
  49.                   
  50. #ifndef         LCD1602_4PINS                  
  51. void LcdWriteData(uchar dat)                        //寫入數據
  52. {
  53.         LCD1602_E = 0;        //使能清零
  54.         LCD1602_RS = 1;        //選擇輸入數據
  55.         LCD1602_RW = 0;        //選擇寫入

  56.         LCD1602_DATAPINS = dat; //寫入數據
  57.         Lcd1602_Delay1ms(1);

  58.         LCD1602_E = 1;   //寫入時序
  59.         Lcd1602_Delay1ms(5);   //保持時間
  60.         LCD1602_E = 0;
  61. }
  62. #else
  63. void LcdWriteData(uchar dat)                        //寫入數據
  64. {
  65.         LCD1602_E = 0;          //使能清零
  66.         LCD1602_RS = 1;          //選擇寫入數據
  67.         LCD1602_RW = 0;          //選擇寫入

  68.         LCD1602_DATAPINS = dat;        //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
  69.         Lcd1602_Delay1ms(1);

  70.         LCD1602_E = 1;          //寫入時序
  71.         Lcd1602_Delay1ms(5);
  72.         LCD1602_E = 0;

  73.         LCD1602_DATAPINS = dat << 4; //寫入低四位
  74.         Lcd1602_Delay1ms(1);

  75.         LCD1602_E = 1;          //寫入時序
  76.         Lcd1602_Delay1ms(5);
  77.         LCD1602_E = 0;
  78. }
  79. #endif
  80.                   
  81. #ifndef                LCD1602_4PINS
  82. void LcdInit()                                                  //LCD初始化子程序
  83. {
  84.          LcdWriteCom(0x38);  //開顯示
  85.         LcdWriteCom(0x0c);  //開顯示不顯示光標
  86.         LcdWriteCom(0x06);  //寫一個指針加1
  87.         LcdWriteCom(0x01);  //清屏
  88.         LcdWriteCom(0x80);  //設置數據指針起點
  89. }
  90. #else
  91. void LcdInit()                                                  //LCD初始化子程序
  92. {
  93.         LcdWriteCom(0x32);         //將8位總線轉為4位總線
  94.         LcdWriteCom(0x28);         //在四位線下的初始化
  95.         LcdWriteCom(0x0c);  //開顯示不顯示光標
  96.         LcdWriteCom(0x06);  //寫一個指針加1
  97.         LcdWriteCom(0x01);  //清屏
  98.         LcdWriteCom(0x80);  //設置數據指針起點
  99. }
  100. #endif

  101. #include"ds1302.h"

  102. uchar code READ_RTC_ADDR[3] = {0x81, 0x83, 0x85};
  103. uchar code WRITE_RTC_ADDR[3] = {0x80, 0x82, 0x84};

  104. uchar TIME[3][3] = {{0, 0, 0x12},{0},{0}};

  105. void Ds1302Write(uchar addr, uchar dat)
  106. {
  107.         uchar n;
  108.         RST = 0;
  109.         _nop_();

  110.         SCLK = 0;//先將SCLK置低電平。
  111.         _nop_();
  112.         RST = 1; //然后將RST(CE)置高電平。
  113.         _nop_();

  114.         for (n=0; n<8; n++)//開始傳送八位地址命令
  115.         {
  116.                 DSIO = addr & 0x01;//數據從低位開始傳送
  117.                 addr >>= 1;
  118.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  119.                 _nop_();
  120.                 SCLK = 0;
  121.                 _nop_();
  122.         }
  123.         for (n=0; n<8; n++)//寫入8位數據
  124.         {
  125.                 DSIO = dat & 0x01;
  126.                 dat >>= 1;
  127.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  128.                 _nop_();
  129.                 SCLK = 0;
  130.                 _nop_();        
  131.         }        
  132.                  
  133.         RST = 0;//傳送數據結束
  134.         _nop_();
  135. }

  136. uchar Ds1302Read(uchar addr)
  137. {
  138.         uchar n,dat,dat1;
  139.         RST = 0;
  140.         _nop_();

  141.         SCLK = 0;//先將SCLK置低電平。
  142.         _nop_();
  143.         RST = 1;//然后將RST(CE)置高電平。
  144.         _nop_();

  145.         for(n=0; n<8; n++)//開始傳送八位地址命令
  146.         {
  147.                 DSIO = addr & 0x01;//數據從低位開始傳送
  148.                 addr >>= 1;
  149.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  150.                 _nop_();
  151.                 SCLK = 0;//DS1302下降沿時,放置數據
  152.                 _nop_();
  153.         }
  154.         _nop_();
  155.         for(n=0; n<8; n++)//讀取8位數據
  156.         {
  157.                 dat1 = DSIO;//從最低位開始接收
  158.                 dat = (dat>>1) | (dat1<<7);
  159.                 SCLK = 1;
  160.                 _nop_();
  161.                 SCLK = 0;//DS1302下降沿時,放置數據
  162.                 _nop_();
  163.         }

  164.         RST = 0;
  165.         _nop_();        //以下為DS1302復位的穩(wěn)定時間,必須的。
  166.         SCLK = 1;
  167.         _nop_();
  168.         DSIO = 0;
  169.         _nop_();
  170.         DSIO = 1;
  171.         _nop_();
  172.         return dat;        
  173. }

  174. void Ds1302Init()
  175. {
  176.         uchar n;
  177.         Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
  178.         for (n=0; n<3; n++)//寫入7個字節(jié)的時鐘信號:分秒時日月周年
  179.         {
  180.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[0][n]);        
  181.         }
  182.         Ds1302Write(0x8E,0x80);                 //打開寫保護功能
  183. }

  184. void Ds1302ReadTime()
  185. {
  186.         uchar n;
  187.         for (n=0; n<3; n++)//讀取7個字節(jié)的時鐘信號:分秒時日月周年
  188.         {
  189.                 TIME[0][n] = Ds1302Read(READ_RTC_ADDR[n]);
  190.         }        
  191. }

  192. sbit key_mode = P2^0;
  193. sbit key_right = P2^1;
  194. sbit key_up = P2^2;
  195. sbit key_exit = P2^3;

  196. sbit key_light = P2^5;
  197. sbit key_check = P2^6;

  198. sbit led1 = P1^0;
  199. sbit led2 = P1^1;

  200. sbit PRT = P2^4;
  201. sbit check1 = P2^5;
  202. sbit check2 = P2^6;
  203. sbit check3 = P2^7;

  204. void Delay1ms(uint c);
  205. void LcdDisplay(uint i);
  206. void Timing();
  207. void Dec2BCD(uint i, uint j);

  208. unsigned int i = 0;
  209. unsigned int j = 0;
  210. unsigned int t = 0;
  211. unsigned int h = 0;
  212.         
  213. void main()
  214. {
  215.         led1 = 0;
  216.         led2 = 0;
  217.         PRT = 0;
  218.         LcdInit();
  219.         Timing();        
  220. }
  221. void Delay1ms(uint c)   //誤差 0us
  222. {
  223.     uchar a,b;
  224.         for (; c>0; c--)
  225.         {
  226.                  for (b=199;b>0;b--)
  227.                  {
  228.                           for(a=1;a>0;a--);
  229.                  }      
  230.         }
  231. }

  232. void LcdDisplay(uint i)
  233. {
  234.         LcdWriteCom(0x80);
  235.         if(i == 0)
  236.         {
  237.                 LcdWriteData('T');
  238.         }
  239.         if(i == 1)
  240.         {
  241.                 LcdWriteData('A');
  242.         }
  243.         if(i == 2)
  244.         {
  245.                 LcdWriteData('B');
  246.         }
  247.         LcdWriteData(':');
  248.         LcdWriteData('0'+TIME[i][2]/16);                                //時
  249.         LcdWriteData('0'+(TIME[i][2]&0x0f));                                 
  250.         LcdWriteData('-');
  251.         LcdWriteData('0'+TIME[i][1]/16);                                //分
  252.         LcdWriteData('0'+(TIME[i][1]&0x0f));        
  253.         LcdWriteData('-');
  254.         LcdWriteData('0'+TIME[i][0]/16);                                //秒
  255.         LcdWriteData('0'+(TIME[i][0]&0x0f));

  256.         LcdWriteCom(0x80+0x40);
  257.         LcdWriteData('L');
  258.         LcdWriteData('E');
  259.         LcdWriteData('D');
  260.         LcdWriteData('1');
  261.         LcdWriteData(':');
  262.         if(led1 == 1)
  263.         {
  264.                 LcdWriteData('T');
  265.         }
  266.         else
  267.         {
  268.                 LcdWriteData('F');
  269.         }
  270.         LcdWriteData(' ');
  271.         LcdWriteData(' ');
  272.         LcdWriteData(' ');
  273.         LcdWriteData('L');
  274.         LcdWriteData('E');
  275.         LcdWriteData('D');
  276.         LcdWriteData('2');
  277.         LcdWriteData(':');
  278.         if(led2 == 1)
  279.         {
  280.                 LcdWriteData('T');
  281.         }
  282.         else
  283.         {
  284.                 LcdWriteData('F');
  285.         }
  286. }
  287. void Timing()
  288. {
  289.         P2 = 0xff;
  290. A:        while(1)
  291.         {
  292.                 if(key_mode == 0)
  293.                 {
  294.                         Delay1ms(50);
  295.                         if(key_mode ==0)
  296.                         {
  297.                                 i++;
  298.                                 if(i > 2)
  299.                                 {
  300.                                         i = 0;
  301.                                 }
  302.                         }
  303.                         j=0;
  304.                 }
  305.                 if(key_right == 0)
  306.                 {
  307.                         Delay1ms(50);
  308.                         if(key_right == 0)
  309.                         {
  310.                                 j++;
  311.                                 if(j > 2)
  312.                                 {
  313.                                         j = 0;
  314.                                 }
  315.                         }
  316.                 }
  317.                 if(key_up == 0)
  318.                 {
  319.                         Delay1ms(50);
  320.                         if(key_up == 0)
  321.                         {
  322.                                 TIME[i][j]++;
  323.                                 if(TIME[i][j] == 0x0a)
  324.                                 {
  325.                                         TIME[i][j] = 0x10;
  326.                                 }                                       
  327.                                 else if(TIME[i][j] == 0x1a)
  328.                                 {
  329.                                         TIME[i][j] = 0x20;
  330.                                 }               
  331.                                 else if(TIME[i][j] == 0x2a)
  332.                                 {
  333.                                         TIME[i][j] = 0x30;
  334.                                 }
  335.                                 else if(TIME[i][j] == 0x3a)
  336.                                 {
  337.                                         TIME[i][j] = 0x40;
  338.                                 }
  339.                                 else if(TIME[i][j] == 0x4a)
  340.                                 {
  341.                                         TIME[i][j] = 0x50;
  342.                                 }
  343.                                 else if(TIME[i][j] == 0x5a)
  344.                                 {
  345.                                         TIME[i][j] = 0x00;
  346.                                 }
  347.                                 else if(j == 2 && TIME[i][j] == 0x24)
  348.                                 {
  349.                                         TIME[i][j] = 0x00;
  350.                                 }
  351.                         }
  352.                 }
  353.                 LcdDisplay(i);
  354.                 if(key_exit == 0)
  355.                 {
  356.                         Delay1ms(50);
  357.                         if(key_exit == 0)
  358.                         {
  359.                                 break;
  360.                         }
  361.                 }
  362.         }
  363.         Ds1302Init();
  364.         while(1)
  365.         {               
  366.                 Ds1302ReadTime();
  367.                 if(TIME[0][2] >= TIME[1][2])
  368.                 {
  369.                         if(TIME[0][1] >= TIME[1][1])
  370.                         {
  371.                                 led1 = 1;
  372.                                 led2 = 1;
  373.                         }
  374.                 }
  375.                 if(TIME[0][2] >= TIME[2][2])
  376.                 {
  377.                         if(TIME[0][1]>=TIME[2][1])
  378.                         {
  379.                                 led1 = 0;
  380.                                 led2 = 0;
  381.                         }
  382.                 }
  383.                
  384.                 if(key_light == 0)
  385.                 {
  386.                
  387.                 if(PRT == 0)
  388.                 {
  389.                         led1 = 0;
  390.                         led2 = 0;
  391.                 }
  392.                 if(PRT == 1)
  393.                 {
  394.                         led1 = 1;
  395.                         led2 = 1;
  396.                 }
  397.                 }

  398.                 if(key_check == 0)
  399.                 {
  400.                 if(check1 == 1)
  401.                 {
  402.                         led1 = 1;
  403.                         led2 = 0;
  404.                 }
  405.                 if(check2 == 1)
  406.                 {
  407.                         led1 = 0;
  408.                         led2 = 1;
  409.                 }
  410.                 if(check3 == 1)
  411.                 {
  412.                         led1 == 0;
  413.                         led2 == 0;
  414.                 }
  415.                 }
  416.                
  417.                 LcdDisplay(0);        
  418.                 if(key_exit == 0)
  419.                 {
  420.                         Delay1ms(50);
  421.                         if(key_exit == 0)
  422.                         {
  423.                                 goto A;
  424.                         }
  425.                 }  
  426.         }

  427. }

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频在线播放 | 亚洲在线一区 | 欧美国产日韩一区二区三区 | 午夜男人视频 | 久久视频免费看 | 伊人久久精品一区二区三区 | 日韩中文字幕网 | 夜夜爽99久久国产综合精品女不卡 | 精品国产伦一区二区三区观看方式 | 亚洲精品久久久一区二区三区 | 欧美精品一区二区三区在线播放 | 暖暖日本在线视频 | 黄色网址免费在线观看 | 99久久夜色精品国产亚洲96 | 国产高清视频 | 国产精品精品久久久 | 日韩中文字幕一区 | 9porny九色视频自拍 | 免费在线观看一级毛片 | 国产精品成av人在线视午夜片 | 综合久久av | 欧美最猛性xxxxx亚洲精品 | 成人三级视频在线观看 | 在线激情视频 | 不卡在线视频 | 中文字幕亚洲精品 | 午夜看电影在线观看 | 免费成人高清在线视频 | 久久久女女女女999久久 | 精品一区二区三区在线观看 | 亚洲欧美精品国产一级在线 | 日韩成人精品一区 | 羞羞的视频免费在线观看 | 黄色a级一级片 | 91丨国产| 91av在线电影 | 免费人成激情视频在线观看冫 | 自拍偷拍3p | 国产一区2区| 一区二区三区av夏目彩春 | 欧美人妖网站 |