这个是单片机课设,是关于三机通信的,主要是源代码
单片机源程序如下(主机):
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar xingqi,nian,yue,ri,xiaoshi,miao;
- uchar dd ;
- sbit clk=P1^0; //注意P要大写,DS1302的信号脚的连接
- sbit dat=P1^1;
- sbit rst=P1^2;
- sbit A0=ACC^0;
- sbit A1=ACC^1;
- sbit A2=ACC^2;
- sbit A3=ACC^3;
- sbit A4=ACC^4;
- sbit A5=ACC^5;
- sbit A6=ACC^6;
- sbit A7=ACC^7;
- sbit p30=P3^0;
- sbit p31=P3^1;
- sbit p32=P3^2;
- sbit p33=P3^3;
- sbit p34=P3^4;
- sbit p35=P3^5;
- sbit p36=P3^6;
- sbit p37=P3^7;
- sbit date=P2^0; //max7219
- sbit load=P2^1; //max7219
- sbit clkk=P2^2; //max7219
- uchar bdata bitmsb;
- sbit m7=bitmsb^7;
- uchar x,y,c; //x,y,max7219的寄存器地址
- bit flag=0; //调整控制标记
- bit flagh=1; //时间日期切换标记
- uchar code tab[]={ 0xff,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8}; //显示星期的共阴极LED
- uchar code tab1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
- 0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,
- 0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,
- 0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,
- 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
- 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
- 0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,
- 0x56,0x57,0x58,0x59,0x60}; //PROTEUS显示时间窗口的代码
- uchar code tab2[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
- void send(void) //送MAX7219数据
- {
- uchar i;
- uchar count;
- bitmsb=x;
- for(count=0;count<8;count++)
- {
- if(m7)
- {
- clkk=0;
- date=1;
- for(i=0;i<1;i++);//延时
- clkk=1;
- }
- else
- {
- clkk=0;
- date=0;
- for(i=0;i<1;i++);
- clkk=1;
- }
- bitmsb<<=1;
- }
- }
- void wr(void)
- {
- load=0;
- send();
- x=y;
- send();
- load=1;
- }
- void ready(void)
- {
- x=0xfb;
- y=0x07;
- wr();
- x=0xf9;
- y=0x00;
- wr();
- x=0xfa;
- y=0x0c;
- wr();
- x=0xfc;
- y=0x01;
- wr();
- }
- void inputbyte(uchar dd) //写一个字节到1302中
- {
- uchar i;
- ACC=dd;
- for(i=8;i>0;i--)
- {
- dat=A0;
- clk=1;
- clk=0;
- ACC=ACC>>=1;
- }
- }
- void outputbyte(void) //从DS1302中读到i个数据
- {
- uchar i;
- dat=1;
- for(i=8;i>0;i--)
- {
- ACC=ACC>>=1; //右移1位
- A7=dat; //dat=p1.1,先读出的是低位数据
- clk=1;
- clk=0;
- }
- dd=ACC;
- }
- void write(uchar addr,uchar num)
- {
- rst=0;
- clk=0;
- rst=1;
- inputbyte(addr); //写地址
- inputbyte(num); //写数据
- clk=1;
- rst=0;
- }
- void writesec(uchar num)
- {
- write(0x80,num);
- }
- void writemin(uchar num)
- {
- write(0x82,num);
- }
- void writehr(uchar num)
- {
- write(0x84,num);
- }
- void writeday(uchar num)
- {
- write(0x86,num);
- }
-
- void writemn(uchar num)
- {
- write(0x88,num);
- }
- void writewe(uchar num)
- {
- write(0x8a,num);
- }
- void writeys(uchar num)
- {
- write(0x8c,num);
- }
- void disablewp(void)
- {
- write(0x8e,0x00);
- }
- void read(uchar addr)
- {
- rst=0;
- clk=0;
- rst=1;
- inputbyte(addr);
- outputbyte();
- clk=1;
- rst=0;
- }
- void main(void)
- {
- uchar i;
- uint xt=0; //......
- uchar fen1,fen2,fen3,fen4,fen,nian,nianh,nianl,fenh,fenl;
- uchar yue,yueh,yuel,ri,rih,ril,xiaoshi,xiaoshih,xiaoshil;
- uchar miao,miaoh,miaol;
- P3=0xff;
- disablewp();
- writesec(0x00);
- writemin(0x58);
- writehr(0x23);
- writeday(0x27);
- writemn(0x05);
- writeys(0x08);
- writewe(0x02);
- ready();
- for(i=0;i<222;i++);
- for(i=0;i<222;i++);
- while(1)
- {
- for(i=0;i<200;i++);
- for(i=0;i<200;i++);
- for(i=0;i<200;i++);
- for(i=0;i<200;i++);
- read(0x8b);
- xingqi=dd;
- read(0x8d); //读年,转换位BCD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- nian=fen3*10+fen2;
- nianh=nian/10;
- nianl=nian%10;
- read(0x89); //读月,转换位BCD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- yue=fen3*10+fen2;
- yueh=yue/10;
- yuel=yue%10;
- read(0x87); //读日,转换位BCD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- ri=fen3*10+fen2;
- rih=ri/10;
- ril=ri%10;
- read(0x85); //读小时,转换位BCD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- xiaoshi=fen3*10+fen2;
- xiaoshih=xiaoshi/10;
- xiaoshil=xiaoshi%10;
- read(0x83); //读分,转换位BCD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- fen=fen3*10+fen2;
- fenh=fen/10;
- fenl=fen%10;
-
- read(0x81); //读秒,转换为CD码
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3>>=4;
- miao=fen3*10+fen2;
- miaoh=miao/10;
- miaol=miao%10;
- if(flagh)
- {
- c=1;
- x=1;
- y=tab2[xiaoshih];
- x=c;
- wr();
- c++;
- y=tab2[xiaoshil];
- x=c;
- wr();
- c++;
- y=0x01;
- x=c;
- wr();
- c++;
- y=tab2[fenh];
- x=c;
- wr();
- c++;
-
- y=tab2[fenl];
- x=c;
- wr();
- c++;
-
- y=0x01;
- x=c;
- wr();
- c++;
-
- y=tab2[miaoh];
- x=c;
- wr();
- c++;
-
- y=tab2[miaol];
- x=c;
- wr();
- //c++;
- P0=tab[xingqi];
- }
- else
- {
- c=1;
- x=1;
- y=tab2[nianh];
- x=c;
- wr();
- c++;
- y=tab2[nianl];
- x=c;
- wr();
- c++;
- y=0x01;
- x=c;
- wr();
- c++;
- y=tab2[yueh];
- x=c;
- wr();
- c++;
- y=tab2[yuel];
- x=c;
- wr();
- c++;
- y=0x01;
- x=c;
- wr();
- c++;
- y=tab2[rih];
- x=c;
- wr();
- c++;
- y=tab2[ril];
- x=c;
- wr();
- c++;
- P0=tab[xingqi];
- }
- if(p30==0)
- if(flag)
- {
- read(0x8b);
- xingqi=dd;
- xingqi++;
- if(xingqi>=8)
- xingqi=1;
- writewe(xingqi);
- while(p30==0);
- }
-
- if(p31==0)
- if(flag)
- {
- read(0x8d);
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3=fen3>>=4;
- nian=fen3*10+fen2;
- nian++;
- if(nian>=31)
- nian=8;
- writeys(tab1[nian]);
- while(p31==0);
- }
- if(p32==0)
- if(flag)
- {
- read(0x89);
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3=fen3>>=4;
- yue=fen3*10+fen2;
- yue++;
- if(yue>=13)
- yue=1;
- writemn(tab1[yue]);
- while(p32==0);
- }
- if(p33==0)
- if(flag)
- {
- read(0x87);
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3=fen3>>=4;
- ri=fen3*10+fen2;
- ri++;
- if(ri>=32)
- ri=1;
- writeday(tab1[ri]);
- while(p33==0);
- }
- if(p34==0)
- if(flag)
- {
- read(0x85);
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3=fen3>>=4;
- xiaoshi=fen3*10+fen2;
- xiaoshi++;
- if(xiaoshi>=24)
- xiaoshi=0;
- writehr(tab1[xiaoshi]);
- while(p34==0);
- }
- if(p35==0)
- if(flag)
- { read(0x83);
- fen1=dd;
- fen2=fen1&0x0f;
- fen3=fen1&0xf0;
- fen3=fen3>>=4;
- fen4=fen3*10+fen2;
- fen4++;
- if(fen4>=60)
- fen4=0;
- writemin(tab1[fen4]);
- while(p35==0);
- }
- if(p37==0)
- { flag=~flag;
- if (flag)
- writesec(0x80);
- else
- writesec(0x00);
- while(p37==0);
- }
- if(p36==0)
- { flagh=~flagh;
- while(p36==0);
- }
- }
- }
复制代码
所有资料51hei提供下载:
三机通信.zip
(447.36 KB, 下载次数: 33)
|