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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD數(shù)字時鐘proteus仿真文件及程序詳細注釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:117061 發(fā)表于 2016-4-27 15:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
希望能幫助到大家




  1. /***************************************************/
  2. #include<reg51.h>     //包含單片機寄存器的頭文件
  3. #include<intrins.h>   //包含_nop_()函數(shù)定義的頭文件
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. uchar temp,count=0;
  7. /***********************************************************************
  8. 以下是DS1302芯片的操作程序
  9. ************************************************************************/
  10. uchar code digit[10]={"0123456789"};   //定義字符數(shù)組顯示數(shù)字
  11. uchar *digit1[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"}; //周日,周一到周六
  12. sbit DATA=P3^7;   //位定義1302芯片的接口,數(shù)據(jù)輸出端定義在P1.1引腳
  13. sbit RST=P3^5;    //位定義1302芯片的接口,復位端口定義在P1.1引腳
  14. sbit SCLK=P3^6;   //位定義1302芯片的接口,時鐘輸出端口定義在P1.1引腳
  15. sbit key1=P3^0;          //停止按鈕
  16. sbit key2=P3^1;          //開始按鈕
  17. sbit add=P2^4;          //加值
  18. sbit subtract=P2^5;//減值
  19. sbit tiaoshi=P3^4; //定位
  20. /*****************************************************
  21. 函數(shù)功能:延時若干微秒
  22. 入口參數(shù):n
  23. ***************************************************/
  24. void delaynus(uchar n)
  25. {
  26. uchar i;
  27. for(i=0;i<n;i++)
  28.       ;
  29. }

  30. /*****************************************************
  31. 函數(shù)功能:向1302寫一個字節(jié)數(shù)據(jù)
  32. 入口參數(shù):x
  33. ***************************************************/
  34. void Write1302(uchar dat)
  35. {
  36.   uchar i;
  37.   SCLK=0;                            //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準備
  38.   delaynus(2);                       //稍微等待,使硬件做好準備
  39.   for(i=0;i<8;i++)              //連續(xù)寫8個二進制位數(shù)據(jù)
  40.     {
  41.             DATA=dat&0x01;            //取出dat的第0位數(shù)據(jù)寫入1302
  42.                 delaynus(2);        //稍微等待,使硬件做好準備
  43.                 SCLK=1;             //上升沿寫入數(shù)據(jù)
  44.                 delaynus(2);              //稍微等待,使硬件做好準備
  45.                 SCLK=0;                   //重新拉低SCLK,形成脈沖
  46.                 dat>>=1;                  //將dat的各數(shù)據(jù)位右移1位,準備寫入下一個數(shù)據(jù)位
  47.           }
  48.        
  49. }
  50. /*****************************************************
  51. 函數(shù)功能:根據(jù)命令字,向1302寫一個字節(jié)數(shù)據(jù)
  52. 入口參數(shù):Cmd,儲存命令字;dat,儲存待寫的數(shù)據(jù)
  53. ***************************************************/
  54. void WriteSet1302(uchar Cmd,uchar dat)
  55. {
  56.     RST=0;           //禁止數(shù)據(jù)傳遞
  57.     SCLK=0;          //確保寫數(shù)居前SCLK被拉低
  58.         RST=1;           //啟動數(shù)據(jù)傳輸
  59.         delaynus(2);     //稍微等待,使硬件做好準備
  60.         Write1302(Cmd);  //寫入命令字
  61.         Write1302(dat);  //寫數(shù)據(jù)
  62.         SCLK=1;          //將時鐘電平置于已知狀態(tài)
  63.         RST=0;           //禁止數(shù)據(jù)傳遞
  64. }
  65. /*****************************************************
  66. 函數(shù)功能:從1302讀一個字節(jié)數(shù)據(jù)
  67. 入口參數(shù):x
  68. ***************************************************/
  69. uchar Read1302(void)
  70. {
  71.            uchar i,dat;
  72.         delaynus(2);       //稍微等待,使硬件做好準備
  73.         for(i=0;i<8;i++)   //連續(xù)讀8個二進制位數(shù)據(jù)
  74.          {
  75.                    dat>>=1;       //將dat的各數(shù)據(jù)位右移1位,因為先讀出的是字節(jié)的最低位
  76.                 if(DATA==1)    //如果讀出的數(shù)據(jù)是1
  77.                  dat|=0x80;    //將1取出,寫在dat的最高位
  78.                  SCLK=1;       //將SCLK置于高電平,為下降沿讀出
  79.                  delaynus(2);  //稍微等待
  80.                  SCLK=0;       //拉低SCLK,形成脈沖下降沿
  81.                  delaynus(2);  //稍微等待
  82.           }         
  83.           return dat;        //將讀出的數(shù)據(jù)返回
  84. }  
  85. /*****************************************************
  86. 函數(shù)功能:根據(jù)命令字,從1302讀取一個字節(jié)數(shù)據(jù)
  87. 入口參數(shù):Cmd
  88. ***************************************************/
  89. uchar  ReadSet1302(uchar Cmd)
  90. {
  91.   uchar dat;
  92.   RST=0;                 //拉低RST
  93.   SCLK=0;                //確保寫數(shù)居前SCLK被拉低
  94.   RST=1;                 //啟動數(shù)據(jù)傳輸
  95.   Write1302(Cmd);        //寫入命令字
  96.   dat=Read1302();        //讀出數(shù)據(jù)
  97.   SCLK=1;                //將時鐘電平置于已知狀態(tài)
  98.   RST=0;                 //禁止數(shù)據(jù)傳遞
  99.   return dat;            //將讀出的數(shù)據(jù)返回
  100. }
  101. /*****************************************************
  102. 函數(shù)功能:設置ds1302是否寫保護
  103. 入口參數(shù):flag
  104. ***************************************************/
  105. void setprotect(bit flag)//設置保護
  106. {
  107. if(flag)
  108. WriteSet1302(0x8e,0x80);//寫入保護指令
  109. else
  110. WriteSet1302(0x8e,0x00);//寫入不保護指令
  111. }

  112. /*****************************************************
  113. 函數(shù)功能:設置ds1302是否工作
  114. 入口參數(shù):flag
  115. ***************************************************/
  116. void stoptime(bit  flag) // 是否將時鐘停止
  117. {
  118. uchar dat;
  119. dat=ReadSet1302(0x81);
  120. setprotect(0);
  121. if(flag)
  122. WriteSet1302(0x80, dat|0x80);
  123. else
  124.   WriteSet1302(0x80, dat&0x7f);
  125. }

  126. /*****************************************************
  127. 函數(shù)功能: 1302進行初始化設置
  128. ***************************************************/
  129. void Init_DS1302(void)
  130. {       
  131.     stoptime(0);                 //根據(jù)寫狀態(tài)寄存器命令字,寫入不保護指令
  132.     WriteSet1302(0x80,((0/10)<<4|(0%10)));   //根據(jù)寫秒寄存器命令字,寫入秒的初始值
  133.         WriteSet1302(0x82,((0/10)<<4|(0%10)));   //根據(jù)寫分寄存器命令字,寫入分的初始值
  134.         WriteSet1302(0x84,((12/10)<<4|(12%10))); //根據(jù)寫小時寄存器命令字,寫入小時的初始值
  135.         WriteSet1302(0x86,((01/10)<<4|(01%10))); //根據(jù)寫日寄存器命令字,寫入日的初始值
  136.         WriteSet1302(0x88,((06/10)<<4|(06%10))); //根據(jù)寫月寄存器命令字,寫入月的初始值
  137.         WriteSet1302(0x8c,((10/10)<<4|(10%10)));   //根據(jù)寫小時寄存器命令字,寫入小時的初始值
  138.     WriteSet1302(0x8a,0x01);   //根據(jù)寫小時寄存器命令字,寫入小時的初始值
  139. }
  140. /*******************************************************************************
  141. 以下是對液晶模塊的操作程序
  142. *******************************************************************************/
  143. sbit RS=P2^0;           //寄存器選擇位,將RS位定義為P2.0引腳
  144. sbit RW=P2^1;           //讀寫選擇位,將RW位定義為P2.1引腳
  145. sbit E=P2^2;            //使能信號位,將E位定義為P2.2引腳
  146. sbit BF=P1^7;           //忙碌標志位,,將BF位定義為P0.7引腳
  147. /*****************************************************
  148. 函數(shù)功能:延時1ms
  149. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
  150. ***************************************************/
  151. void delay1ms()
  152. {
  153.    unsigned char i,j;       
  154.          for(i=0;i<10;i++)
  155.           for(j=0;j<33;j++)
  156.            ;                 
  157. }
  158. /*****************************************************
  159. 函數(shù)功能:延時若干毫秒
  160. 入口參數(shù):n
  161. ***************************************************/
  162. void delaynms(unsigned char n)
  163. {
  164.    unsigned char i;
  165.         for(i=0;i<n;i++)
  166.            delay1ms();
  167. }
  168. /*****************************************************
  169. 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)
  170. 返回值:result。result=1,忙碌;result=0,不忙
  171. ***************************************************/
  172. bit BusyTest(void)
  173.   {
  174.     bit result;
  175.         RS=0;        //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)
  176.     RW=1;
  177.     E=1;         //E=1,才允許讀寫
  178.     _nop_();     //空操作
  179.     _nop_();
  180.     _nop_();
  181.     _nop_();     //空操作四個機器周期,給硬件反應時間       
  182.     result=BF;   //將忙碌標志電平賦給result
  183.     E=0;         //將E恢復低電平
  184.     return result;
  185.   }
  186. /*****************************************************
  187. 函數(shù)功能:將模式設置指令或顯示地址寫入液晶模塊
  188. 入口參數(shù):dictate
  189. ***************************************************/
  190. void WriteInstruction (uchar dictate)
  191. {   
  192.      while(BusyTest()==1);   //如果忙就等待
  193.          RS=0;                   //根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令
  194.          RW=0;   
  195.          E=0;                    //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,
  196.                              // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"
  197.          _nop_();
  198.          _nop_();                //空操作兩個機器周期,給硬件反應時間
  199.          P1=dictate;             //將數(shù)據(jù)送入P0口,即寫入指令或地址
  200.          _nop_();
  201.          _nop_();
  202.          _nop_();
  203.          _nop_();                //空操作四個機器周期,給硬件反應時間
  204.          E=1;                    //E置高電平
  205.          _nop_();
  206.          _nop_();
  207.          _nop_();
  208.          _nop_();                //空操作四個機器周期,給硬件反應時間
  209.           E=0;                   //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令
  210. }
  211. /*****************************************************
  212. 函數(shù)功能:指定字符顯示的實際地址
  213. 入口參數(shù):x
  214. ***************************************************/
  215. void WriteAddress(uchar x)
  216. {
  217.      WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"
  218. }
  219. /*****************************************************
  220. 函數(shù)功能:將數(shù)據(jù)(字符的標準ASCII碼)寫入液晶模塊
  221. 入口參數(shù):y(為字符常量)
  222. ***************************************************/
  223. void WriteData(uchar y)
  224. {
  225.       while(BusyTest()==1);  
  226.           RS=1;           //RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)
  227.           RW=0;
  228.           E=0;            //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,
  229.                       // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"
  230.           P1=y;           //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊
  231.           _nop_();
  232.           _nop_();
  233.           _nop_();
  234.       _nop_();        //空操作四個機器周期,給硬件反應時間
  235.           E=1;            //E置高電平
  236.           _nop_();
  237.           _nop_();
  238.           _nop_();
  239.           _nop_();        //空操作四個機器周期,給硬件反應時間
  240.           E=0;            //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令
  241. }
  242. /*****************************************************
  243. 函數(shù)功能:對LCD的顯示模式進行初始化設置
  244. ***************************************************/
  245. void LcdInitiate(void)
  246. {
  247.     delaynms(15);               //延時15ms,首次寫指令時應給LCD一段較長的反應時間
  248.     WriteInstruction(0x38);     //顯示模式設置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口
  249.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  250.     WriteInstruction(0x38);
  251.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  252.         WriteInstruction(0x38);     //連續(xù)三次,確保初始化成功
  253.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  254.         WriteInstruction(0x0c);     //顯示模式設置:顯示開,無光標,光標不閃爍
  255.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  256.         WriteInstruction(0x06);     //顯示模式設置:光標右移,字符不移
  257.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  258.         WriteInstruction(0x01);     //清屏幕指令,將以前的顯示內(nèi)容清除
  259.         delaynms(5);                //延時5ms ,給硬件一點反應時間

  260. }
  261. /**************************************************************
  262. 以下是1302數(shù)據(jù)的顯示程序
  263. **************************************************************/
  264. /*****************************************************
  265. 函數(shù)功能:顯示秒
  266. 入口參數(shù):x
  267. ***************************************************/
  268. void DisplaySecond(uchar x)
  269. {
  270.     uchar i,j;                      
  271.         i=x/10;                             //取十位
  272.         j=x%10;                                        //取個位     
  273.         WriteAddress(0x49);            //寫顯示地址,將在第2行第10列開始顯示
  274.         WriteData(digit[i]);    //將十位數(shù)字的字符常量寫入LCD
  275.         WriteData(digit[j]);    //將個位數(shù)字的字符常量寫入LCD
  276.         delaynms(50);                 //延時1ms給硬件一點反應時間   
  277. }

  278. /*****************************************************
  279. 函數(shù)功能:顯示分鐘
  280. 入口參數(shù):x
  281. ***************************************************/
  282. void DisplayMinute(uchar x)
  283. {
  284.         uchar i,j;                              
  285.         i=x/10;                                         //取十位
  286.         j=x%10;                                         //取個位     
  287.         WriteAddress(0x46);            //寫顯示地址,將在第2行第7列開始顯示
  288.         WriteData(digit[i]);            //將十位數(shù)字的字符常量寫入LCD
  289.         WriteData(digit[j]);            //將個位數(shù)字的字符常量寫入LCD
  290.         delaynms(50);                 //延時1ms給硬件一點反應時間   
  291. }
  292. /*****************************************************
  293. 函數(shù)功能:顯示小時
  294. 入口參數(shù):x
  295. ***************************************************/
  296. void DisplayHour(unsigned char x)
  297. {
  298.         uchar i,j;                            
  299.         i=x/10;                                        //取十位
  300.         j=x%10;                                        //取個位     
  301.         WriteAddress(0x43);            //寫顯示地址,將在第2行第4列開始顯示
  302.         WriteData(digit[i]);    //將十位數(shù)字的字符常量寫入LCD
  303.         WriteData(digit[j]);    //將個位數(shù)字的字符常量寫入LCD
  304.         delaynms(50);                 //延時1ms給硬件一點反應時間   
  305. }
  306. /*****************************************************
  307. 函數(shù)功能:顯示日
  308. 入口參數(shù):x
  309. ***************************************************/
  310. void DisplayDay(uchar x)
  311. {
  312.         uchar i,j;                   
  313.         i=x/10;                                   //取十位
  314.         j=x%10;                                   //取個位     
  315.         WriteAddress(0x09);    //寫顯示地址,將在第1行第10列開始顯示
  316.         WriteData(digit[i]);   //將十位數(shù)字的字符常量寫入LCD
  317.         WriteData(digit[j]);   //將個位數(shù)字的字符常量寫入LCD
  318.         delaynms(50);          //延時1ms給硬件一點反應時間   
  319. }
  320. /*****************************************************
  321. 函數(shù)功能:顯示星期
  322. 入口參數(shù):x
  323. ***************************************************/
  324. void DisplayWeek(uchar x)
  325. {        uchar i;
  326.     WriteAddress(0x0c);    //寫顯示地址,將在第1行第13列開始顯示
  327.         for(i=0;i<3;i++)
  328.         WriteData(digit1[x][i]);
  329.         delaynms(50);
  330. }

  331. /*****************************************************
  332. 函數(shù)功能:顯示月
  333. 入口參數(shù):x
  334. ***************************************************/
  335. void DisplayMonth(uchar x)
  336. {
  337.         uchar i,j;                   
  338.         i=x/10;                                         //取十位
  339.         j=x%10;                                         //取個位     
  340.         WriteAddress(0x06);             //寫顯示地址,將在第1行10第列開始顯示
  341.         WriteData(digit[i]);     //將十位數(shù)字的字符常量寫入LCD
  342.         WriteData(digit[j]);     //將個位數(shù)字的字符常量寫入LCD
  343.         delaynms(50);            //延時1ms給硬件一點反應時間   
  344. }
  345. /*****************************************************
  346. 函數(shù)功能:顯示年
  347. 入口參數(shù):x
  348. ***************************************************/
  349. void DisplayYear(uchar x)
  350. {
  351.         uchar i,j;                             
  352.         i=x/10;                                          //取十位
  353.         j=x%10;                                          //取個位     
  354.         WriteAddress(0x01);       //寫顯示地址,將在第1行第7列開始顯示
  355.         WriteData(digit[2]);
  356.         WriteData(digit[0]);
  357.         WriteData(digit[i]);      //將十位數(shù)字的字符常量寫入LCD
  358.         WriteData(digit[j]);      //將個位數(shù)字的字符常量寫入LCD
  359.         delaynms(50);             //延時1ms給硬件一點反應時間   
  360. }

  361. /*****************************************************
  362. 函數(shù)功能:液晶顯示年月日以及時間
  363. ***************************************************/
  364. void displaytime()
  365. {
  366.   uchar second,minute,hour,day,month,year,week;      //分別儲存苗、分、小時,日,月,年
  367.   uchar ReadValue;     //儲存從1302讀取的數(shù)據(jù)
  368.   WriteAddress(0x05);  //寫年月分隔符的顯示地址, 顯示在第1行第9列
  369.   WriteData('-');      //將字符常量寫入LCD
  370.   WriteAddress(0x08);  //寫月日分隔符的顯示地址, 顯示在第1行第12列
  371.   WriteData('-');      //將字符常量寫入LCD
  372.   WriteAddress(0x45);  //寫小時與分鐘分隔符的顯示地址, 顯示在第2行第6列
  373.   WriteData(':');      //將字符常量寫入LCD
  374.   WriteAddress(0x48);  //寫分鐘與秒分隔符的顯示地址, 顯示在第2行第9列
  375.   WriteData(':');      //將字符常量寫入LCD
  376.   while(1)
  377.     {

  378.           ReadValue = ReadSet1302(0x81);                                                           //從秒寄存器讀數(shù)據(jù)
  379.       second    =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);        //將讀出數(shù)據(jù)轉化
  380.           DisplaySecond(second);                                                                  //顯示秒
  381.           ReadValue = ReadSet1302(0x83);                                                           //從分寄存器讀
  382.       minute    =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  383.           DisplayMinute(minute);                                                                       //顯示分
  384.       ReadValue = ReadSet1302(0x85);                                                          //從時寄存器讀
  385.       hour      =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  386.           DisplayHour(hour);                                                                     //顯示小時
  387.       ReadValue = ReadSet1302(0x87);                                                          //從日寄存器讀
  388.       day       =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  389.           DisplayDay(day);                                                                        //顯示日
  390.           ReadValue = ReadSet1302(0x8b);                                                          //從星期寄存器讀
  391.           week      =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  392.       DisplayWeek(week);                                                                                 //顯示星期
  393.           ReadValue = ReadSet1302(0x89);                                                           //從月寄存器讀
  394.       month     =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  395.           DisplayMonth(month);                                                                    //顯示月
  396.           ReadValue = ReadSet1302(0x8d);                                                          //從年寄存器讀
  397.       year      =((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);         //將讀出數(shù)據(jù)轉化
  398.           DisplayYear(year);                                                                      //顯示年
  399.          }
  400. }

  401. /*****************************************************
  402. 函數(shù)功能:主函數(shù)
  403. ***************************************************/
  404. void main(void)
  405. {

  406.   LcdInitiate();       //將液晶初始化
  407.   Init_DS1302();       //將1302初始化
  408.   IT0=1; //外部中斷0
  409.   EX0=1;
  410.   IT1=1;
  411.   EX1=1;
  412.   EA=1;
  413.   displaytime();       //顯示時間
  414. }
  415. /*****************************************************
  416. 函數(shù)功能:中斷函數(shù),實現(xiàn)時間的啟停
  417. ***************************************************/
  418. void  int0()  interrupt  0   //外部中斷0
  419. {
  420.    if(key1==0)  
  421.       {
  422.         stoptime(1);
  423.        }
  424.    else if(key2==0)  
  425.         {
  426.           stoptime(0);
  427.         }
  428. }

  429. /*****************************************************
  430. 函數(shù)功能:中斷函數(shù),實現(xiàn)時間參數(shù)的調整
  431. ***************************************************/
  432. void Setkey()  interrupt 2//外部中斷1,調整時間
  433. {
  434. if(tiaoshi==0)
  435. {
  436. count=count+1;
  437. if(count==4)count=0;
  438. }


  439. else if(add==0)
  440. {
  441. switch(count)
  442. {  
  443. case 1:
  444. temp=ReadSet1302(0x85);
  445. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  446. temp=temp+1;
  447. if(temp>=24)temp=0;
  448. temp=(temp/10)<<4|temp%10;
  449. WriteSet1302(0x84,temp);
  450. break;
  451. case 2:
  452. temp=ReadSet1302(0x83);
  453. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  454. temp=temp+1;
  455. if(temp>=60)temp=0;
  456. temp=(temp/10)<<4|temp%10;
  457. WriteSet1302(0x82,temp);
  458. break;
  459. case 3:
  460. temp=ReadSet1302(0x81);
  461. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  462. temp=temp+1;
  463. if(temp>=0x60)temp=0;
  464. temp=(temp/10)<<4|temp%10;
  465. WriteSet1302(0x80,temp);
  466. }
  467. while (add==0);
  468. }
  469. else if(subtract==0)
  470. {
  471. switch(count)
  472. {  
  473. case 1:
  474. temp=ReadSet1302(0x85);
  475. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  476. temp=temp-1;
  477. if(temp<=0)temp=23;
  478. temp=(temp/10)<<4|temp%10;
  479. WriteSet1302(0x84,temp);
  480. break;
  481. case 2:
  482. temp=ReadSet1302(0x83);
  483. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  484. temp=temp-1;
  485. if(temp<=0)temp=59;
  486. temp=(temp/10)<<4|temp%10;
  487. WriteSet1302(0x82,temp);
  488. break;
  489. case 3:
  490. temp=ReadSet1302(0x81);
  491. temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  492. temp=temp-1;
  493. if(temp<=0)temp=59;
  494. temp=(temp/10)<<4|temp%10;
  495. WriteSet1302(0x80,temp);
  496. }
  497. while (subtract==0);
  498. }
  499. }
復制代碼



LCD數(shù)字時鐘.zip

79.77 KB, 下載次數(shù): 67, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:221692 發(fā)表于 2017-7-22 23:19 | 只看該作者
謝謝樓主的分享
回復

使用道具 舉報

板凳
ID:339500 發(fā)表于 2018-5-28 10:20 | 只看該作者
十分感謝樓主的分享
回復

使用道具 舉報

地板
ID:455959 發(fā)表于 2018-12-26 22:36 | 只看該作者
期末課設 這個很不錯
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷综合久久久久中文一区二区 | 国产精品国产成人国产三级 | 中文字幕在线看第二 | 国产一区二区高清在线 | 日韩国产一区二区三区 | 黄色永久免费 | 免费看淫片 | 日韩精品网站 | 亚洲视频二区 | 国产视频久久 | 91久久国产综合久久91精品网站 | 亚洲激情av | 日本一道本视频 | 99只有精品 | 天天综合亚洲 | 一级黄色绿像片 | 成人三级电影 | 成人高清在线视频 | 久久精品小短片 | 成人日韩| 精品免费视频 | 成人国产精品久久 | 国产成人一区二区三区 | 亚洲精品久久久一区二区三区 | av手机在线看| 久久久久无码国产精品一区 | 91av入口| 欧美高清hd | 韩国毛片一区二区三区 | 日韩欧美在线不卡 | www.日本在线 | 新91视频网| 九九热在线视频观看这里只有精品 | 国产一区二区三区 | 国产视频在线观看一区二区三区 | 成人在线免费 | 国产成人免费 | 成人av片在线观看 | 亚洲精品一区二区 | 亚洲国产高清高潮精品美女 | 古典武侠第一页久久777 |