标题:
51单片机蓝牙调节的时钟源程序设计
[打印本页]
作者:
xucan110
时间:
2018-1-31 15:29
标题:
51单片机蓝牙调节的时钟源程序设计
51单片机的时钟设计,可以调节年月日 星期 和 时间。
内有源程序,在单片机板子上使用无误。还加上了蓝牙调节,可以通过蓝牙直接调节时间。
单片机源程序如下:
#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
unsigned char i;
unsigned char buff;
unsigned char receivedata;
void keep();
void lanya();
void Int0Configuration();
void LcdDisplay();
unsigned char SetState,SetPlace;
void Delay10ms(void); //误差 0us
void main()
{
Int0Configuration();
LcdInit();
Ds1302Init();
while(1)
{
if(SetState==0)
{
Ds1302ReadTime();
}
else
{
lanya();
keep();
}
LcdDisplay();
}
}
void LcdDisplay()//1602显示
{
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //时
LcdWriteData('0'+(TIME[2]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //分
LcdWriteData('0'+(TIME[1]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //秒
LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80);
LcdWriteData('2');
LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年
LcdWriteData('0'+(TIME[6]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //日
LcdWriteData('0'+(TIME[3]&0x0f));
LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //星期
}
void Int0Configuration()//定时器
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
//串口中断
void Int0() interrupt 4
{
TH1=0xFD;
TL1=TH1;
Delay10ms();
if(receivedata==0x00)//进入时钟模式
{
SetState=~SetState;
SetPlace=0;
Ds1302Init();
}
if(RI)//在返回发送数字到手机上
{
RI = 0;
}
receivedata=SBUF;
SBUF=receivedata;
while(!TI);
TI = 0;
Delay10ms();
if(K3==0)
{
SetState=~SetState;
SetPlace=0;
Ds1302Init();
}
}
/********************************************************************************
蓝牙控制时间
*****************************************************************************/
void lanya()
{
if(receivedata==0x01)//选择位置,可调节的数字位 从时间秒开始
{
SetPlace++;
if(SetPlace>=7)
SetPlace=0;
}
buff=receivedata;//不加会使得数字一直加
if(buff==0x02)//加一
{
receivedata++;
TIME[SetPlace]=TIME[SetPlace]+1;
if((TIME[SetPlace]&0x0f)>9) //换成BCD码。
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小时只能到23
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x07)&&(SetPlace==5)) //周只能到7
{
TIME[SetPlace]=1;
}
}
}
/****************************************************************************
按键控制时间
***************************************************************************/
void keep()
{
if(K1==0) //检测按键K1是否按下
{
Delay10ms(); //消除抖动
if(K1==0)
{
SetPlace++;
if(SetPlace>=7)
SetPlace=0;
}
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
if(K2==0) //检测按键K2是否按下
{
Delay10ms(); //消除抖动
if(K2==0)
{
TIME[SetPlace]++;
if((TIME[SetPlace]&0x0f)>9) //换成BCD码。
{
TIME[SetPlace]=TIME[SetPlace]+6;
}
if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小时只能到23
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31
{
TIME[SetPlace]=0;
}
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12
{
TIME[SetPlace]=0;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机实验2.zip
(68.73 KB, 下载次数: 33)
2018-1-31 15:26 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
songxia8013
时间:
2018-3-1 10:10
内容太少,只有个程序,没有电路图,没有蓝牙部分介绍!做事情不够认真!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1