文档详情

单片机主从机通信.doc

发布:2017-04-17约6.06千字共10页下载文档
文本预览下载声明
#include reg51.h unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //用一维数组定义0-9、横杠 unsigned char a[8]; unsigned char second=0,minute=0,hour=0; unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //扫描 unsigned char k=0; unsigned int temp; // 记录1000毫秒为1秒的变量 unsigned char M,S_flag; //M是模式,更新时间的4种模式加上正常模式 S_flag闪烁标志 sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2; void delay(unsigned n) //0.2毫秒 { int x,y; for(x=0;xn;x++) for(y=0;y24;y++); } void Send_Time() //发送时间函数 { SBUF=second; while(TI==0); //等待发送完成 TI=0; // 发送中断标志位清零 delay(10); SBUF=minute; while(TI==0); TI=0; delay(10); SBUF=hour; while(TI==0); TI=0; delay(10); } void init() { M=0; S_flag=0; //闪烁标志位 PCON=0x00; //波特率不加倍 TMOD=0x21; //定时器1以方式1定时 TH0=0xFC; TL0=0x18; TH1=0xfD; TL1=0xfD;//串口波特率为9600 EA=1;//;总中断 SCON=0xa0; //串口工作方式2,多机通信位SM2=1 TR1=1; //开启定时器1 TR0=1; //开启定时器0 ET0=1; } void display_led() //时间显示位置 { char m; for(m=0;m8;m++) { P0=b[m]; } } void time0() interrupt 1// 定时器0中断函数 { TH0=0xFC; //定时1ms TL0=0x18; temp++; if(temp==1000) //配合定时器定时1s { temp=0; second++; } if(second==60) { second=0; if(minute59) minute++; else { minute=0; hour++; hour%=24; } } if(temp%250==0) //每250ms S_flag=!S_flag; //闪烁标志位取反 if(k==8) k=0; P2=a[k]; P0=b[k++]; delay(1); P0=0xff; } void display() //时钟闪烁函数 { switch(M) { case 0: //不闪烁 { a[0]=led[hour/10]; a[1]=led[hour%10]; a[2]=led[10]; a[3]=led[minute/10]; a[4]=led[minute%10]; a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second%10]; }break; case 1: // 闪烁时 位 { if(S_flag==1) { a[0]=led[hour/10]; a[1]=led[hour%10]; } else { a[0]=led[11]; a[1]=led[11]; } a[2]=led[10]; a[3]=led[minute/10];
显示全部
相似文档