找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机万年历 温湿度显示程序 四位的独立键盘进行调位、加减、切换界面

[复制链接]
跳转到指定楼层
楼主
ID:348323 发表于 2019-3-8 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过lcd1602显示,有两个界面,可以用四位的独立键盘进行调位、加减、切换界面。

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit lcdrs  =P2^0;   //液晶引脚定义
  6. sbit led_cs = P2^1;
  7. sbit lcden  =P2^2;
  8. //sbit boom   =P2^2;
  9. sbit key1 = P3^0;
  10. sbit key2 = P3^1;
  11. sbit key3 = P3^2;
  12. sbit keyE = P3^3;
  13. sbit io=P1^1;
  14. ucharnum,key1num,key2num=0,count,hour,min,sec,day,mon,year,shi,fen,miao,week;
  15. char  ye1,ye2;
  16. uchar code cg_1602[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
  17. 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
  18. 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00,
  19. 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,};//"年月日"
  20. uchar data_byte;
  21. uchar RH,RL,TH,TL;
  22. uchar code ASCII[]="0123456789%c";
  23. uchar code table0[]="    Hum:00";
  24. uchar code table1[]="    Tem:00";
  25. uchar tem;
  26. uchar hum;

  27. display0[2]={0,0};
  28. display1[2]={0,0};


  29. /*延时函数*/
  30. void delay(uint xms)
  31. {
  32.        uint i,j;
  33.        for(i=xms;i>0;i--)
  34.        for(j=110;j>0;j--);
  35. }

  36. void delay_ms(uint xms)
  37. {
  38.        uint i,j;
  39.        for(i=xms;i>0;i--)
  40.            for(j=114;j>0;j--);
  41. }
  42. // void delay1()//一个for循环大概需要8个多机器周期一个机器周期为1us晶振为12MHz也就是说本函数延时8us多此延时函数必须德稍微精确一点?
  43. //
  44. //{
  45. //uchar i;
  46. //
  47. //for(i=0;i<1;i++);
  48. //}


  49. /*1602液晶*/
  50. void write_com(uchar com)//写命令
  51. {
  52.        lcdrs=0;
  53.        lcden=0;
  54.        P0=com;
  55.        delay(5);
  56.        lcden=1;
  57.        delay(5);
  58.        lcden=0;
  59. }
  60. void write_data(uchar date)//写数据
  61. {
  62.        lcdrs=1;
  63.        lcden=0;
  64.        P0=date;
  65.        delay(5);
  66.        lcden=1;
  67.        delay(5);
  68.        lcden=0;
  69. }
  70. void write_by_xy(uchar x,uchar y)//坐标定位
  71. {
  72.        uchar address;
  73.        if(y==0)
  74.        address=0x80+x;//y=0,写第一行
  75.        else
  76.        address=0xc0+x;//y=1,写第二行
  77.        write_com(address);
  78. }
  79. /*void write_char(uchar x,uchar y,uchar date)//坐标定位显示
  80. {
  81.        write_by_xy(x,y);//先定位
  82.        write_data(date);//后写数
  83. }*/
  84. void write_string(uchar x,uchar y,uchar *s)//写字符串
  85. {
  86.        write_by_xy(x,y);//设定显示位置
  87.        while(*s)//writecharacter
  88.        {
  89.        P0=*s;
  90.        write_data(*s);
  91.        s++;
  92.        }
  93. }
  94. void DisplayOneChar (uchar x,uchar y,uchar date)
  95. {
  96. if(y) x|=0X40;   //Y=1显示第二行,Y=0显示第一行
  97. x|=0X80;
  98. write_com(x); //X用来选择哪一位
  99. write_data(date);
  100. }
  101. void write_sfm(uchar add,uchar date)//写时分秒函数
  102. {
  103.        uchar hour,ge;
  104.        hour=date/10;//分解一个2位数的十位和个位
  105.        ge=date%10;
  106.        write_com(0x80+add);//设置显示位置
  107.        write_data(0x30+hour);//送去液晶显示十位
  108.        write_data(0x30+ge);//送去液晶显示个位
  109. }
  110. void write_cg()//写入固定汉字和符号
  111. {                uchar num;
  112.        write_com(0x40);//设定CGRAM地址
  113.        for(num=0;num<24;num++)//将自定义字型码写入CGRAM中
  114.        {                                                                                                                        
  115.               write_data(cg_1602[num]);
  116.        }
  117.        write_string(2,0,":");
  118.        write_string(5,0,":");
  119.        write_string(0x0a,0,":");
  120.        write_string(0x0d,0,":");
  121.            if(key2num!=0)
  122.      {  write_string(0x0b,1," W");
  123.        write_string(0x0d,1,"K");
  124.        write_com(0xc4);//年
  125.        {
  126.               write_data(0);
  127.        }
  128.        write_com(0xc7);//月
  129.        {
  130.               write_data(1);
  131.        }
  132.        write_com(0xca);//日                  
  133.        {
  134.               write_data(2);
  135.        }                                          
  136. }
  137. } //
  138. //**************************初始化DTH11
  139. bit Init_DTH11()
  140. {
  141. bit flag;
  142. uchar num;
  143. io=0;
  144. delay_ms(19);   // >18ms
  145. io=1;
  146. for(num=0;num<10;num++);   // 20-40us    34.7us
  147. for(num=0;num<12;num++);
  148. flag=io;
  149. for(num=0;num<11;num++); //DTH响应80us
  150. for(num=0;num<24;num++);    //DTH拉高80us
  151. return flag;
  152. }
  153. //****************************读DTH11数据
  154. uchar DTH11_RD_CHAR()
  155. {
  156. uchar byte=0;
  157. uchar num;
  158. uchar num1;
  159. while(io==1);
  160. for(num1=0;num1<8;num1++)
  161. {
  162.   while(io==0);
  163.   byte<<=1;     //高位在前
  164.   for(num=0;io==1;num++);
  165.   if(num<10)
  166.    byte|=0x00;
  167.   else
  168.    byte|=0x01;
  169. }
  170. return byte;
  171. }
  172. //******************************读取DTH11温度和湿度
  173. void  DTH11_DUSHU()
  174. {
  175. uchar num;
  176. if(Init_DTH11()==0)
  177. {
  178.   hum=DTH11_RD_CHAR();   //比正常值高7度左右
  179.   DTH11_RD_CHAR();
  180.   tem=DTH11_RD_CHAR();
  181.   DTH11_RD_CHAR();
  182.   DTH11_RD_CHAR();
  183.   for(num=0;num<17;num++);  //最后BIT输出后拉低总线50us
  184.   io=1;
  185. }
  186. }
  187. void Display_DTH11()
  188.         {         {
  189. display0[1]=hum/10%10;
  190. display0[0]=hum%10;

  191. ;
  192. DisplayOneChar (3,  1, ASCII[ display0[1] ] );
  193. DisplayOneChar (4,  1, ASCII[ display0[0] ] );
  194. DisplayOneChar (5, 1, 0xdf );
  195. DisplayOneChar (6, 1, ASCII[11] );    //显示湿度
  196. display1[1]=tem/10%10;
  197. display1[0]=tem%10;
  198. DisplayOneChar (11,  1, ASCII[ display1[1] ] );
  199. DisplayOneChar (12,  1, ASCII[ display1[0] ] );
  200. DisplayOneChar (14, 1, ASCII[10] );
  201.       //显示温度         
  202. }  
  203.         
  204.         
  205.         
  206.         
  207.         
  208.         }



  209. void init_1602()//初始化
  210. {       led_cs=0;hour=19;min=30;sec=30;key1num=0;key2num=0;count=0;day=14;mon=10;
  211.            ye1=20;ye2=18;year=ye1*100+ye2;//boom=1;
  212.                 shi=19;fen=31;miao=0;week=7;
  213.        write_com(0x38);
  214.        write_com(0x0c);
  215.        write_com(0x06);
  216.        write_com(0x01);      
  217.        write_sfm(8,shi);
  218.        write_sfm(11,fen);
  219.        write_sfm(0x0e,miao);
  220.        write_sfm(0,hour);
  221.        write_sfm(3,min);
  222.        write_sfm(6,sec);
  223.         //   DTH11_DUSHU();        


  224.            write_string(0,1,"WD:");
  225.            write_sfm(0x43,tem);
  226.            DisplayOneChar (5, 1, 0xdf );
  227.            write_string(6,1,"C ");
  228.            write_string(8,1,"SD:");
  229.                  write_sfm(0x4b,hum);
  230.            write_string(13,1," % ");
  231.        write_cg();
  232.        TMOD=0x01;//设置定时器0工作模式1
  233.        TH0=(65536-50000)/256;//定时器装初值
  234.        TL0=(65536-50000)%256;
  235.        EA=1; //开总中断
  236.        ET0=1; //开定时器0中断
  237.        TR0=1; //启动定时器0
  238. }
  239. /*键盘扫描函数*/
  240. //void dis_thx()
  241. //{
  242. //                 write_sfm(0x43,tem);
  243. //                 write_sfm(0x4b,hum);
  244. //
  245. //}







  246. void keyscan()//按键扫描函数
  247. {
  248.        //keyE =0;
  249. //                if(key2num==0||key2num==2)
  250. //                {         
  251. //                        DTH11_DUSHU();
  252. //                    Display_DTH11();
  253. //                          delay_ms(2000);
  254. //                  
  255. //                   }




  256.        if(key1==0)
  257.        {
  258.               delay(5);
  259.               if(key1==0)//确认功能键被按下
  260.               {   
  261.                      key1num++;//功能键按下次数记录
  262.                      while(!key1);//释放确认
  263.                      if(key1num==1)//第一次被按下时
  264.                      {
  265.                             TR0=0;//关闭定时器
  266.                             write_com(0x80+7);//光标定位到秒位置
  267.                             write_com(0x0f);//光标开始闪烁
  268.                      }
  269.                      if(key1num==2)//第二次按下光标闪烁定位到分钟位置
  270.                      {
  271.                             write_com(0x80+4);
  272.                      }
  273.                      if(key1num==3)//第三次按下光标闪烁定位到小时位置
  274.                      {
  275.                             write_com(0x80+1);
  276.                      }
  277.                      if(key1num==4)//第四次按下光标闪烁定位到日位置
  278.                      {
  279.                             write_com(0x80+0x49);
  280.                      }
  281.                      if(key1num==5)//第五次按下光标闪烁定位到月位置
  282.                      {
  283.                             write_com(0x80+0x46);
  284.                      }
  285.                      if(key1num==6)//第六次按下光标闪烁定位到年2位置
  286.                      {
  287.                             write_com(0x80+0x43);
  288.                      }
  289.                      if(key1num==7)//第七次按下光标闪烁定位到年1位置
  290.                      {
  291.                             write_com(0x80+0x41);
  292.                      }
  293.                      if(key1num==8)//第八次按下光标闪烁定位到星期位置
  294.                      {
  295.                             write_com(0x80+0x4f);
  296.                      }
  297.                                          if(key1num==9)
  298.                                          {                write_com(0x80+9);
  299.                                          
  300.                                          }
  301.                                          if(key1num==10)
  302.                                          {                write_com(0x80+0x0c);
  303.                                          
  304.                                          }
  305.                                          if(key1num==11)
  306.                                          {                write_com(0x80+0x0f);
  307.                                          
  308.                                          }
  309.                      if(key1num==12)//第九次按下
  310.                      {
  311.                             key1num=0;//记录按键数清零
  312.                             write_com(0x0c);//取消光标闪烁
  313.                             TR0=1;//启动定时器使时钟开始走
  314.                      }
  315.               }
  316.        }
  317.        if(key1num!=0)//只有功能键被按下后,增加和减小键才有效
  318.        {
  319.               if(key2==0)
  320.               {
  321.                      delay(5);
  322.                      if(key2==0)//增加键确认被按下
  323.                      {
  324.                             while(!key2);//按键释放
  325.                             if(key1num==1)//若功能键第一次按下
  326.                             {
  327.                                    sec++;//则调整秒加1
  328.                                    if(sec==60)//若满60后将清零
  329.                                    {sec=0;min++;};
  330.                                    write_sfm(6,sec);
  331.                                                                    write_sfm(3,min);//每调节一次送液晶显示一下
  332.                                    write_com(0x80+7);//显示位置重新回到调节处
  333.                             }
  334.                             if(key1num==2)//若功能键第二次按下
  335.                             {
  336.                                    min++;//则调整分钟加1
  337.                                    if(min==60)//若满60后将清零
  338.                                    {min=0;hour++;};
  339.                                    write_sfm(3,min);
  340.                                                                    write_sfm(0,hour);//每调节一次送液晶显示一下
  341.                                    write_com(0x80+4);//显示位置重新回到调节处
  342.                             }
  343.                             if(key1num==3)//若功能键第三次按下
  344.                             {
  345.                                    hour++;//则调整小时加1
  346.                                    if(hour==24)//若满24后将清零
  347.                                    {hour=0;day++;};
  348.                                    write_sfm(0,hour);
  349.                                                                    write_sfm(0x48,day);//每调节一次送液晶显示一下
  350.                                    write_com(0x80+1);//显示位置重新回到调节处
  351.                             }
  352.                             if(key1num==4)//若功能键第四次按下
  353.                             {
  354.                                    day++;//则调整日加1
  355.                                    if(day>31)//若大于31后将置一
  356.                                    {day=1;mon++;};
  357.                                    write_sfm(0x48,day);
  358.                                                                    write_sfm(0x45,mon);//每调节一次送液晶显示一下
  359.                                    write_com(0x80+0x48);//显示位置重新回到调节处
  360.                             }
  361.                             if(key1num==5)//若功能键第五次按下
  362.                             {
  363.                                    mon++;//则调整月加1
  364.                                    if(mon>12)//若大于12后将置一
  365.                                    {mon=1;ye2++;};
  366.                                    write_sfm(0x45,mon);
  367.                                                                    write_sfm(0x42,ye2);//每调节一次送液晶显示一下
  368.                                    write_com(0x80+0x45);//显示位置重新回到调节处
  369.                             }
  370.                             if(key1num==6)//若功能键第六次按下
  371.                             {
  372.                                    ye2++;//则调整年加1
  373.                                    if(ye2>99)//若满99后将清零                                                
  374.                                                                    {ye2=0;ye1++;};
  375.                                    year=ye1*100+ye2;
  376.                                    write_sfm(0x42,ye2);
  377.                                                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  378.                                    write_com(0x80+0x42);//显示位置重新回到调节处
  379.                             }
  380.                             if(key1num==7)//若功能键第七次按下
  381.                             {
  382.                                    ye1++;//则调整年加100
  383.                                    if(ye1>99)//若满99后将清零
  384.                                    {ye1=0;ye2++;};
  385.                                    year=ye1*100+ye2;
  386.                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  387.                                    write_com(0x80+0x40);//显示位置重新回到调节处
  388.                             }
  389.                             if(key1num==8)//若功能键第八次按下
  390.                             {
  391.                                    week++;//则调整周加一
  392.                                    if(week>7)//若大于7后置一
  393.                                    week=1;
  394.                                    write_sfm(0x4f,week);//每调节一次送液晶显示一下
  395.                                    write_com(0x80+0x4f);//显示位置重新回到调节处
  396.                             }
  397.                                                         if(key1num==9)//若功能键第八次按下
  398.                             {
  399.                                    shi++;//则调整周加一
  400.                                    if(shi==24)//若大于7后置一
  401.                                    shi=0;
  402.                                    write_sfm(8,shi);//每调节一次送液晶显示一下
  403.                                    write_com(0x80+9);//显示位置重新回到调节处
  404.                             }
  405.                                                         if(key1num==10)//若功能键第八次按下
  406.                             {
  407.                                    fen++;//则调整周加一
  408.                                    if(fen==60)//若大于7后置一
  409.                                    fen=0;
  410.                                    write_sfm(0x0b,fen);//每调节一次送液晶显示一下
  411.                                    write_com(0x80+0x0c);//显示位置重新回到调节处
  412.                             }
  413.                                                         if(key1num==11)//若功能键第八次按下
  414.                             {
  415.                                    miao++;//则调整周加一
  416.                                    if(miao==60)//若大于7后置一
  417.                                    miao=0;
  418.                                    write_sfm(0x0e,miao);//每调节一次送液晶显示一下
  419.                                    write_com(0x80+0x0f);//显示位置重新回到调节处
  420.                             }
  421.                                                         
  422.                      }
  423.               }
  424.               if(key3==0)
  425.               {
  426.                      delay(5);
  427.                      if(key3==0)//确认减小键被按下
  428.                      {
  429.                             while(!key3);//按键释放
  430.                             if(key1num==1)//若功能键第一次按下
  431.                             {
  432.                                    sec--;//则调整秒减1
  433.                                    if(sec==-1)//若减到负数则将其重新设置为59
  434.                                           {sec=59;min--;};
  435.                                    write_sfm(6,sec);
  436.                                                                    write_sfm(3,min);//每调节一次送液晶显示一下
  437.                                    write_com(0x80+7);//显示位置重新回到调节处
  438.                             }
  439.                             if(key1num==2)//若功能键第二次按下
  440.                             {
  441.                                    min--;//则调整分钟减1
  442.                                    if(min==-1)//若减到负数则将其重新设置为59
  443.                                          { min=59;hour++;};
  444.                                    write_sfm(3,min);
  445.                                                                    write_sfm(0,hour);//每调节一次送液晶显示一下
  446.                                             write_com(0x80+4);//显示位置重新回到调节处
  447.                             }
  448.                             if(key1num==3)//若功能键第三次按下
  449.                             {
  450.                                    hour--;//则调整小时减1
  451.                                    if(hour==-1)//若减到负数则将其重新设置为23
  452.                                           {hour=23;day--;};
  453.                                    write_sfm(0,hour);
  454.                                                                    write_sfm(0x48,day);//每调节一次送液晶显示一下
  455.                                    write_com(0x80+1);//显示位置重新回到调节处
  456.                             }
  457.                             if(key1num==4)//若功能键第四次按下
  458.                             {
  459.                                    day--;//则调整日减1
  460.                                    if(day==0)//若日为零时将置一
  461.                                    {day=31;mon--;};
  462.                                    write_sfm(0x48,day);
  463.                                                                    write_sfm(0x45,mon);///每调节一次送液晶显示一下
  464.                                    write_com(0x80+0x49);//显示位置重新回到调节处
  465.                             }
  466.                             if(key1num==5)//若功能键第五次按下
  467.                             {
  468.                                    mon--;//则调整月减1
  469.                                    if(mon==0)//若月为零将置一
  470.                                    {mon=12;ye2--;};
  471.                                    write_sfm(0x45,mon);
  472.                                                                    write_sfm(0x42,ye2);//每调节一次送液晶显示一下
  473.                                    write_com(0x80+0x45);//显示位置重新回到调节处
  474.                             }
  475.                             if(key1num==6)//若功能键第六次按下
  476.                             {
  477.                                    ye2--;//则调整年减1
  478.                                    if(ye2<0)//若小于零后将设置为99
  479.                                    {ye2=99;ye1--;};
  480.                                    year=ye1*100+ye2;
  481.                                    write_sfm(0x42,ye2);
  482.                                                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  483.                                    write_com(0x80+0x42);//显示位置重新回到调节处
  484.                             }
  485.                             if(key1num==7)//若功能键第七次按下
  486.                             {
  487.                                    ye1--;//则调整年减100
  488.                                    if(ye1<0)//若小于零后将设置为99
  489.                                    ye1=99;
  490.                                    year=ye1*100+ye2;
  491.                                    write_sfm(0x40,ye1);//每调节一次送液晶显示一下
  492.                                    write_com(0x80+0x40);//显示位置重新回到调节处
  493.                             }
  494.                             if(key1num==8)//若功能键第八次按下
  495.                             {
  496.                                    week--;//则调整周减一
  497.                                    if(week==0)//若等于0后将置7
  498.                                    week=7;
  499.                                    write_sfm(0x4f,week);//每调节一次送液晶显示一下
  500.                                    write_com(0x80+0x4f);//显示位置重新回到调节处
  501.                             }
  502.                                                         if(key1num==9)//若功能键第八次按下
  503.                             {
  504.                                    shi--;//则调整周加一
  505.                                    if(shi==0)//若大于7后置一
  506.                                    shi=24;
  507.                                    write_sfm(8,shi);//每调节一次送液晶显示一下
  508.                                    write_com(0x80+9);//显示位置重新回到调节处
  509.                             }
  510.                                                         if(key1num==10)//若功能键第八次按下
  511.                             {
  512.                                    fen--;//则调整周加一
  513.                                    if(fen==0)//若大于7后置一
  514.                                    fen=60;
  515.                                    write_sfm(0x0b,fen);//每调节一次送液晶显示一下
  516.                                    write_com(0x80+0x0c);//显示位置重新回到调节处
  517.                             }
  518.                                                         if(key1num==11)//若功能键第八次按下
  519.                             {           
  520.                                    miao--;//则调整周加一
  521.                                    if(miao==0)//若大于7后置一
  522.                                    miao=60;
  523.                                    write_sfm(0x0e,miao);//每调节一次送液晶显示一下
  524.                                    write_com(0x80+0x0f);//显示位置重新回到调节处
  525.                             }



  526.                      }
  527.               }
  528.        }
  529.            if(keyE==0)
  530.            {        delay(5);
  531.                             if(keyE==0)
  532.                                    {        key2num++;
  533.                                            while(!keyE);
  534.                                                  if(key2num==1)
  535.                                                         {  TR0=0;
  536.                                                            write_string(0,1,"2018");
  537.                                                        write_string(5,1,"10");
  538.                                                        write_string(8,1,"14");
  539.                                                        write_sfm(0x48,day);
  540.                                                        write_sfm(0x45,mon);
  541.                                                        write_sfm(0x40,ye1);
  542.                                                        write_sfm(0x42,ye2);
  543.                                                        write_sfm(0x4e,week);
  544.                                                            write_cg();
  545.                                                         }
  546.                                                  if(key2num==2)
  547.                                                  {         key2num=0;
  548.                                                 //         DTH11_DUSHU();
  549. //                                                    Display_DTH11();
  550. //                                                          delay_ms(2000);
  551.                                                           write_string(0,1,"WD:");
  552.                                                          write_sfm(0x43,tem);
  553.                                                          DisplayOneChar (5, 1, 0xdf );
  554.                                                            write_string(6,1,"C ");
  555.                                                             write_string(8,1,"SD:");
  556.                                                          write_sfm(0x4b,hum-32);
  557.                                                             write_string(13,1," % ");
  558.                                                            TR0=1;                                                
  559.                                                  }
  560.                                 }
  561.            
  562.            
  563.            }





  564.            
  565. }

  566. /*中断函数*/
  567. void timer0() interrupt 1//定时器0中断服务程序
  568. {
  569.        TH0=(65536-50000)/256;//再次装定时器初值
  570.        TL0=(65536-50000)%256;
  571.        count++;//中断次数累加
  572.        if(count==20)//20次50毫秒为1秒
  573.        {
  574.               count=0;
  575.               sec++;
  576.               if(sec==60)//秒加到60则进位分钟
  577.               {
  578.                      sec=0;//同时秒数清零
  579.                      min++;
  580.                      if(min==60)//分钟加到60则进位小时
  581.                      {
  582.                             min=0;//同时分钟数清零
  583.                             hour++;
  584.                             //boom=1;                                                                                                                                                                           '..
  585.                             //delay(5);
  586.                             //boom=0;
  587.                             if(hour==24)//小时加到24则小时清零
  588.                             {
  589.                                    hour=0;
  590.                                    day++;
  591.                                    week++;
  592.                                    if(week>7)
  593.                                    {
  594.                                    week=1;
  595.                                    }
  596.                                    if(mon==1)
  597.                                    {
  598.                                     if(day>31)
  599.                                     {
  600.                                     day=1;
  601.                                     mon++;
  602.                                     }
  603.                                     }
  604.                                     if(mon==2)
  605.                                    {
  606.                                     if((year%4==0 &&year%100!=0)||year%4==0)
  607.                                     {
  608.                                     if(day>29)
  609.                                     {
  610.                                     day=1;
  611.                                     mon++;
  612.                                     }
  613.                                     }
  614.                                     else if(day>28)
  615.                                     {
  616.                                     day=1;
  617.                                     mon++;
  618.                                     }
  619.                                     }
  620.                                     if(mon==3)
  621.                                    {
  622.                                     if(day>31)
  623.                                     {
  624.                                     day=1;
  625.                                     mon++;
  626.                                     }
  627.                                     }
  628.                                     if(mon==4)
  629.                                    {
  630.                                     if(day>30)
  631.                                     {
  632.                                     day=1;
  633.                                     mon++;
  634.                                     }
  635.                                     }
  636.                                     if(mon==5)
  637.                                    {
  638.                                     if(day>31)
  639.                                     {
  640.                                     day=1;
  641.                                     mon++;
  642.                                     }
  643.                                     }
  644.                                     if(mon==6)
  645.                                    {
  646.                                     if(day>30)
  647.                                     {
  648.                                     day=1;
  649.                                     mon++;
  650.                                     }
  651.                                     }
  652.                                     if(mon==7)
  653.                                    {
  654.                                     if(day>31)
  655.                                     {
  656.                                     day=1;
  657.                                     mon++;
  658.                                     }
  659.                                     }
  660.                                     if(mon==8)
  661.                                    {
  662.                                     if(day>31)
  663.                                     {
  664.                                     day=1;
  665.                                     mon++;
  666.                                     }
  667.                                     }if(mon==9)
  668.                                    {
  669.                                     if(day>30)
  670.                                     {
  671.                                     day=1;
  672. ……………………

  673. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

Keil代码下载(1个文件):
万年历(温湿度 arm).7z (69.56 KB, 下载次数: 41)

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

使用道具 举报

沙发
ID:1 发表于 2019-3-9 02:48 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:1017804 发表于 2022-4-12 14:57 | 只看该作者
有没有原理图什么的
回复

使用道具 举报

地板
ID:993979 发表于 2022-5-9 09:59 | 只看该作者
谁能根据楼主的代码做一个仿真图吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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