资讯详情

51单片机实现BPC电波钟解码C程序

//使用C12C5202单片机,晶振使用12M的,速度是12倍速的,电波钟模块引脚是接在单片机P3^2口的 //是使用动态扫描的方式,四位数码管显示 #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar xiaoshi,fenzon; uchar tt=0; #define duan P1 uchar code tab[]={ 0x12,/*0*/ 0xD7,/*1*/ 0x4A,/*2*/ 0x43,/*3*/ 0x87,/*4*/ 0x23,/*5*/ 0x22,/*6*/ 0x57,/*7*/ 0x02,/*8*/ 0x03,/*9*/ }; sbit fen=P3^3; sbit sf =P3^4; sbit si =P3^5; sbit ss =P3^7; sbit led=P3^0; ///////////////////////////////////////////////////////////////////////////// sbit MKin =P3^2; //电波钟模块信号引脚 uint shu=0; uchar a[7]; void delay(uint k) { while(k--); } void duo_MoKuai() { uchar i=0; for(;i<6;i++) { a[i]=0; } shu=0; while(shu<116) //找启始码1.8秒低电平 { if(!MKin) { delay(12000); //延时16mS shu++; } else shu=0; } delay(2000); tt=0; while(!MKin)delay(2000); //等待高电平结束 delay(12000); ///////////////////////////////////////////////////////////////////////////// while(MKin)delay(2000); //这是第一个脉冲;//根据协议该位只能是0、1、2,不能是3否则超出范围,表示接收错误,从新同步 delay(12000); while(!MKin)delay(2000); delay(12000); while(MKin)delay(2000); //这是第二个脉冲;//根据协议,该位必须为0,否则就是错误,认为丢失同步,故也不需要进行效验积累计算 delay(12000); while(!MKin)delay(2000); delay(2000); while(MKin) //第三位//这是小时的十位 { delay(12000); a[0]++; } delay(12000); while(!MKin)delay(2000); delay(2000); while(MKin) //第四位 //这是小时的个位 { delay(12000); a[1]++; } delay(12000); while(!MKin)delay(2000); delay(2000); while(MKin) //第五位//这是分钟的高位 { delay(12000); a[2]++; } delay(12000); while(!MKin)delay(2000); delay(2000); while(MKin) //第六位//这是分钟的中位 { delay(12000); a[3]++; } delay(12000); while(!MKin)delay(2000); delay(2000); while(MKin) //第七位//这是分钟的低位 { delay(12000); a[4]++; } delay(12000); } void Zuan_Huan() { uchar k; duo_MoKuai(); //读电波钟模块 for(k=0;k<5;k++) { if(27>(a[k])>23) a[k]=0x03; else if(17<(a[k])<21) a[k]=0x02; else if(11<(a[k])<15) a[k]=0x01; else if(8>(a[k])>5) a[k]=0; }

xiaoshi=((a[0])*4)|(a[1]); fenzon=(((a[2])*16)|((a[3])*4)|(a[4])); } ///////////////////////////////////////////////////////////////// void desplay() { duan=tab[xiaoshi/10]; ss=0; delay(2000); ss=1; duan=tab[xiaoshi%10]; si=0; delay(2000); si=1; duan=tab[fenzon/10]; sf=0; delay(2000); sf=1; duan=tab[fenzon%10]; fen=0; delay(2000); fen=1; }

void main() { uint aa; while(1) { Zuan_Huan(); for(aa=0;aa<1000;aa++) desplay(); } }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台