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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

多功能單片機電子時鐘 有鬧鐘,可以計時,能測溫 仿真程序 帶DXP PCB文件

  [復制鏈接]
跳轉到指定樓層
樓主
①內容包括:單片機的最小系統的設計、DS18B20溫度采集模塊的設計、1602液晶顯示模塊的設計、DS1302定時模塊的設計、按鍵的設計、蜂鳴器的設計。
②使用Proteus軟件繪制仿真電路圖。
③ 完成相關程序的設計與調試:利用DS1302定時芯片完成時間的獲取;完成按鍵和顯示數碼的程序,四個按鍵修改當前日期,設置鬧鐘時間,并顯示在1602液晶顯示屏上;利用DS18B20溫度采集芯片完成對溫度的采集,并將采集結果顯示在1602液晶顯示屏上;完成蜂鳴器驅動電路,當按鍵時,蜂鳴器發出短促的蜂鳴聲,當鬧鐘設置的時間達到時,蜂鳴器發出漫長的蜂鳴聲。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>


  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /*------------------寄存器地址定義------------*/
  5. #define WRITE_SECOND                                0x80
  6. #define WRITE_MINUTE                                0x82
  7. #define WRITE_HOUR                                        0x84
  8. #define WRITE_DAY                                        0x86
  9. #define WRITE_MONTH                                        0x88
  10. #define WRITE_YEAR                                        0x8C
  11. #define WRITE_PROTECT                                0x8E
  12. #define WRITE_WEEK                                        0x8A
  13. #define WRITE_CURRENT               0x90

  14. #define READ_SECOND                                        0x81
  15. #define READ_MINUTE                                        0x83
  16. #define READ_HOUR                                        0x85
  17. #define READ_DAY                                        0x87
  18. #define READ_MONTH                                        0x89
  19. #define READ_WEEK                                        0x8B
  20. #define READ_YEAR                                        0x8D


  21. sbit RST=P3^5;            //DS1302片選
  22. sbit DIO=P3^3;           //DS1302數據信號
  23. sbit SCLK=P3^4;          //DS1302時鐘信號
  24. sbit ACC7=ACC^7;
  25. sbit ACC0=ACC^0;     
  26. unsigned int count=0;         
  27. sbit beep=P2^2;
  28. void INITIAL_1302();         
  29. unsigned char READ_1302(unsigned char addr);           
  30. void WRITE_1302(unsigned char addr,unsigned char date);
  31. sbit LCD_E=P1^7;         //液晶使能端
  32. sbit LCD_RS=P1^5;       //液晶數據命令選擇端
  33. sbit LCD_RW=P1^6;        //液晶讀寫選擇端
  34. sbit key0=P2^4;     //功能鍵
  35. sbit key1=P2^5;    //增大鍵
  36. sbit key2=P2^6;    //減小鍵
  37. sbit key3=P2^7;
  38. sbit DQ=P1^4;           //18b20溫度輸入輸出端
  39. char hour,minute,second,week,day,month,year,temm=1,chour=00,cminute=00,tmpl1,tmph1,tmsecond=00,tsecond=00,dminute=00,dsecond=00;
  40. uint tem;
  41. uint mt=1000,key33=0,ts=0;

  42. unsigned char num=0,flag;
  43. unsigned char str1[]="  -  -       :  ";
  44. unsigned char str2[]="  :  :      C   ";
  45. void speakerr(uint a);
  46. void delay(unsigned char z);
  47. void delay4(uint a);
  48. void LCD_WRITE_COM(unsigned char com);
  49. void LCD_WRITE_DATA(unsigned char date);
  50. void LCD_WRITE_SFM(unsigned char addr,unsigned char date);
  51. void LCD_WRITE_NYR(unsigned char addr,unsigned char date);
  52. void LCD_WRITE_WEEK(unsigned char week);
  53. void LCD_INITIAL();
  54. void LCD_WRITE_TEMP(uchar addr,uchar temp);
  55. void keyscan();
  56. void INITIAL_TEMER0();
  57. uchar TMPH ,TMPL;
  58. void w1602c(uchar com);
  59. void w1602d(uchar data01);
  60. void delay2(uint ms);
  61. void delay3(uint us);

  62. uchar read_byte();
  63. void write_byte(uchar val);

  64. void display();
  65. void DelayUs(uint time);
  66. void Init_Ds18b20(void);
  67. void WriteByte(uint date);
  68. uint ReadTemperature(void);   
  69. void beep1();
  70. void int0();
  71. void LCD_WRITE_M(uchar M);
  72. void main()
  73. {
  74.   LCD_INITIAL();           //液晶初始化
  75.   INITIAL_1302();          //DS1302初始化
  76.   INITIAL_TEMER0();        //定時器初始化
  77.   while(1)
  78.   {
  79.     keyscan();              //按鍵掃描
  80.                 beep1();
  81.                
  82.         if(flag==0)            //當標志位為0,允許讀取DS1302數據,將數據送入液晶顯示        
  83.         {
  84.            second=READ_1302(0x81);
  85.      LCD_WRITE_SFM(6,second);
  86.      minute=READ_1302(0x83);
  87.      LCD_WRITE_SFM(3,minute);
  88.      hour=READ_1302(0x85);
  89.      LCD_WRITE_SFM(0,hour);
  90.            week=READ_1302(0x8b);
  91.      LCD_WRITE_WEEK(week);               
  92.                 // LCD_WRITE_NYR(11,chour);
  93.         //         LCD_WRITE_NYR(14,cminute);
  94.      day=READ_1302(0x87);
  95.      LCD_WRITE_NYR(6,day);
  96.      month=READ_1302(0x89);
  97.      LCD_WRITE_NYR(3,month);
  98.      year=READ_1302(0x8d);
  99.      LCD_WRITE_NYR(0,year);
  100.            tem=ReadTemperature();
  101.            LCD_WRITE_TEMP(10,tem);        
  102.            int0();
  103.         }
  104.         
  105.   }
  106. }
  107. void int0()
  108. {
  109.         if(key33==0)//鬧鐘
  110.   {
  111.                  
  112.      LCD_WRITE_NYR(11,chour);
  113.                  LCD_WRITE_NYR(14,cminute);
  114.      LCD_WRITE_M(key33);
  115.         }

  116. if(key33==1)//秒表
  117.   {
  118.                  
  119.                  LCD_WRITE_NYR(11,tsecond);
  120.                  LCD_WRITE_NYR(14,tmsecond);
  121.      LCD_WRITE_M(key33);
  122.         }
  123.          if(key33==2)//定時器
  124.   {
  125.                  
  126.                  LCD_WRITE_NYR(11,dminute);
  127.                  LCD_WRITE_NYR(14,dsecond);
  128.      LCD_WRITE_M(key33);
  129.         }
  130. }
  131. void beep1()
  132. {
  133.         if(chour==hour&&cminute==minute)
  134.      beep=~beep;
  135. }
  136. /**********************1602BU份******************************************************/

  137. void delay(unsigned char z)                      //1602de延時函數
  138. {
  139.    unsigned char x,y;
  140.    for(x=z;x>0;x--)
  141.       for(y=110;y>0;y--);

  142. }

  143. void LCD_WRITE_COM(unsigned char com)            
  144. {
  145.    LCD_RS=0;
  146.    LCD_RW=0;
  147.    LCD_E=1;
  148.    P0=com;
  149.    delay(5);
  150.    LCD_E=0;
  151. }

  152. void LCD_WRITE_DATA(unsigned char date)               
  153. {
  154.    LCD_RS=1;
  155.    LCD_RW=0;
  156.    LCD_E=1;
  157.    P0=date;
  158.    delay(5);
  159.    LCD_E=0;
  160. }

  161. void LCD_WRITE_SFM(unsigned char addr,unsigned char date)
  162. {
  163.    unsigned char shi,ge;
  164.    shi=date/10;
  165.    ge=date%10;                           
  166.    LCD_WRITE_COM(0x80+0x40+addr);
  167.    LCD_WRITE_DATA(0x30+shi);            
  168.    LCD_WRITE_DATA(0x30+ge);            
  169.                                                    
  170. }

  171. void LCD_WRITE_NYR(unsigned char addr,unsigned char date)
  172. {
  173.    char shi,ge;
  174.    shi=date/10;
  175.    ge=date%10;
  176.    LCD_WRITE_COM(0x80+addr);
  177.    LCD_WRITE_DATA(0x30+shi);
  178.    LCD_WRITE_DATA(0x30+ge);

  179. }


  180. void LCD_WRITE_WEEK(unsigned char week)
  181. {
  182.    LCD_WRITE_COM(0x80+9);
  183.    switch(week)
  184.    {
  185.              case 1: LCD_WRITE_DATA('1');delay(5);
  186.               break;
  187.           case 2: LCD_WRITE_DATA('2');delay(5);
  188.               break;
  189.           case 3: LCD_WRITE_DATA('3');delay(5);
  190.                 break;
  191.           case 4: LCD_WRITE_DATA('4');delay(5);
  192.                  break;
  193.           case 5: LCD_WRITE_DATA('5');delay(5);
  194.                 break;
  195.           case 6: LCD_WRITE_DATA('6');delay(5);
  196.                   break;
  197.           case 7: LCD_WRITE_DATA('7');delay(5);
  198.               ;break;

  199.          }

  200. }
  201. void LCD_WRITE_M(uchar M)
  202. {
  203.    LCD_WRITE_COM(0x80+0x40+0x0e);
  204.    switch(M)
  205.    {
  206.              case 0: LCD_WRITE_DATA('N');delay(5);
  207.               break;
  208.           case 1: LCD_WRITE_DATA('M');delay(5);
  209.               break;
  210.           case 2: LCD_WRITE_DATA('D');delay(5);
  211.                 break;


  212.          }

  213. }
  214. void LCD_WRITE_TEMP(unsigned char addr,unsigned char temp)
  215. {
  216.         char shi,ge;
  217.     shi=temp/10;
  218.     ge=temp%10;
  219.     LCD_WRITE_COM(0x80+0x40+addr);
  220.     LCD_WRITE_DATA(0x30+shi);
  221.     LCD_WRITE_DATA(0x30+ge);
  222.         
  223. }
  224. void LCD_INITIAL()
  225. {
  226.     unsigned char i;

  227.         LCD_WRITE_COM(0x38);   
  228.         LCD_WRITE_COM(0x0c);   
  229.         LCD_WRITE_COM(0x06);                       //經本人試驗證明1602初始化不清屏也可實現


  230.         LCD_WRITE_COM(0x80);
  231.         for(i=0;i<16;i++)
  232.         {
  233.            LCD_WRITE_DATA(str1[i]);
  234.            delay(5);                        
  235.         }

  236.         LCD_WRITE_COM(0x80+0x40);//液晶第二行顯示
  237.         for(i=0;i<16;i++)
  238.         {
  239.            LCD_WRITE_DATA(str2[i]);
  240.            delay(5);
  241.         }
  242. }
  243. /***************************1302部分***************************************************/


  244. void WRITE_1302(unsigned char addr,unsigned char date)
  245. {
  246.    unsigned char i;
  247.    RST=0;
  248.    SCLK=0;
  249.    RST=1;
  250.    for(i=8;i>0;i--)
  251.    {
  252.             SCLK=0;
  253.          ACC=addr;
  254.          DIO=ACC0;
  255.          addr>>=1;
  256.          SCLK=1;
  257.    }
  258.    for(i=8;i>0;i--)
  259.    {
  260.              SCLK=0;
  261.           ACC=date;
  262.           DIO=ACC0;
  263.           date>>=1;
  264.           SCLK=1;
  265.    }
  266.    RST=0;
  267. }

  268. unsigned char READ_1302(unsigned char addr)
  269. {
  270.    unsigned char i,date1,date2;
  271.    RST=0;
  272.    SCLK=0;
  273.    RST=1;
  274.    for(i=8;i>0;i--)
  275.    {
  276.              SCLK=0;
  277.           ACC=addr;
  278.           DIO=ACC0;
  279.           addr>>=1;
  280.           SCLK=1;
  281.    }
  282.    for(i=8;i>0;i--)
  283.    {
  284.              ACC7=DIO;
  285.           SCLK=1;
  286.           ACC>>=1;
  287.           SCLK=0;
  288.    }
  289.    RST=0;
  290.    date1=ACC;
  291.    date2=date1/16;
  292.    date1=date1%16;
  293.    date1=date1+date2*10;
  294.    return(date1) ;
  295. }


  296. void INITIAL_1302()
  297. {
  298.    WRITE_1302(WRITE_SECOND,READ_1302(READ_SECOND)&0x7f);    //啟動DS1302
  299. }
  300. /**************************鍵盤掃描部分***************************************************/
  301. void keyscan()
  302. {
  303.    if(key0==0)//確認功能鍵按下
  304.    {
  305.              delay(20);
  306.           if(key0==0)//去抖
  307.            {
  308.       speakerr(mt);
  309.              while(!key0);//釋放
  310.                   
  311.                          num++;
  312.                    switch(num)
  313.              {
  314.                    case 1:    flag=1;               //修改時間,禁止從DS1302讀數據
  315.                               TR0=0;                //定時器關
  316.                       LCD_WRITE_COM(0x0f);  //光標開始閃爍
  317.                               LCD_WRITE_COM(0x80+1);//第一次按下,光標定位到年位置
  318.                                   break;
  319.                    case 2:  LCD_WRITE_COM(0x80+4);//第二次按下,光標定位到月位置
  320.                                          break;
  321.                    case 3:  LCD_WRITE_COM(0x80+7);//第三次按下,光標定位到日位置
  322.                                    break;
  323.              case 4:  LCD_WRITE_COM(0x80+9);//第四次按下,光標定位到星期位置
  324.                                    break;
  325.              case 5:  LCD_WRITE_COM(0x80+12);//第五次按下,光標定位到定時位置
  326.                                     break;                                
  327.        case 6:  LCD_WRITE_COM(0x80+15);//第五次按下,光標定位到定分位置
  328.                                     break;                                                                 
  329.        case 7:  LCD_WRITE_COM(0x80+0x40+1);//第五次按下,光標定位到時位置
  330.                                     break;                                                
  331.                    case 8:  LCD_WRITE_COM(0x80+0x40+4);//第六次按下,光標定位到分位置
  332.                                      break;
  333.                    case 9:         LCD_WRITE_COM(0x80+0x40+7);//第七次按下,光標定位到秒位置
  334.                                          break;

  335.            case 10:         num=0;//第八次按下,記錄清零
  336.                              LCD_WRITE_COM(0x0c);//不顯示光標                                                                              
  337.                                        WRITE_1302(WRITE_PROTECT,0x00);            //允許寫操作
  338.                                      WRITE_1302(0x80,(second/10*16)+second%10);//將調節后的秒寫入DS1302
  339.                          WRITE_1302(0x82,(minute/10*16)+minute%10);//將調節后的分寫入DS1302
  340.                          WRITE_1302(0x84,(hour/10*16)+hour%10);//將調節后的時寫入DS1302
  341.                                      WRITE_1302(0x8a,(week/10*16)+week%10);//將調節后的星期寫入DS1302
  342.                          WRITE_1302(0x86,(day/10*16)+day%10);//將調節后的日寫入DS1302
  343.                          WRITE_1302(0x88,(month/10*16)+month%10);//將調節后的月寫入DS1302
  344.                                      WRITE_1302(0x8c,(year/10*16)+year%10);//將調節后的年寫入DS1302
  345.                                      WRITE_1302(WRITE_PROTECT,0x80);      //開寫保護
  346.                                      flag=0;                              //時間修改完畢,允許液晶從DS1302讀數據
  347.                                          TR0=1;        
  348.                                          break;
  349.                  
  350.                }  
  351.       
  352.           }
  353.    }
  354.          if(num==0&&key33==1)
  355.          { if(key1==0)//確認增大鍵按下
  356.           {
  357.                     delay(20);
  358.                   if(key1==0)//增大鍵確實按下
  359.                   {while(!key1);
  360.               if(ts==0)ts++;
  361.               else ts--;
  362.                         }
  363.                 }
  364.                 if(key2==0)//確認增大鍵按下
  365.           {
  366.                     delay(20);
  367.                   if(key2==0)//增大鍵確實按下
  368.                   {while(!key2);
  369. tsecond=tmsecond=0;
  370.                         }
  371.                 }
  372.         }
  373.          if(num!=0)
  374.    {
  375.              if(key1==0)//確認增大鍵按下
  376.           {
  377.                     delay(20);
  378.                   if(key1==0)//增大鍵確實按下
  379.                   {
  380.                                 
  381.                                 speakerr(mt);
  382.                           while(!key1);
  383.                         switch(num)
  384.                         {
  385.                            case 1:        year++;//調節年
  386.                                     if(year==100)year=0;
  387.                                     LCD_WRITE_NYR(0,year);//將調節后的年送入液晶顯示
  388.                                     LCD_WRITE_COM(0x80+1);//光標回到指定處
  389.                                                 break;
  390.                                 
  391.                            case 2:  month++;//調節月
  392.                                     if(month==13)month=0;
  393.                                     LCD_WRITE_NYR(3,month);//將調節后的月送入液晶顯示
  394.                                     LCD_WRITE_COM(0x80+4);//光標回到指定處
  395.                                                 break;
  396.                           
  397.                            case 3:  day++;//調節日
  398.                                 if(day==32)day=0;
  399.                                     LCD_WRITE_NYR(6,day);//將調節后的日送入液晶顯示
  400.                                     LCD_WRITE_COM(0x80+7);//光標回到指定處
  401.                                             break;

  402.                            case 4:  week++;
  403.                                     if(week==8)week=0;
  404.                                     LCD_WRITE_WEEK(week);//將調節后的星期送入液晶顯示
  405.                                     LCD_WRITE_COM(0x80+9);//光標回到指定處
  406.                                     break;
  407. /*******************************************************************************************/
  408.               case 5:  if(key33==0)
  409.                                  {
  410.                                                   chour++;
  411.                                     if(chour==24)chour=0;
  412.                                     LCD_WRITE_NYR(11,chour);//將調節后的小時送入液晶顯示
  413.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  414.                                             break;
  415.                                  }
  416.                                  else if(key33==1)
  417.                                  {
  418.                                                   tsecond++;
  419.                                     if(tsecond==60)tsecond=0;
  420.                                     LCD_WRITE_NYR(11,tsecond);//將調節后的小時送入液晶顯示
  421.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  422.                                             break;
  423.                                  }        
  424.                                  else if(key33==2)
  425.                                  {
  426.                                                   dminute++;
  427.                                     if(dminute==60)dminute=0;
  428.                                     LCD_WRITE_NYR(11,dminute);//將調節后的小時送入液晶顯示
  429.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  430.                                             break;
  431.                                  }                                         
  432.         /***************************************************************************************/                                                
  433.                                                         
  434.          case 6:  if(key33==0)
  435.                                  {
  436.                                            cminute++;
  437.                                     if(cminute==60)cminute=0;
  438.                                     LCD_WRITE_NYR(14,cminute);//將調節后的小時送入液晶顯示
  439.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  440.                                             break;
  441.                                  }
  442.                   else  if(key33==1)
  443.                                  {
  444.                                            tmsecond++;
  445.                                     if(tmsecond==100)tmsecond=0;
  446.                                     LCD_WRITE_NYR(14,tmsecond);//將調節后的小時送入液晶顯示
  447.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  448.                                             break;
  449.                                  }                                 
  450.                   else  if(key33==2)
  451.                                  {
  452.                                            dsecond++;
  453.                                     if(dsecond==60)dsecond=0;
  454.                                     LCD_WRITE_NYR(14,dsecond);//將調節后的小時送入液晶顯示
  455.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  456.                                             break;
  457.                                  }                                         
  458.                                  
  459.                                  
  460. /********************************************************************************************/                                 
  461.                            case 7:  hour++;
  462.                                     if(hour==24)hour=0;
  463.                                     LCD_WRITE_SFM(0,hour);//將調節后的小時送入液晶顯示
  464.                                     LCD_WRITE_COM(0x80+0x40+1);//光標回到指定處
  465.                                             break;
  466.                            
  467.                            case 8:  minute++;
  468.                                     if(minute==60)minute=0;
  469.                                          LCD_WRITE_SFM(3,minute);//將調節后的分送入液晶顯示
  470.                                     LCD_WRITE_COM(0x80+0x40+4);//光標回到指定處
  471.                                                break;

  472.                            case 9:  second++;
  473.                                     if(second==60)second=0;
  474.                                     LCD_WRITE_SFM(6,second);//將調節后的秒送入液晶顯示
  475.                                     LCD_WRITE_COM(0x80+0x40+7);//光標回到指定處
  476.                                                       break;
  477.                                 default:break;                                         
  478.                         }         
  479.                         
  480.                   }
  481.           }
  482.           if(key2==0)//確認減小鍵按下
  483.           {
  484.                     delay(20);
  485.                   if(key2==0)//減小鍵確實按下
  486.                   {
  487.                                 speakerr(mt);
  488.                           while(!key2);
  489.                         switch(num)
  490.                         {
  491.                           case 1:  year--;//調節年
  492.                                     if(year==-1)year=99;
  493.                                             LCD_WRITE_NYR(0,year);
  494.                                             LCD_WRITE_COM(0x80+1);
  495.                                             break;

  496.                           case 2:  month--;//調節月
  497.                                             if(month==-1)month=12;
  498.                                             LCD_WRITE_NYR(3,month);
  499.                                             LCD_WRITE_COM(0x80+4);
  500.                                             break;

  501.                           case 3:  day--;//調節日
  502.                                             if(day==-1)day=31;
  503.                                             LCD_WRITE_NYR(6,day);
  504.                                             LCD_WRITE_COM(0x80+7);
  505.                                             break;
  506.                           case 4:   week--;//調節星期
  507.                                              if(week==0)week=7;
  508.                                              LCD_WRITE_WEEK(week);
  509.                                              LCD_WRITE_COM(0x80+9);
  510.                                              break;
  511. /**************************************************************************************************/        
  512.               case 5:  if(key33==0)
  513.                                  {
  514.                                           chour--;
  515.                                     if(chour==-1)chour=23;
  516.                                     LCD_WRITE_NYR(11,chour);//將調節后的小時送入液晶顯示
  517.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  518.                                             break;
  519.                                  }
  520.                else if(key33==1)
  521.                                 {
  522.                                                                         tsecond--;
  523.                                     if(tsecond==-1)tsecond=59;
  524.                                     LCD_WRITE_NYR(11,tsecond);//將調節后的小時送入液晶顯示
  525.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  526.                                             break;
  527.                                                          
  528.                                                          
  529.                                  }
  530.                else if(key33==2)
  531.                                 {
  532.                                                                         dminute--;
  533.                                     if(dminute==-1)dminute=59;
  534.                                     LCD_WRITE_NYR(11,dminute);//將調節后的小時送入液晶顯示
  535.                                     LCD_WRITE_COM(0x80+12);//光標回到指定處
  536.                                             break;
  537.                                                          
  538.                                                          
  539.                                  }


  540. /*************************************************************************************************/
  541.         case 6:  
  542.                         if(key33==0)
  543.                                         {         
  544.                                                                         cminute--;
  545.                                     if(cminute==-1)cminute=59;
  546.                                     LCD_WRITE_NYR(14,cminute);//將調節后的小時送入液晶顯示
  547.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  548.                                             break;
  549.                                         }        
  550.                         else   if(key33==1)
  551.                                         {         
  552.                                                                         tmsecond--;
  553.                                     if(tmsecond==-1)tmsecond=59;
  554.                                     LCD_WRITE_NYR(14,tmsecond);//將調節后的小時送入液晶顯示
  555.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  556.                                             break;
  557.                                         }                                                        
  558.                         else   if(key33==2)
  559.                                         {         
  560.                                                                         dsecond--;
  561.                                     if(dsecond==-1)dsecond=59;
  562.                                     LCD_WRITE_NYR(14,dsecond);//將調節后的小時送入液晶顯示
  563.                                     LCD_WRITE_COM(0x80+15);//光標回到指定處
  564.                                             break;
  565.                                         }                                                
  566.                                                 
  567.                                                 
  568.                                                 
  569. /***********************************************************************************************/
  570.                           case 7:   hour--;//調節時
  571.                                             if(hour==-1)hour=23;
  572.                                             LCD_WRITE_SFM(0,hour);
  573.                                             LCD_WRITE_COM(0x80+0x40+1);
  574.                                             break;

  575.                           case 8:   minute--;//調節分
  576.                                              if(minute==-1)minute=59;
  577.                                              LCD_WRITE_SFM(3,minute);
  578.                                              LCD_WRITE_COM(0x80+0x40+4);
  579.                                              break;

  580.                           case 9:   second--;//調節秒
  581.                                              if(second==-1)second=59;
  582.                                              LCD_WRITE_SFM(6,second);
  583.                                              LCD_WRITE_COM(0x80+0x40+7);
  584.                                              break;
  585.                           default:break;
  586.                                           
  587.                         }
  588.                   }
  589.           }

  590.                
  591.    }
  592.    

  593. }
  594. ……………………

  595. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
多功能電子時鐘.rar (139.37 KB, 下載次數: 215)


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

使用道具 舉報

沙發
ID:525478 發表于 2019-5-26 09:57 | 只看該作者
這個好 功能強大
回復

使用道具 舉報

板凳
ID:652786 發表于 2019-11-30 18:37 | 只看該作者
下了之后運行錯誤??仿真圖在哪里??
回復

使用道具 舉報

地板
ID:571765 發表于 2019-12-8 22:58 | 只看該作者
大佬,這個是怎么樣具體操作的、
回復

使用道具 舉報

5#
ID:706042 發表于 2020-4-1 21:38 | 只看該作者
運行報錯
回復

使用道具 舉報

6#
ID:621496 發表于 2020-5-15 13:17 | 只看該作者
proteus仿真在哪里?
回復

使用道具 舉報

7#
ID:618097 發表于 2020-5-15 21:41 | 只看該作者
原理圖那個1602接錯了吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女一区二区 | 中文字幕蜜臀av | av一区二区在线观看 | 国产自产21区 | 日韩视频在线播放 | 日韩一区二区在线免费观看 | a久久| 国产成人高清视频 | 成人av电影在线 | 日韩欧美国产精品一区二区三区 | 国产7777| 在线视频一区二区三区 | 自拍偷拍小视频 | 中文字幕在线视频免费观看 | 亚洲视频一区二区三区 | 日韩欧美国产一区二区三区 | 伊人网伊人 | 国产色网站 | 国产精品视频在线观看 | 中文字幕国产视频 | 午夜影院在线观看 | 欧美精品综合在线 | 亚洲婷婷六月天 | 欧美一级大片免费看 | 天天夜碰日日摸日日澡 | www.操.com| 日韩精品在线一区 | 中文字幕在线观看一区 | 久久一二| 精品在线一区二区三区 | 国产aa | 一区精品在线观看 | 国产精品九九九 | 亚洲精品国产一区 | 免费黄篇| 国产精品视频在线播放 | 午夜精品一区二区三区免费视频 | 亚洲国产精品99久久久久久久久 | 成人av观看 | 国产免费观看视频 | 婷婷色网 |