51单片机电波钟源程序

来源:本站
导读:目前正在解读《51单片机电波钟源程序》的相关信息,《51单片机电波钟源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机电波钟源程序》的详细说明。
简介:本文为51单片机电波钟源程序,下面一起来学习一下:

//使用STC12C5202单片机,晶振使用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();

}

}

提醒:《51单片机电波钟源程序》最后刷新时间 2024-03-14 00:55:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机电波钟源程序》该内容的真实性请自行鉴别。