找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 873|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机1302+1602程序

[复制链接]
跳转到指定楼层
楼主
也是自学没多久,资源有些是网上的,有些是自己写的、



直接上程序
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DQ=P3^7;                  //温度 DS18B20接口
  6. sbit light=P0^4;          //蜂鸣器
  7. sbit k1=P3^4;                  //按键  +
  8. sbit k2=P3^5;                  //设置键/切换键         
  9. sbit k3=P3^2;                  //确定键        OK
  10. sbit k4=P3^3;                         //减键           ——
  11. sbit k5=P0^4;                //初始化1302
  12. //sbit led0=P1^7;              //呼吸灯设定
  13. //sbit led1P1^5;

  14. sbit DS1302_CE=P3^0;
  15. sbit DS1302_IO=P3^1;
  16. sbit DS1302_SCLK=P3^6;

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

  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. //uchar led01;

  33. /**************************DS1302 *********************************/

  34. uchar dt[7];

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

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

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


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


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

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

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

  130. void get_time()
  131. {
  132. uint x;
  133.   dt[0] =DS1302_read(0x81);                 //读1302时间,秒
  134.   x=DS1302_read(0x81);   // -------------------------------增加的------------------------------增加的------------------------------增加的------------------------------增加的
  135.   P1=~x;
  136.   //if(x%2!=0){led0=0;led1=1;}else{        led0=1;led1=0;        }
  137.                   //----------------------------------------------
  138.   dt[1] =DS1302_read(0x83);                 //分
  139.   dt[2] =DS1302_read(0x85);                 //时
  140.   dt[3] =DS1302_read(0x87);                 //日
  141.   dt[4] =DS1302_read(0x89);                 //月
  142.   dt[5] =DS1302_read(0x8b);                 //?周
  143.   dt[6] =DS1302_read(0x8d);                 //年



  144. }

  145. void chaongdiaon()                                   //充电
  146. {
  147. DS1302_write(0x8e,0x00);           /* 控制命令,WP=0,解除写保护*/
  148.   _nop_();
  149.   _nop_();
  150. DS1302_write(0x90, 0xa6);    //使能充电   用一个二极管  用4k电阻
  151. DS1302_write(0x8e,0x80);           /* 控制命令,WP=1,写保护*/
  152.   _nop_();
  153.   _nop_();
  154. }
  155. /*********************************   LCD  1602      ******************/
  156. uchar code self_char[]={
  157.                                                 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, //年
  158.                                                 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x01, //月
  159.                                                 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //日
  160.                                                 0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //温度标志— —摄氏度
  161.                                                 0x00,0x04,0x0E,0x1F,0x0E,0x04,0x00,0x00, //符号◆
  162.                                                 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //全开
  163.                                                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //
  164.                                                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00         //
  165.                                            };

  166. bit lcd_busy()
  167. {
  168.   bit result;
  169.   LCD1602_RS=0;
  170.   LCD1602_RW=1;
  171.   LCD1602_EN=1;
  172.   _nop_();
  173.   _nop_();
  174.   _nop_();
  175.   _nop_();
  176.   result = (bit)(P2&0x80);
  177.   LCD1602_EN=0;
  178.   return(result);
  179. }

  180. void LCD1602_wcmd(uchar cmd)
  181. {
  182.   while(lcd_busy());
  183.   LCD1602_RS=0;
  184.   LCD1602_RW=0;
  185.   _nop_();
  186.   _nop_();
  187.   LCD1602_EN=1;
  188.   _nop_();
  189.   _nop_();
  190.   _nop_();
  191.   _nop_();
  192.   P2=cmd;
  193.   _nop_();
  194.   _nop_();
  195.   _nop_();
  196.   _nop_();
  197.   LCD1602_EN=0;
  198. }

  199. void LCD1602_wdat(uchar dat)
  200. {
  201.   while(lcd_busy());
  202.   LCD1602_RS=1;
  203.   LCD1602_RW=0;
  204.   LCD1602_EN=1;
  205.   _nop_();
  206.   _nop_();
  207.   _nop_();
  208.   _nop_();
  209.   P2=dat;
  210.   _nop_();
  211.   _nop_();
  212.   _nop_();
  213.   _nop_();
  214.   LCD1602_EN=0;
  215. }

  216. void LCD1602_pos(uchar x,bit y)                //指定坐标,x为列,0~15,y为行,0为第一行,1为第二行。
  217. {
  218.   if(y)LCD1602_wcmd(x|0xc0);
  219.   else LCD1602_wcmd(x|0x80);
  220. }

  221. void LCD1602_dischar(uchar x,bit y,uchar dat)        //指定位置显示一个字符
  222. {
  223.   LCD1602_pos(x,y);
  224.   LCD1602_wdat(dat);
  225. }

  226. void LCD1602_prints(uchar x,bit y,uchar *p)                                        //指定位置显示字符串
  227. {
  228.   LCD1602_pos(x,y);
  229.   while((*p) != '\0') {LCD1602_wdat(*p);p++;}
  230. }

  231. void LCD1602_init()
  232. {
  233.   uchar i;
  234.   LCD1602_wcmd(0x40);
  235.   for(i=0;i<64;i++)
  236.         {
  237.           LCD1602_wdat(self_char[i]);
  238.         }
  239.   LCD1602_wcmd(0x38);
  240.   LCD1602_wcmd(0x38);
  241.   LCD1602_wcmd(0x0c);
  242.   LCD1602_wcmd(0x06);
  243.   LCD1602_wcmd(0x01);
  244. }
  245. /****************************   18B20   ************************************/
  246. uchar wendu[4];

  247. void delay_18b20(uchar i)
  248. {
  249.   int j;
  250.   for(j=0;j<i;j++);
  251. }

  252. uchar init_18b20()
  253. {
  254.   uchar i;
  255.   DQ=0;
  256.   delay_18b20(30);
  257.   DQ=1;
  258.   delay_18b20(3);
  259.   i=DQ;
  260.   delay_18b20(20);
  261.   return(i);
  262. }

  263. uchar read_18b20_bit()
  264. {
  265.   uchar i;
  266.   DQ=0;
  267.   DQ=1;
  268.   for(i=0;i<3;i++);
  269.   return(DQ);
  270. }

  271. void write_18b20_bit(unsigned xbit)
  272. {
  273.   DQ=0;
  274.   if(xbit==1)
  275.   DQ=1;
  276.   delay_18b20(5);
  277.   DQ=1;
  278. }

  279. uchar read_18b20_byte()
  280. {
  281.   uchar i,j,value;
  282.   j=1;
  283.   value=0;
  284.   for(i=0;i<8;i++)
  285.   {
  286.         if(read_18b20_bit())
  287.         {
  288.           value=value+(j<<i);
  289.         }
  290.         delay_18b20(6);
  291.   }
  292.   return(value);
  293. }

  294. void write_18b20_byte(uchar x)
  295. {
  296.   uchar i,j;
  297.   for(i=0;i<8;i++)
  298.   {
  299.         j=x>>i;
  300.         j=j&0x01;
  301.         write_18b20_bit(j);
  302.         delay_18b20(5);
  303.   }
  304. }

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


  331. /*******************************          主程序         ***************/

  332. uchar mode=0,OK=0;
  333. uchar dis1[16],dis2[16];
  334. //uchar IRCOM[7],IRCODE=0;
  335. uchar NUM1,NUM2;
  336. uchar count;
  337. bit L=0,select=0,DIS_EN=1,SHAN;

  338. void delay(uint i)
  339. {
  340.   uchar j;
  341.   while(i-- !=0)
  342.   {
  343.     for(j=0;j<120;j++);
  344.   }
  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]=' ';
  365.                           dis1[14]='1';
  366.                           dis1[15]=' ';
  367.                         }
  368.                         break;
  369.         case 2: {
  370.                           dis1[13]=' ';
  371.                           dis1[14]='2';
  372.                           dis1[15]=' ';
  373.                         }
  374.                         break;
  375.         case 3: {
  376.                           dis1[13]=' ';
  377.                           dis1[14]='3';
  378.                           dis1[15]=' ';
  379.                         }
  380.                         break;
  381.         case 4: {
  382.                           dis1[13]=' ';
  383.                           dis1[14]='4';
  384.                           dis1[15]=' ';
  385.                         }
  386.                         break;
  387.         case 5: {
  388.                           dis1[13]=' ';
  389.                           dis1[14]='5';
  390.                           dis1[15]=' ';
  391.                         }
  392.                         break;
  393.         case 6: {
  394.                           dis1[13]=' ';
  395.                           dis1[14]='6';
  396.                           dis1[15]=' ';
  397.                         }
  398.                         break;
  399.         case 7: {
  400.                           dis1[13]=' ';
  401.                           dis1[14]='7';
  402.                           dis1[15]=' ';
  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=0;
  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," 1 ");break;
  609.                          case 2: LCD1602_prints(13,0," 2 ");break;
  610.                          case 3: LCD1602_prints(13,0," 3 ");break;
  611.                          case 4: LCD1602_prints(13,0," 4 ");break;
  612.                          case 5: LCD1602_prints(13,0," 5 ");break;
  613.                          case 6: LCD1602_prints(13,0," 6 ");break;
  614.                          case 7: LCD1602_prints(13,0," 7 ");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," 1 ");break;
  626.                          case 2: LCD1602_prints(13,0," 2 ");break;
  627.                          case 3: LCD1602_prints(13,0," 3 ");break;
  628.                          case 4: LCD1602_prints(13,0," 4 ");break;
  629.                          case 5: LCD1602_prints(13,0," 5 ");break;
  630.                          case 6: LCD1602_prints(13,0," 6 ");break;
  631.                          case 7: LCD1602_prints(13,0," 7 ");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. /*
  723. void diy()
  724. {
  725.   LCD1602_init();
  726.   delay(1);
  727.   LCD1602_prints(0,0," Digital Clock  ");
  728.   LCD1602_prints(0,1,"v1.1.0  --by HJL");
  729.   delay(1000);
  730.   LCD1602_wcmd(0x01);            
  731. }
  732.   */


  733. void main()
  734. {
  735.   IT0=1;          //外部中断0为下降沿触发
  736.   EX0=1;          //
  737.   TMOD=0x01;
  738.   TH0=0x3C;                //50ms
  739.   TL0=0xB0;
  740.   EA=1;
  741.   ET0=1;
  742.   TR0=1;

  743.   get_wendu();
  744.    LCD1602_init();
  745. // diy();
  746. LCD1602_wcmd(0x01);
  747.   chaongdiaon();

  748.   //  P1=0xff;

  749.   while(1)
  750.   {
  751.   //  P1=0xff;
  752.           keyscan();
  753.         display();


  754.   }
  755. }



  756. void timer0() interrupt 1
  757. {
  758.   TH0=0x3C;
  759.   TL0=0xB0;
  760.   count++;
  761.   if(count==10)
  762.   {
  763.         count=0;
  764.         SHAN=~SHAN;
  765.   }
  766. }
复制代码


评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表