课程设计报告蓝牙校时电子钟.docx

上传人:b****6 文档编号:9213728 上传时间:2023-02-03 格式:DOCX 页数:15 大小:619.70KB
下载 相关 举报
课程设计报告蓝牙校时电子钟.docx_第1页
第1页 / 共15页
课程设计报告蓝牙校时电子钟.docx_第2页
第2页 / 共15页
课程设计报告蓝牙校时电子钟.docx_第3页
第3页 / 共15页
课程设计报告蓝牙校时电子钟.docx_第4页
第4页 / 共15页
课程设计报告蓝牙校时电子钟.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

课程设计报告蓝牙校时电子钟.docx

《课程设计报告蓝牙校时电子钟.docx》由会员分享,可在线阅读,更多相关《课程设计报告蓝牙校时电子钟.docx(15页珍藏版)》请在冰豆网上搜索。

课程设计报告蓝牙校时电子钟.docx

课程设计报告蓝牙校时电子钟

课程设计报告:

可校时数字钟设计

设计目的:

设计制作具有下列功能的数字钟:

1.自动计时,lcd显示器显示时、分和秒;

2.具备手机校准功能;

3.具备手机设置定时闹钟功能。

设计原理:

stc89c51单片机自带计时器计时,使用T0计时器,P1.0~P1.4为按键检测端口,P1.6为闹钟输出,P2.5~P2.7为LCD1602使能端控制,P0口接LCDD段选,通过串口通信与蓝牙模块连接,手机app发送数据。

设计流程:

先实现初始化与键盘监控;再通过中断完成数据的接收;最后通过按键检测实现数据更替。

流程图如图所示。

使用器材:

单片机STC52RC

LCD1602

蓝牙模块HC06

开关

LED灯泡

电阻

导线

11.0592晶振

电容

开发板USB接口

排阻

电位器

电路仿真图:

实验结果:

该电子钟具有5个按键,三个控制时分秒的增加,一个控制蓝牙校时,一个控制闹钟设计。

LCD第一排显示当前时间,第二排显示闹钟,蓝牙校时及闹钟设置由手机app完成数据发送。

 

数字钟源程序:

//*头文件*/

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineyh0x80//LCD第一行的初始位置

#defineer0x80+0x40//LCD第二行初始位置

sbita1=P1^0;//“秒加”键K1

sbita2=P1^1;//“分钟加”键K2

sbita3=P1^2;//“小时加”键K3

sbitb1=P1^3;//“校时”键K1

sbitb2=P1^4;

sbitc=P1^5;

sbitrs=P2^7;

sbitrw=P2^6;

sbiten=P2^5;

uchara;

uchari=0;

ucharseconde=0;

ucharminite=0;

ucharhour=12;

ucharmstcnt=0;

ucharcodetab1[]={"Time:

:

:

"};//显示的固定字符

ucharcodetab2[]={"Clock:

:

:

"};//显示的固定字符

uchartate[6];

ucharldat[6]="130000";

uchartime[6]="120000";

voiddelay_1ms(uintxms)//延时函数,有参函数

{

uintx,y;

for(x=xms;x>0;x--)

for(y=124;y>0;y--);

}

//****液晶写入指令函数****//

voidwrite_1602com(ucharcom)

{

rs=0;//数据/指令选择置为指令

rw=0;

delay_1ms

(1);

P0=com;//送入数据

delay_1ms

(1);

en=1;//拉高使能端,为制造有效的下降沿做准备

delay_1ms

(1);

en=0;//en由高变低,产生下降沿,液晶执行命令

}

//***液晶写入数据函数****//

voidwrite_1602dat(uchardat)

{

rs=1;//数据/指令选择置为数据

rw=0;

delay_1ms

(1);

P0=dat;//送入数据

delay_1ms

(1);

en=1;//en置高电平,为制造下降沿做准备

delay_1ms

(1);

en=0;//en由高变低,产生下降沿,液晶执行命令

}

//***液晶初始化函数****//

voidlcd_init()

{

write_1602com(0x38);//设置液晶工作模式,意思:

16*2行显示,5*7点阵,8位数据

delay_1ms(5);

write_1602com(0x0c);//开显示不显示光标

delay_1ms(5);

write_1602com(0x06);//整屏不移动,光标自动右移

delay_1ms(5);

write_1602com(0x01);//清显示

delay_1ms(5);

write_1602com(er+0);

for(a=0;a<14;a++)

{

write_1602dat(tab2[a]);

}

write_1602com(yh+0);

for(a=0;a<13;a++)

{

write_1602dat(tab1[a]);

}

}

voidpro_value()

{

tate[0]=hour/10;//将湿度的整数部分的十位和个位分开

tate[1]=hour%10;

tate[2]=minite/10;

tate[3]=minite%10;

tate[4]=seconde/10;

tate[5]=seconde%10;

write_1602com(yh+6);

for(a=0;a<2;a++)

{

write_1602dat(tate[a]+0x30);

}

write_1602com(yh+9);

for(a=2;a<4;a++)

{

write_1602dat(tate[a]+0x30);

}

write_1602com(yh+12);

for(a=4;a<6;a++)

{

write_1602dat(tate[a]+0x30);

}

}

voidpros_data()

{

write_1602com(er+7);

for(a=0;a<2;a++)

{

write_1602dat(time[a]);

}

write_1602com(er+10);

for(a=2;a<4;a++)

{

write_1602dat(time[a]);

}

write_1602com(er+13);

for(a=4;a<6;a++)

{

write_1602dat(time[a]);

}

}

voiddisplay1()//设置显示

{

pros_data();

}

voidtime_pro(void)

{

if(seconde==60)//秒钟设为60进制

{seconde=0;

minite++;

if(minite==60)//分钟设为60进制

{minite=0;

hour++;

if(hour==24)//时钟设为24进制

{hour=0;}

}

}

}

voidkeyscan(void)

{

if(a1==0)//按键1秒的调整

{

delay_1ms(30);

if(a1==0)

{

seconde++;

if(seconde==60)

{seconde=0;}

}

}

if(a2==0)//按键2分的调整

{

delay_1ms(30);

if(a2==0)

{

minite++;

if(minite==60)

{minite=0;}

}

}

if(a3==0)//按键3小时的调整

{

delay_1ms(30);

if(a3==0)

{

hour++;

if(hour==24)

{hour=0;}

}

}

}

voidtimer0(void)interrupt1using0//定时器0方式1,50ms中断一次

{

TH0=0x3c;

TL0=0xb0;

TMOD=0x11;

mstcnt++;

if(mstcnt==20)

{

seconde++;

mstcnt=0;//注意点。

对计数单元的清零十分的重要,本次调试中就是

}//因为忽略了这一点,给我早成了很大的被动。

}

voidlanyaInit(void)

{

TMOD=0x21;

SCON=0x50;

EA=1;

ES=1;

TR1=1;

TH1=0xfd;

TL1=0xfd;

}

voidreceive()interrupt4

{

if(RI)

{

ldat[i]=SBUF;

RI=0;

}

SBUF=ldat[i];

while(!

TI);

TI=0;

i++;

if(i>=6){

i=0;

}

}

voidcheck()

{

if(b1==0)

{

delay_1ms(30);

if(b1==0)

{

hour=(ldat[0]-48)*10+(ldat[1]-48);

minite=(ldat[2]-48)*10+(ldat[3]-48);

seconde=(ldat[4]-48)*10+(ldat[5]-48);

}

}

if(b2==0)

{

delay_1ms(30);

if(b2==0)

{

for(a=0;a<6;a++)

{

time[a]=ldat[a];

}

}

}

}

voidclock()

{

if(minite==0)

{

if(seconde==0)

{

c=1;

delay_1ms(3000);

c=0;

}

}

if(hour==((time[0]-48)*10+(time[1]-48)))

{

if(minite==((time[2]-48)*10+(time[3]-48)))

{

if(seconde==((time[4]-48)*10+(time[5]-48)))

{

c=1;

delay_1ms(3000);

c=0;

}

}

}

}

/**********主函数******************/

voidmain()

{

lcd_init();

display1();

P1=0xff;

TMOD=0x21;//time0为定时器,方式1

TH0=0x3c;//预置计数初值

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

c=0;

while

(1)

{

keyscan();//按键扫描

time_pro();

pro_value();

pros_data();

lanyaInit();

check();

clock();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1