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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

求幫忙 程序有錯(cuò)誤不會(huì)改

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


  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         //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí)
  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);                //等待數(shù)據(jù)穩(wěn)定

  26.         LCD1602_E = 1;                  //寫入時(shí)序
  27.         Lcd1602_Delay1ms(5);          //保持時(shí)間
  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;         //寫入時(shí)序
  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;         //寫入時(shí)序
  45.         Lcd1602_Delay1ms(5);
  46.         LCD1602_E = 0;
  47. }
  48. #endif
  49.                   
  50. #ifndef         LCD1602_4PINS                  
  51. void LcdWriteData(uchar dat)                        //寫入數(shù)據(jù)
  52. {
  53.         LCD1602_E = 0;        //使能清零
  54.         LCD1602_RS = 1;        //選擇輸入數(shù)據(jù)
  55.         LCD1602_RW = 0;        //選擇寫入

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

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

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

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

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

  75.         LCD1602_E = 1;          //寫入時(shí)序
  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);  //開顯示不顯示光標(biāo)
  86.         LcdWriteCom(0x06);  //寫一個(gè)指針加1
  87.         LcdWriteCom(0x01);  //清屏
  88.         LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
  89. }
  90. #else
  91. void LcdInit()                                                  //LCD初始化子程序
  92. {
  93.         LcdWriteCom(0x32);         //將8位總線轉(zhuǎn)為4位總線
  94.         LcdWriteCom(0x28);         //在四位線下的初始化
  95.         LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
  96.         LcdWriteCom(0x06);  //寫一個(gè)指針加1
  97.         LcdWriteCom(0x01);  //清屏
  98.         LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
  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;//數(shù)據(jù)從低位開始傳送
  117.                 addr >>= 1;
  118.                 SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
  119.                 _nop_();
  120.                 SCLK = 0;
  121.                 _nop_();
  122.         }
  123.         for (n=0; n<8; n++)//寫入8位數(shù)據(jù)
  124.         {
  125.                 DSIO = dat & 0x01;
  126.                 dat >>= 1;
  127.                 SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
  128.                 _nop_();
  129.                 SCLK = 0;
  130.                 _nop_();        
  131.         }        
  132.                  
  133.         RST = 0;//傳送數(shù)據(jù)結(jié)束
  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;//數(shù)據(jù)從低位開始傳送
  148.                 addr >>= 1;
  149.                 SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)
  150.                 _nop_();
  151.                 SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
  152.                 _nop_();
  153.         }
  154.         _nop_();
  155.         for(n=0; n<8; n++)//讀取8位數(shù)據(jù)
  156.         {
  157.                 dat1 = DSIO;//從最低位開始接收
  158.                 dat = (dat>>1) | (dat1<<7);
  159.                 SCLK = 1;
  160.                 _nop_();
  161.                 SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)
  162.                 _nop_();
  163.         }

  164.         RST = 0;
  165.         _nop_();        //以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。
  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);                 //禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能
  178.         for (n=0; n<3; n++)//寫入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
  179.         {
  180.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[0][n]);        
  181.         }
  182.         Ds1302Write(0x8E,0x80);                 //打開寫保護(hù)功能
  183. }

  184. void Ds1302ReadTime()
  185. {
  186.         uchar n;
  187.         for (n=0; n<3; n++)//讀取7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年
  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);                                //時(shí)
  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. }

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www日| 成人精品视频在线观看 | a级毛片免费高清视频 | 日本在线网址 | 国产一区二区三区四区 | 天天操夜夜操 | 精品国产乱码久久久久久丨区2区 | 亚洲一区二区三区免费在线观看 | 国产一区二区三区不卡av | 乱一性一乱一交一视频a∨ 色爱av | 我想看一级黄色毛片 | 精品少妇v888av | 日韩av免费在线观看 | 欧美男男videos | 午夜影视免费片在线观看 | 国产精品一区在线观看你懂的 | 一区二区三区国产视频 | 涩涩视频在线观看 | 精品无码三级在线观看视频 | 国产一区二区免费在线 | 懂色中文一区二区三区在线视频 | 红桃成人在线 | 在线播放一区二区三区 | 成人亚洲视频 | 欧美一卡二卡在线 | 亚洲精品乱码久久久久久黑人 | 91在线精品视频 | 精品欧美一区二区精品久久 | 激情视频网站 | 在线观看免费av网 | 在线国产一区二区三区 | 国产日韩欧美在线一区 | 亚洲 欧美 另类 日韩 | 欧美一级二级在线观看 | 91精品国产一区二区三区 | 午夜免费视频 | 91色视频在线| 毛片免费在线观看 | 日韩欧美第一页 | 成人国产在线视频 | 国产精品久久久一区二区三区 |