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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

lcd1602電子時鐘單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:502537 發表于 2019-4-11 11:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DQ=P3^7;
  6. sbit light=P2^0;
  7. sbit k1=P3^4;
  8. sbit k2=P3^3;
  9. sbit k3=P3^2;
  10. sbit k4=P3^5;
  11. sbit k5=P3^6;
  12. sbit LED1=P1^3;
  13. sbit LED2=P1^4;

  14. sbit DS1302_CE=P1^2;
  15. sbit DS1302_IO=P1^1;
  16. sbit DS1302_SCLK=P1^0;

  17. sbit LCD1602_RS=P2^5;
  18. sbit LCD1602_RW=P2^6;
  19. sbit LCD1602_EN=P2^7;

  20. extern uchar wendu[4];
  21. extern void get_wendu();

  22. extern void LCD1602_init();
  23. extern void LCD1602_wcmd(uchar cmd);
  24. extern void LCD1602_wdat(uchar dat);
  25. extern void LCD1602_pos(uchar x,bit y);         //定義顯示位置,x為列,y為行,0上1下
  26. extern void LCD1602_dischar(uchar x,bit y,uchar dat); //在指定位置顯示字符
  27. extern void LCD1602_prints(uchar x,bit y,uchar *p);  //顯示字符串

  28. extern uchar dt[7];
  29. extern void set_time();
  30. extern void get_time();
  31. extern void DS1302_init();

  32. /**************************DS1302 *********************************/

  33. uchar dt[7];

  34. void DS1302_write_byte(uchar dat)
  35. {
  36.   char i;

  37.   for(i=0;i<8;i++)
  38.   {
  39.     DS1302_SCLK = 0;
  40.         _nop_();
  41.         _nop_();
  42.         dat >>= 1;
  43.         DS1302_IO = CY;
  44.         DS1302_SCLK=1;
  45.         _nop_();
  46.         _nop_();
  47.   }
  48. }

  49. uchar DS1302_read_byte()
  50. {
  51.   uchar i;
  52.   uchar dat = 0;
  53.   for(i=0;i<8;i++)
  54.   {
  55.     DS1302_SCLK = 0;
  56.         _nop_();
  57.         _nop_();
  58.         dat >>= 1;
  59.         if(DS1302_IO) dat |= 0x80;
  60.         DS1302_SCLK =1;
  61.         _nop_();
  62.         _nop_();
  63.   }
  64.   return dat;
  65. }


  66. void DS1302_write(uchar address,uchar dat)
  67. {
  68.   DS1302_CE=0;
  69.   _nop_();
  70.   _nop_();
  71.   DS1302_SCLK=0;
  72.   _nop_();
  73.   _nop_();
  74.   DS1302_CE=1;
  75.   _nop_();
  76.   _nop_();
  77.   DS1302_write_byte(address);
  78.   DS1302_write_byte(dat);
  79.   DS1302_SCLK=1;
  80.   DS1302_CE=0;
  81. }


  82. uchar DS1302_read(uchar address)
  83. {
  84.   uchar dat;
  85.   DS1302_CE=0;
  86.   _nop_();
  87.   _nop_();                                         
  88.   DS1302_SCLK=0;
  89.   _nop_();
  90.   _nop_();
  91.   DS1302_CE=1;
  92.   _nop_();
  93.   _nop_();
  94.   DS1302_write_byte(address);
  95.   dat =DS1302_read_byte();
  96.   DS1302_SCLK=1;
  97.   DS1302_CE=0;
  98.   dat=dat/16*10+dat%16;
  99.   return dat;
  100. }

  101. void DS1302_init()
  102. {
  103.   DS1302_write(0x8e,0x00);
  104.   DS1302_write(0x80,0x00);
  105.   DS1302_write(0x82,0x00);
  106.   DS1302_write(0x84,0x12);
  107.   DS1302_write(0x86,0x10);
  108.   DS1302_write(0x88,0x11);
  109.   DS1302_write(0x8a,0x06);
  110.   DS1302_write(0x8c,0x12);
  111.   DS1302_write(0x8e,0x80);
  112. }

  113. void set_time()
  114. {
  115.   uchar i,j=0x80;
  116.   for(i=0;i<7;i++)
  117.   {
  118.     dt[i]=dt[i]/10*16+dt[i]%10;
  119.   }
  120.   DS1302_write(0x8e,0x00);
  121.   DS1302_write(0x80,0x00);
  122.   for(i=0;i<7;i++)
  123.   {
  124.     DS1302_write(j,dt[i]);
  125.     j+=2;
  126.   }
  127.   DS1302_write(0x8e,0x80);
  128. }

  129. void get_time()
  130. {
  131.   dt[0] =DS1302_read(0x81);                 //讀1302時間,秒
  132.   dt[1] =DS1302_read(0x83);                 //分
  133.   dt[2] =DS1302_read(0x85);                 //時
  134.   dt[3] =DS1302_read(0x87);                 //日
  135.   dt[4] =DS1302_read(0x89);                 //月
  136.   dt[5] =DS1302_read(0x8b);                 //周
  137.   dt[6] =DS1302_read(0x8d);                 //年
  138. }

  139. void chaongdiaon()                                   //充電
  140. {
  141. DS1302_write(0x8e,0x00);           /* 控制命令,WP=0,解除寫保護*/
  142.   _nop_();
  143.   _nop_();
  144. DS1302_write(0x90, 0xa6);    //使能充電   用一個二極管  用4k電阻
  145. DS1302_write(0x8e,0x80);           /* 控制命令,WP=1,寫保護*/
  146.   _nop_();
  147.   _nop_();
  148. }
  149. /*********************************   LCD  1602      ******************/
  150. uchar code self_char[]={
  151.                                                 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, //年
  152.                                                 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x01, //月
  153.                                                 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //日
  154.                                                 0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //溫度標志— —攝氏度
  155.                                                 0x00,0x04,0x0E,0x1F,0x0E,0x04,0x00,0x00, //符號◆
  156.                                                 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //全開
  157.                                                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //
  158.                                                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00         //
  159.                                            };

  160. bit lcd_busy()
  161. {
  162.   bit result;
  163.   LCD1602_RS=0;
  164.   LCD1602_RW=1;
  165.   LCD1602_EN=1;
  166.   _nop_();
  167.   _nop_();
  168.   _nop_();
  169.   _nop_();
  170.   result = (bit)(P0&0x80);
  171.   LCD1602_EN=0;
  172.   return(result);
  173. }

  174. void LCD1602_wcmd(uchar cmd)
  175. {
  176.   while(lcd_busy());
  177.   LCD1602_RS=0;
  178.   LCD1602_RW=0;
  179.   _nop_();
  180.   _nop_();
  181.   LCD1602_EN=1;
  182.   _nop_();
  183.   _nop_();
  184.   _nop_();
  185.   _nop_();
  186.   P0=cmd;
  187.   _nop_();
  188.   _nop_();
  189.   _nop_();
  190.   _nop_();
  191.   LCD1602_EN=0;
  192. }

  193. void LCD1602_wdat(uchar dat)
  194. {
  195.   while(lcd_busy());
  196.   LCD1602_RS=1;
  197.   LCD1602_RW=0;
  198.   LCD1602_EN=1;
  199.   _nop_();
  200.   _nop_();
  201.   _nop_();
  202.   _nop_();
  203.   P0=dat;
  204.   _nop_();
  205.   _nop_();
  206.   _nop_();
  207.   _nop_();
  208.   LCD1602_EN=0;
  209. }

  210. void LCD1602_pos(uchar x,bit y)                //指定坐標,x為列,0~15,y為行,0為第一行,1為第二行。
  211. {
  212.   if(y)LCD1602_wcmd(x|0xc0);
  213.   else LCD1602_wcmd(x|0x80);
  214. }

  215. void LCD1602_dischar(uchar x,bit y,uchar dat)        //指定位置顯示一個字符
  216. {
  217.   LCD1602_pos(x,y);
  218.   LCD1602_wdat(dat);
  219. }

  220. void LCD1602_prints(uchar x,bit y,uchar *p)                                        //指定位置顯示字符串
  221. {
  222.   LCD1602_pos(x,y);
  223.   while((*p) != '\0') {LCD1602_wdat(*p);p++;}
  224. }

  225. void LCD1602_init()
  226. {
  227.   uchar i;
  228.   LCD1602_wcmd(0x40);
  229.   for(i=0;i<64;i++)
  230.         {
  231.           LCD1602_wdat(self_char[i]);
  232.         }
  233.   LCD1602_wcmd(0x38);
  234.   LCD1602_wcmd(0x38);
  235.   LCD1602_wcmd(0x0c);
  236.   LCD1602_wcmd(0x06);
  237.   LCD1602_wcmd(0x01);
  238. }
  239. /****************************   18B20   ************************************/
  240. uchar wendu[4];

  241. void delay_18b20(uchar i)
  242. {
  243.   int j;
  244.   for(j=0;j<i;j++);
  245. }

  246. uchar init_18b20()
  247. {
  248.   uchar i;
  249.   DQ=0;
  250.   delay_18b20(30);
  251.   DQ=1;
  252.   delay_18b20(3);
  253.   i=DQ;
  254.   delay_18b20(20);
  255.   return(i);
  256. }

  257. uchar read_18b20_bit()
  258. {
  259.   uchar i;
  260.   DQ=0;
  261.   DQ=1;
  262.   for(i=0;i<3;i++);
  263.   return(DQ);
  264. }

  265. void write_18b20_bit(unsigned xbit)
  266. {
  267.   DQ=0;
  268.   if(xbit==1)
  269.   DQ=1;
  270.   delay_18b20(5);
  271.   DQ=1;
  272. }

  273. uchar read_18b20_byte()
  274. {
  275.   uchar i,j,value;
  276.   j=1;
  277.   value=0;
  278.   for(i=0;i<8;i++)
  279.   {
  280.         if(read_18b20_bit())
  281.         {
  282.           value=value+(j<<i);
  283.         }
  284.         delay_18b20(6);
  285.   }
  286.   return(value);
  287. }

  288. void write_18b20_byte(uchar x)
  289. {
  290.   uchar i,j;
  291.   for(i=0;i<8;i++)
  292.   {
  293.         j=x>>i;
  294.         j=j&0x01;
  295.         write_18b20_bit(j);
  296.         delay_18b20(5);
  297.   }
  298. }

  299. void get_wendu()
  300. {
  301.   uchar a,b;
  302.   float get_temp;
  303.   int temp1,temp2;
  304.   init_18b20();
  305.   write_18b20_byte(0xcc);
  306.   write_18b20_byte(0x44);
  307.   init_18b20();
  308.   write_18b20_byte(0xcc);
  309.   write_18b20_byte(0xbe);
  310.   a=read_18b20_byte();         //低8位
  311.   b=read_18b20_byte();         //高8位
  312.   temp1=b;
  313.   temp1=temp1<<8;
  314.   temp1=temp1|a;
  315.   if(b&0xfc)
  316.         {wendu[0]=1;temp1=~temp1+1;}                //0正1負
  317.   else
  318.     wendu[0]=0;
  319.   get_temp=temp1*0.0625;
  320.   temp2=get_temp*10+0.5;
  321.   wendu[1]=temp2%1000/100;
  322.   wendu[2]=temp2%1000%100/10;
  323.   wendu[3]=temp2%1000%100%10;
  324. }


  325. /*******************************          主程序         ***************/

  326. uchar mode=0,OK=0;
  327. uchar dis1[16],dis2[16];
  328. //uchar IRCOM[7],IRCODE=0;
  329. uchar NUM1,NUM2;
  330. uchar count;
  331. bit L=0,select=0,DIS_EN=1,SHAN;

  332. void delay(uint i)
  333. {
  334.   uchar j;
  335.   while(i-- !=0)
  336.   {
  337.     for(j=0;j<120;j++);
  338.   }
  339. }

  340. void delay1(uchar i)
  341. {
  342.   uchar j;
  343.   while(i--)
  344.   {for(j=0;j<13;j++){}}
  345. }


  346. void get_dis()
  347. {
  348.   dis1[0]='2';
  349.   dis1[1]='0';
  350.   dis1[2]=0x30+dt[6]/10;
  351.   dis1[3]=0x30+dt[6]%10;
  352.   dis1[4]='-';                //2
  353.   dis1[5]=0x30+dt[4]/10;
  354.   dis1[6]=0x30+dt[4]%10;
  355.   dis1[7]='-';                //1
  356.   dis1[8]=0x30+dt[3]/10;
  357.   dis1[9]=0x30+dt[3]%10;
  358.   dis1[10]=' ';            //2
  359.   dis1[11]=' ';
  360.   dis1[12]=' ';
  361.   switch(dt[5])
  362.   {
  363.         case 1: {
  364.                           dis1[13]='M';
  365.                           dis1[14]='o';
  366.                           dis1[15]='n';
  367.                         }
  368.                         break;
  369.         case 2: {
  370.                           dis1[13]='T';
  371.                           dis1[14]='u';
  372.                           dis1[15]='e';
  373.                         }
  374.                         break;
  375.         case 3: {
  376.                           dis1[13]='W';
  377.                           dis1[14]='e';
  378.                           dis1[15]='d';
  379.                         }
  380.                         break;
  381.         case 4: {
  382.                           dis1[13]='T';
  383.                           dis1[14]='h';
  384.                           dis1[15]='u';
  385.                         }
  386.                         break;
  387.         case 5: {
  388.                           dis1[13]='F';
  389.                           dis1[14]='r';
  390.                           dis1[15]='i';
  391.                         }
  392.                         break;
  393.         case 6: {
  394.                           dis1[13]='S';
  395.                           dis1[14]='a';
  396.                           dis1[15]='t';
  397.                         }
  398.                         break;
  399.         case 7: {
  400.                           dis1[13]='S';
  401.                           dis1[14]='u';
  402.                           dis1[15]='n';
  403.                         }
  404.                         break;
  405.   }
  406.   dis2[0]=' ';
  407.   dis2[1]=0x30+dt[2]/10;
  408.   dis2[2]=0x30+dt[2]%10;
  409.   dis2[3]=':';                           //;:
  410.   dis2[4]=0x30+dt[1]/10;
  411.   dis2[5]=0x30+dt[1]%10;
  412.   dis2[6]=':';
  413.   dis2[7]=0x30+dt[0]/10;
  414.   dis2[8]=0x30+dt[0]%10;
  415.   dis2[9]=' ';
  416.   if(wendu[0]==1)
  417.         dis2[10]=0x2d;
  418.   else
  419.         dis2[10]=' ';
  420.   dis2[11]=0x30+wendu[1];
  421.   dis2[12]=0x30+wendu[2];
  422.   dis2[13]='.';
  423.   dis2[14]=0x30+wendu[3];
  424.   dis2[15]=3;
  425. }

  426. void keyscan()
  427. {
  428.   if(k1==0)
  429.   {
  430.         delay(10);
  431.         if(k1==0)
  432.         {
  433.            while(!k1);

  434.           mode++;
  435.           if(mode==1 && OK==0)
  436.                 LCD1602_wcmd(0x01);         
  437.           if(mode==2 && OK==0)        
  438.           {
  439.                 mode=0;
  440.                 select=0;
  441.           }
  442.           if(select==0 && OK==1)
  443.           {
  444.                 if(mode==7)
  445.                   mode=1;
  446.           }
  447.           if(select==1 && OK==1)
  448.           {
  449.                 if(mode==6)
  450.                   mode=1;
  451.           }

  452.         }
  453.   }
  454. if(k2==0)
  455.   {
  456.         delay(10);
  457.         if(k2==0)
  458.         {
  459.           while(!k2);
  460.           if(mode==1 && OK==0)
  461.             {select=~select;LCD1602_wcmd(0x01);}
  462.           NUM1++;

  463.         }
  464.   }
  465.   if(k3==0)
  466.   {
  467.         delay(10);
  468.         if(k3==0)
  469.         {
  470.           while(!k3);
  471.           if(mode==1 && OK==0)
  472.             {select=~select;LCD1602_wcmd(0x01);}
  473.           NUM2++;

  474.         }
  475.   }
  476.   if(k4==0)
  477.   {
  478.         delay(10);
  479.         if(k4==0)
  480.         {
  481.           while(!k4);
  482.           if(mode==0)
  483.                 light=~light;
  484.           if(mode !=0)
  485.           {
  486.             LCD1602_wcmd(0x01);
  487.                 OK++;
  488.                 NUM1=0;
  489.                 NUM2=0;
  490.                 if(OK==2)
  491.                 {
  492.                   LCD1602_wcmd(0x01);

  493.                   set_time();
  494. //                  set_alarm();
  495.                   mode=0;
  496.                   select=0;
  497.                   OK=0;
  498.                 }
  499.           }

  500.         }
  501.   }
  502.   if(k5==0)
  503.   {
  504.         delay(100);
  505.         if(k5==0)
  506.         {
  507.           while(!k5);
  508.           DS1302_init();

  509.         }
  510.   }        
  511. }        





  512. void display()
  513. {
  514.   get_wendu();
  515.   get_dis();
  516. /*  if(alarm[0]==1)
  517.         {LED2=1;}  */

  518.   if(mode==0)        //正常模式                                         
  519.   {
  520.         uchar i;
  521.         LED1=1;
  522.         get_time();
  523. //        get_alarm();
  524.         LCD1602_pos(0,0);
  525.         for(i=0;i<16;i++)
  526.           LCD1602_wdat(dis1[i]);
  527.         LCD1602_pos(0,1);
  528.         for(i=0;i<16;i++)
  529.           LCD1602_wdat(dis2[i]);
  530.   }

  531.   if(mode==1&&OK==0)  //菜單模式
  532.   {
  533.         LCD1602_prints(1,0,"1.Set Time");
  534.         LCD1602_prints(1,1,"2.About...");
  535.         if(select)
  536.           LCD1602_dischar(0,1,4);
  537.         else
  538.           LCD1602_dischar(0,0,4);
  539.   }

  540.   if(OK==1&&select==0)          //調日期模式
  541.   {
  542.         uchar i;
  543.         LCD1602_pos(0,0);
  544.         for(i=0;i<16;i++)
  545.           LCD1602_wdat(dis1[i]);
  546.         LCD1602_pos(0,1);
  547.         for(i=0;i<10;i++)
  548.           LCD1602_wdat(dis2[i]);
  549.         LCD1602_prints(10,1,"Set...");
  550.         if(SHAN==1) LCD1602_prints(10,1,"Set.  ");

  551.         if(mode==1)                  //調分模式,秒位清零
  552.         {
  553.           dt[0]=0;
  554.           LCD1602_dischar(7,1,0x30+dt[0]/10);
  555.           LCD1602_dischar(8,1,0x30+dt[0]%10);
  556.           if(NUM1!=0)
  557.                 {
  558.                   dt[1]++;
  559.                   if(dt[1]==60)
  560.                         dt[1]=0;
  561.                   LCD1602_dischar(4,1,0x30+dt[1]/10);
  562.                   LCD1602_dischar(5,1,0x30+dt[1]%10);
  563.                   NUM1=0;
  564.                 }
  565.                 if(NUM2!=0)
  566.                 {
  567.                   dt[1]--;
  568.                   if(dt[1]==-1)
  569.                         dt[1]=59;
  570.                   LCD1602_dischar(4,1,0x30+dt[1]/10);
  571.                   LCD1602_dischar(5,1,0x30+dt[1]%10);
  572.                   NUM2=0;
  573.                 }
  574.                 if(SHAN==1) LCD1602_dischar(5,1,5);

  575.         }
  576.           else

  577.            if(mode==2)         //調時模式
  578.            {
  579.                     if(NUM1!=0)
  580.                  {
  581.                    dt[2]++;
  582.                    if(dt[2]==24)
  583.                          dt[2]=0;
  584.                    LCD1602_dischar(1,1,0x30+dt[2]/10);
  585.                    LCD1602_dischar(2,1,0x30+dt[2]%10);
  586.                    NUM1=0;
  587.                  }
  588.                  if(NUM2!=0)
  589.                  {
  590.                    dt[2]--;
  591.                    if(dt[2]==-1)
  592.                          dt[2]=23;
  593.                    LCD1602_dischar(1,1,0x30+dt[2]/10);
  594.                    LCD1602_dischar(2,1,0x30+dt[2]%10);
  595.                    NUM2=0;
  596.                  }
  597.                   if(SHAN==1) LCD1602_dischar(2,1,5);
  598.             }
  599.                 if(mode==3)        //調星期狀態
  600.            {
  601.                     if(NUM1!=0)
  602.                  {
  603.                    dt[5]++;
  604.                    if(dt[5]==8)
  605.                          dt[5]=1;
  606.                    switch(dt[5])
  607.                    {
  608.                             case 1: LCD1602_prints(13,0,"Mon");break;
  609.                          case 2: LCD1602_prints(13,0,"Tue");break;
  610.                          case 3: LCD1602_prints(13,0,"Wed");break;
  611.                          case 4: LCD1602_prints(13,0,"Thu");break;
  612.                          case 5: LCD1602_prints(13,0,"Fri");break;
  613.                          case 6: LCD1602_prints(13,0,"Sat");break;
  614.                          case 7: LCD1602_prints(13,0,"Sun");break;
  615.                    }
  616.                    NUM1=0;
  617.                  }
  618.                  if(NUM2!=0)
  619.                  {
  620.                    dt[5]--;
  621.                    if(dt[5]==0)
  622.                          dt[5]=7;
  623.                    switch(dt[5])
  624.                    {
  625.                             case 1: LCD1602_prints(13,0,"Mon");break;
  626.                          case 2: LCD1602_prints(13,0,"Tue");break;
  627.                          case 3: LCD1602_prints(13,0,"Wed");break;
  628.                          case 4: LCD1602_prints(13,0,"Thu");break;
  629.                          case 5: LCD1602_prints(13,0,"Fri");break;
  630.                          case 6: LCD1602_prints(13,0,"Sat");break;
  631.                          case 7: LCD1602_prints(13,0,"Sun");break;
  632.                    }
  633.                    NUM2=0;
  634.                  }
  635.                   if(SHAN==1) LCD1602_dischar(15,0,5);
  636.             }
  637.                 if(mode==4)          //調日模式
  638.            {
  639.                     if(NUM1!=0)
  640.                  {
  641.                    dt[3]++;
  642.                    if(dt[3]==32)
  643.                          dt[3]=1;
  644.                    LCD1602_dischar(8,0,0x30+dt[3]/10);
  645.                    LCD1602_dischar(9,0,0x30+dt[3]%10);
  646.                    NUM1=0;
  647.                  }
  648.                  if(NUM2!=0)
  649.                  {
  650.                    dt[3]--;
  651.                    if(dt[3]==0)
  652.                          dt[3]=31;
  653.                    LCD1602_dischar(8,0,0x30+dt[3]/10);
  654.                    LCD1602_dischar(9,0,0x30+dt[3]%10);
  655.                    NUM2=0;
  656.                  }
  657.                   if(SHAN==1) LCD1602_dischar(9,0,5);
  658.             }
  659.                 if(mode==5)                //調月模式
  660.            {
  661.                     if(NUM1!=0)
  662.                  {
  663.                    dt[4]++;
  664.                    if(dt[4]==13)
  665.                          dt[4]=1;
  666.                    LCD1602_dischar(5,0,0x30+dt[4]/10);
  667.                    LCD1602_dischar(6,0,0x30+dt[4]%10);
  668.                    NUM1=0;
  669.                  }
  670.                  if(NUM2!=0)
  671.                  {
  672.                    dt[4]--;
  673.                    if(dt[4]==0)
  674.                          dt[4]=12;
  675.                    LCD1602_dischar(5,0,0x30+dt[4]/10);
  676.                    LCD1602_dischar(6,0,0x30+dt[4]%10);
  677.                    NUM2=0;
  678.                  }
  679.                   if(SHAN==1) LCD1602_dischar(6,0,5);
  680.             }
  681.                 if(mode==6)          //調年模式
  682.            {
  683.                     if(NUM1!=0)
  684.                  {
  685.                    dt[6]++;
  686.                    if(dt[6]==100)
  687.                          dt[6]=0;
  688.                    LCD1602_dischar(2,0,0x30+dt[6]/10);
  689.                    LCD1602_dischar(3,0,0x30+dt[6]%10);
  690.                    NUM1=0;
  691.                  }
  692.                  if(NUM2!=0)
  693.                  {
  694.                    dt[6]--;
  695.                    if(dt[6]==-1)
  696.                          dt[6]=99;
  697.                    LCD1602_dischar(2,0,0x30+dt[6]/10);
  698.                    LCD1602_dischar(3,0,0x30+dt[6]%10);
  699.                    NUM2=0;
  700.                  }
  701.                   if(SHAN==1) LCD1602_dischar(3,0,5);
  702.             }
  703.   }

  704.   if(OK==1&&select==1)        //調鬧鈴模式
  705.   {


  706.           LCD1602_prints(0,0," Birthday gift  ");
  707.           LCD1602_prints(0,1,"        --by HJL");

  708.           delay(2000);
  709.           LCD1602_wcmd(0x01);
  710.           LCD1602_prints(0,0,"2013-12-04 Is   ");
  711.           LCD1602_prints(0,1,"LiYunL birthday!");

  712.           delay(2000);
  713.           LCD1602_wcmd(0x01);
  714.           LCD1602_prints(0,0,"Friends together");
  715.           LCD1602_prints(0,1,"for life...     ");

  716.           delay(2000);
  717.           LCD1602_wcmd(0x01);
  718.             mode=1 ;
  719.           OK=0;
  720.   }
  721. }
  722. void diy()
  723. {
  724.   LCD1602_init();
  725.   delay(1);
  726.   LCD1602_prints(0,0," Digital Clock  ");
  727.   LCD1602_prints(0,1,"v1.1.0  --by HJL");
  728.   delay(1000);
  729.   LCD1602_wcmd(0x01);            
  730. }



  731. void main()
  732. {
  733.   IT0=1;          //外部中斷0為下降沿觸發
  734.   EX0=1;          //
  735.   TMOD=0x01;
  736.   TH0=0x3C;                //50ms
  737.   TL0=0xB0;
  738.   EA=1;
  739.   ET0=1;
  740.   TR0=1;

  741.   get_wendu();

  742.   diy();
  743.   chaongdiaon();



  744.   while(1)
  745.   {
  746.     P1=0xff;
  747.           keyscan();
  748.         display();
  749.   }
  750. }



  751. void timer0() interrupt 1
  752. {
  753.   TH0=0x3C;
  754.   TL0=0xB0;
  755.   count++;
  756.   if(count==10)
  757.   {
  758.         count=0;
  759.         SHAN=~SHAN;
  760.   }
  761. }
復制代碼

lcd1602時鐘.zip

79.4 KB, 下載次數: 14, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2019-4-11 16:43 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

板凳
ID:492152 發表于 2019-4-16 11:38 | 只看該作者
求protues原理圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国一级特黄真人毛片免费观看 | 国产精品国产三级国产aⅴ原创 | 亚洲欧美男人天堂 | 91社影院在线观看 | 久久久一区二区 | 五月婷婷亚洲 | 欧美日韩国产一区二区三区 | 欧美在线一区二区三区 | 中文字幕在线第一页 | 男女午夜免费视频 | 欧美日韩在线一区二区三区 | 精品日韩一区二区 | 国产中文字幕在线观看 | 羞羞网站在线观看 | 91影院在线观看 | 久久成人精品 | 欧美精品久久久 | 久久国产成人 | 国产亚洲一区二区三区 | 亚洲午夜久久久 | 中文字幕亚洲一区 | 97中文视频 | 亚洲美女av网站 | 亚洲精品99999 | 在线伊人 | 中文字幕亚洲视频 | 亚洲日韩第一页 | www.中文字幕.com| 精品成人佐山爱一区二区 | 国产精品国产 | 91av视频在线观看 | 欧美亚州综合 | 免费激情av | 草樱av| 日韩成人精品 | 国产精品日韩欧美一区二区三区 | 成人午夜在线 | 欧美日韩久久 | 日日综合| 久久精品一区二区视频 | 日本黄色影片在线观看 |