找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2670|回复: 3
收起左侧

单片机三机通信课程设计(源码)

[复制链接]
ID:323257 发表于 2018-5-6 09:59 | 显示全部楼层 |阅读模式
这个是单片机课设,是关于三机通信的,主要是源代码
0.png

单片机源程序如下(主机):
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar xingqi,nian,yue,ri,xiaoshi,miao;
  5. uchar dd ;
  6. sbit clk=P1^0;    //注意P要大写,DS1302的信号脚的连接
  7. sbit dat=P1^1;      
  8. sbit rst=P1^2;
  9. sbit A0=ACC^0;
  10. sbit A1=ACC^1;
  11. sbit A2=ACC^2;
  12. sbit A3=ACC^3;
  13. sbit A4=ACC^4;
  14. sbit A5=ACC^5;
  15. sbit A6=ACC^6;
  16. sbit A7=ACC^7;
  17. sbit p30=P3^0;
  18. sbit p31=P3^1;
  19. sbit p32=P3^2;
  20. sbit p33=P3^3;
  21. sbit p34=P3^4;
  22. sbit p35=P3^5;
  23. sbit p36=P3^6;
  24. sbit p37=P3^7;
  25. sbit date=P2^0;    //max7219
  26. sbit load=P2^1;    //max7219
  27. sbit clkk=P2^2;   //max7219

  28. uchar bdata bitmsb;
  29. sbit m7=bitmsb^7;
  30. uchar x,y,c;     //x,y,max7219的寄存器地址
  31. bit flag=0;      //调整控制标记
  32. bit flagh=1;     //时间日期切换标记
  33. uchar code tab[]={ 0xff,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8}; //显示星期的共阴极LED
  34. uchar code tab1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
  35.                    0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,  
  36.                    0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,
  37.                    0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,
  38.                    0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
  39.                    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
  40.                    0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,
  41.                 0x56,0x57,0x58,0x59,0x60}; //PROTEUS显示时间窗口的代码
  42. uchar code tab2[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};

  43. void send(void)            //送MAX7219数据
  44. {
  45.    uchar i;
  46.    uchar count;
  47.    bitmsb=x;
  48.    for(count=0;count<8;count++)
  49.      {
  50.             if(m7)
  51.                    {
  52.                      clkk=0;
  53.                          date=1;
  54.                     for(i=0;i<1;i++);//延时
  55.                          clkk=1;
  56.                          }
  57.                 else
  58.                     {
  59.                            clkk=0;
  60.                            date=0;
  61.                            for(i=0;i<1;i++);
  62.                            clkk=1;
  63.                            }
  64.                      bitmsb<<=1;        
  65.            }
  66. }

  67. void  wr(void)           
  68. {
  69.    load=0;
  70.    send();
  71.    x=y;
  72.    send();
  73.    load=1;
  74. }
  75. void ready(void)
  76. {
  77.    x=0xfb;
  78.    y=0x07;
  79.    wr();
  80.    x=0xf9;
  81.    y=0x00;
  82.    wr();
  83.    x=0xfa;
  84.    y=0x0c;
  85.    wr();
  86.    x=0xfc;
  87.    y=0x01;
  88.    wr();
  89. }
  90. void inputbyte(uchar dd)  //写一个字节到1302中
  91.   {
  92.     uchar i;
  93.      ACC=dd;
  94.      for(i=8;i>0;i--)
  95.      {
  96.       dat=A0;
  97.       clk=1;
  98.       clk=0;
  99.       ACC=ACC>>=1;
  100.       }
  101.    }
  102. void outputbyte(void)   //从DS1302中读到i个数据
  103.   {
  104.     uchar i;
  105.     dat=1;
  106.     for(i=8;i>0;i--)
  107.      {
  108.        ACC=ACC>>=1;  //右移1位
  109.        A7=dat;   //dat=p1.1,先读出的是低位数据
  110.        clk=1;
  111.        clk=0;
  112.       }
  113.        dd=ACC;
  114.    }
  115. void write(uchar addr,uchar num)
  116.     {
  117.       rst=0;
  118.       clk=0;
  119.       rst=1;
  120.       inputbyte(addr);    //写地址
  121.       inputbyte(num);     //写数据
  122.       clk=1;
  123.       rst=0;
  124.      }
  125. void writesec(uchar num)
  126.     {
  127.      write(0x80,num);
  128.      }
  129. void writemin(uchar num)
  130.     {
  131.      write(0x82,num);
  132.      }
  133. void writehr(uchar num)
  134.     {
  135.      write(0x84,num);
  136.      }

  137. void writeday(uchar num)
  138.     {
  139.      write(0x86,num);
  140.      }
  141.   

  142. void writemn(uchar num)
  143.     {
  144.      write(0x88,num);
  145.      }
  146. void writewe(uchar num)
  147.     {
  148.      write(0x8a,num);
  149.      }
  150. void writeys(uchar num)
  151.     {
  152.      write(0x8c,num);
  153.      }
  154. void disablewp(void)
  155.     {
  156.      write(0x8e,0x00);
  157.      }
  158. void read(uchar addr)
  159.     {
  160.      rst=0;
  161.      clk=0;
  162.      rst=1;
  163.      inputbyte(addr);
  164.      outputbyte();
  165.      clk=1;
  166.      rst=0;
  167.      }
  168. void  main(void)
  169.    {
  170.     uchar  i;
  171.         uint xt=0;  //......
  172.     uchar  fen1,fen2,fen3,fen4,fen,nian,nianh,nianl,fenh,fenl;
  173.         uchar yue,yueh,yuel,ri,rih,ril,xiaoshi,xiaoshih,xiaoshil;
  174.         uchar miao,miaoh,miaol;
  175.     P3=0xff;
  176.     disablewp();
  177.     writesec(0x00);
  178.     writemin(0x58);
  179.     writehr(0x23);
  180.     writeday(0x27);
  181.     writemn(0x05);
  182.     writeys(0x08);
  183.     writewe(0x02);

  184.         ready();
  185.     for(i=0;i<222;i++);
  186.     for(i=0;i<222;i++);
  187.   while(1)
  188.     {
  189.       for(i=0;i<200;i++);
  190.       for(i=0;i<200;i++);
  191.       for(i=0;i<200;i++);
  192.       for(i=0;i<200;i++);
  193.       read(0x8b);
  194.       xingqi=dd;
  195.       read(0x8d);   //读年,转换位BCD码
  196.       fen1=dd;
  197.       fen2=fen1&0x0f;
  198.       fen3=fen1&0xf0;
  199.       fen3>>=4;
  200.       nian=fen3*10+fen2;
  201.       nianh=nian/10;
  202.       nianl=nian%10;

  203.       read(0x89);   //读月,转换位BCD码
  204.       fen1=dd;
  205.       fen2=fen1&0x0f;
  206.       fen3=fen1&0xf0;
  207.       fen3>>=4;
  208.       yue=fen3*10+fen2;
  209.       yueh=yue/10;
  210.       yuel=yue%10;

  211.       read(0x87);   //读日,转换位BCD码
  212.       fen1=dd;
  213.       fen2=fen1&0x0f;
  214.       fen3=fen1&0xf0;
  215.       fen3>>=4;
  216.       ri=fen3*10+fen2;
  217.       rih=ri/10;
  218.       ril=ri%10;

  219.       read(0x85);   //读小时,转换位BCD码
  220.       fen1=dd;
  221.       fen2=fen1&0x0f;
  222.       fen3=fen1&0xf0;
  223.       fen3>>=4;
  224.       xiaoshi=fen3*10+fen2;
  225.       xiaoshih=xiaoshi/10;
  226.       xiaoshil=xiaoshi%10;

  227.       read(0x83);   //读分,转换位BCD码
  228.       fen1=dd;
  229.       fen2=fen1&0x0f;
  230.       fen3=fen1&0xf0;
  231.       fen3>>=4;
  232.       fen=fen3*10+fen2;
  233.       fenh=fen/10;
  234.       fenl=fen%10;

  235.       read(0x81);   //读秒,转换为CD码
  236.       fen1=dd;
  237.       fen2=fen1&0x0f;
  238.       fen3=fen1&0xf0;
  239.       fen3>>=4;
  240.       miao=fen3*10+fen2;
  241.       miaoh=miao/10;
  242.       miaol=miao%10;

  243.           if(flagh)
  244.           {
  245.             c=1;
  246.                 x=1;
  247.                 y=tab2[xiaoshih];
  248.                 x=c;
  249.                 wr();
  250.                 c++;
  251.         y=tab2[xiaoshil];
  252.                 x=c;
  253.                 wr();
  254.                 c++;

  255.                 y=0x01;
  256.                 x=c;
  257.                 wr();
  258.                 c++;

  259.             y=tab2[fenh];
  260.                 x=c;
  261.                 wr();
  262.                 c++;

  263.                 y=tab2[fenl];
  264.                 x=c;
  265.                 wr();
  266.                 c++;
  267.    
  268.            y=0x01;
  269.                 x=c;
  270.                 wr();
  271.                 c++;
  272.         
  273.        y=tab2[miaoh];
  274.                 x=c;
  275.                 wr();
  276.                 c++;

  277.                 y=tab2[miaol];
  278.                 x=c;
  279.                 wr();
  280.                 //c++;
  281.      P0=tab[xingqi];
  282.            }  
  283.   else
  284.     {
  285.          c=1;
  286.          x=1;
  287.          y=tab2[nianh];
  288.          x=c;
  289.          wr();
  290.          c++;
  291.      y=tab2[nianl];
  292.          x=c;
  293.          wr();
  294.          c++;

  295.      y=0x01;
  296.                 x=c;
  297.                 wr();
  298.                 c++;

  299.       y=tab2[yueh];
  300.          x=c;
  301.          wr();
  302.          c++;
  303.      y=tab2[yuel];
  304.          x=c;
  305.          wr();
  306.          c++;

  307.      y=0x01;
  308.                 x=c;
  309.                 wr();
  310.                 c++;

  311.      y=tab2[rih];
  312.          x=c;
  313.          wr();
  314.          c++;
  315.      y=tab2[ril];
  316.          x=c;
  317.          wr();
  318.          c++;

  319.     P0=tab[xingqi];

  320.         }


  321. if(p30==0)
  322.         if(flag)
  323.         {
  324.           read(0x8b);
  325.           xingqi=dd;
  326.           xingqi++;
  327.           if(xingqi>=8)
  328.            xingqi=1;
  329.           writewe(xingqi);
  330.            while(p30==0);
  331.          }

  332.         
  333.         if(p31==0)
  334.         if(flag)
  335.          {
  336.           read(0x8d);
  337.           fen1=dd;
  338.           fen2=fen1&0x0f;
  339.           fen3=fen1&0xf0;
  340.           fen3=fen3>>=4;
  341.           nian=fen3*10+fen2;
  342.           nian++;
  343.           if(nian>=31)
  344.            nian=8;
  345.           writeys(tab1[nian]);
  346.            while(p31==0);
  347.          }

  348.           if(p32==0)
  349.         if(flag)
  350.          {
  351.           read(0x89);
  352.           fen1=dd;
  353.           fen2=fen1&0x0f;
  354.           fen3=fen1&0xf0;
  355.           fen3=fen3>>=4;
  356.          yue=fen3*10+fen2;
  357.           yue++;
  358.           if(yue>=13)
  359.            yue=1;
  360.           writemn(tab1[yue]);
  361.            while(p32==0);
  362.          }
  363.           if(p33==0)
  364.         if(flag)
  365.          {
  366.           read(0x87);
  367.           fen1=dd;
  368.           fen2=fen1&0x0f;
  369.           fen3=fen1&0xf0;
  370.           fen3=fen3>>=4;
  371.           ri=fen3*10+fen2;
  372.           ri++;
  373.           if(ri>=32)
  374.            ri=1;
  375.           writeday(tab1[ri]);
  376.            while(p33==0);
  377.          }
  378.          if(p34==0)
  379.         if(flag)
  380.          {
  381.           read(0x85);
  382.           fen1=dd;
  383.           fen2=fen1&0x0f;
  384.           fen3=fen1&0xf0;
  385.           fen3=fen3>>=4;
  386.           xiaoshi=fen3*10+fen2;
  387.           xiaoshi++;
  388.           if(xiaoshi>=24)
  389.            xiaoshi=0;
  390.           writehr(tab1[xiaoshi]);
  391.            while(p34==0);
  392.          }
  393.         if(p35==0)
  394.         if(flag)
  395.          { read(0x83);
  396.           fen1=dd;
  397.           fen2=fen1&0x0f;
  398.           fen3=fen1&0xf0;
  399.           fen3=fen3>>=4;
  400.           fen4=fen3*10+fen2;
  401.           fen4++;
  402.           if(fen4>=60)
  403.            fen4=0;
  404.           writemin(tab1[fen4]);
  405.            while(p35==0);
  406.          }
  407.         if(p37==0)
  408.              { flag=~flag;
  409.                if (flag)   
  410.                writesec(0x80);
  411.                else
  412.                writesec(0x00);
  413.                            while(p37==0);
  414.               }
  415.         if(p36==0)
  416.              { flagh=~flagh;
  417.                            while(p36==0);
  418.                          }
  419.         }
  420. }
复制代码

所有资料51hei提供下载:
三机通信.zip (447.36 KB, 下载次数: 33)
回复

使用道具 举报

ID:531072 发表于 2019-6-25 15:43 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:531072 发表于 2019-6-25 15:43 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

ID:572103 发表于 2019-6-25 21:49 | 显示全部楼层
为什么下载都要扣分?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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