单片机数字时钟课程设计报告.docx

上传人:b****5 文档编号:12052996 上传时间:2023-04-16 格式:DOCX 页数:39 大小:106.09KB
下载 相关 举报
单片机数字时钟课程设计报告.docx_第1页
第1页 / 共39页
单片机数字时钟课程设计报告.docx_第2页
第2页 / 共39页
单片机数字时钟课程设计报告.docx_第3页
第3页 / 共39页
单片机数字时钟课程设计报告.docx_第4页
第4页 / 共39页
单片机数字时钟课程设计报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

单片机数字时钟课程设计报告.docx

《单片机数字时钟课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟课程设计报告.docx(39页珍藏版)》请在冰豆网上搜索。

单片机数字时钟课程设计报告.docx

单片机数字时钟课程设计报告

XXXX大学课程设计报告

 

课程设计名称:

多功能数字时钟

学院:

信息科学与工程学院

姓名:

班级:

09通1班

学号:

指导老师:

时间:

2012.2.20—3.11

 

“多功能数字时钟”设计要求

一、基于DS1302

二、能调时间(日期、星期、时、分)

三、有三个以上闹铃点,并可以分别设置是否起作用;

四、有一个定时开关,在一个可以设定的时间段内能保持驱动继电器控制输出;

五、所有人工设置的数据应能断电保存,人机界面友好、按键可靠;

六、能通过串行口把当前的时间信息输出

七、可以结合天色的亮暗,决定定时继电器是否输出;

八、显示当前时间的同时显示当前温度;

九、可以使用红外遥控器设置各种参数;

十、可以使用串行口设置各种参数;

备注:

要求实现前面七项,后三点为扩展功能。

 

芯片STC89C51RC与STC12C5A32S2

芯片型号

RAM

(字节)

ROM

(字节)

工作频率

(Hz)

两者比较

STC89C52RC

512

8K

0—40M

最高可达48M

相同点:

都是低电平驱动;

不同点:

12C5A功能更强大,对驱动的要求更低。

(详细参考资料)

STC12C5A32S2

1280

32K

0—35M(相当于普通8051的0—420M)

各模块使用注意事项简介

基础操作模块

要求

花样灯

能够结合按键灵活控制灯的亮灭形式

液晶显示

包含头文件<16c02.c>;P2.6、P2.7与液晶模块连接;使用时须初始化、清屏;注意显示时的覆盖技巧。

定义与1602LCD的数据口的单片机口线P0口。

数码管

共阳接法;低电平点亮;掌握循环显示各种数值,通过多次扫描稳定显示。

串行通信

初始化,设置波特率。

注意换行puts函数的使用技巧。

多位数发送。

24C02

掌握read与write函数的使用格式。

根据需要进行相应异常处理。

包含头文件<24c02.c>.定义24C02的数据线与单片机的连接P2.2与

P2.3。

ADC采样

P1口8路采样。

第0路(P1.0)抽头可变电阻,第1路(P1.1)接光敏电阻。

PWM

P1.3、P1.4输出脉冲

DS1302

初始化合理的值。

主要芯片简介:

24C02与DS1302

24C02

DS1302

串行E2PROM是基于I2C-BUS的存储器件;

数据掉电不丢失;

擦写寿命:

100万次

数据保持时间:

100年

容量:

2K,256字节

高性能、低功耗、带RAM的实时时钟电路;

可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能;

DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。

设计思想:

模块化设计

设计思路:

NO.1显示模块

年月日星期的显示

时分秒的显示

闹铃点的显示

定时段的显示

 

NO.2调节模块

年月日星期的调整

时分的调整

闹铃点的调整

定时段的调整

 

NO.3定时模块

在时间段内启动继电器,进行ADC采样(根据天色亮暗决定继电器是否工作)

 

NO.4串行输出块

将时间通过串口发送,在串口助手显示当前的时间。

NO.5按键扫描模块(最重要的模块)

各种按键复用,状态变量的设置。

临界条件的控制。

24C02的及时保存数据。

 

NO.6主函数

各种初始化;

各种异常处理;

主要程序。

 

多功能数字时钟使用说明书

k5键:

功能选择键

——不按k5键时(调节时钟)

K1:

时加1;

K2:

分加1;

K3时减1;

K4:

分减1;

——按k5(调节闹钟1,2,3)

K1:

时加1;

K2:

分加1;

K3:

分减1;

K4:

控制闹钟的开关

——(调节定时设置)

K1,k2调定时1的时分(只可加)

K3,k4调定时2的时分

——调节是否启动定时

K1控制开关

附加说明:

关于定时

在定时时间段内,启动继电器,进行ADC采样,当天色足够亮。

 

部分功能展示:

串口发送时间

 

程序:

//多功能数字时钟

#include

#include<1602lcd.c>

#include<24C02.c>

#include

#include

#include

sbitbeep=P2^0;

sbitjdq=P2^1;//继电器

sbitk1=P1^3;

sbitk2=P1^4;

sbitk3=P1^5;

sbitk4=P1^6;

sbitk5=P1^7;

unsignedcharzt=0,zt1=1,zt2=1,zt3=1,channel,kg=1;

unsignedcharhour_nao1=10,hour_nao2=12,hour_nao3=12;

unsignedcharminute_nao1=58,minute_nao2=12,minute_nao3=12;

unsignedcharhour_ding1=11,hour_ding2=11,minute_ding1=11,minute_ding2=30;

unsignedcharh1,h2,m1,m2,s1,s2;

voiddelay_ms(unsignedintxms);

voiddi_di();

voiddi();

voiddisp();

voidnao_do();

voiddinshi_do();

voidchuanxing_out();

voidkey_do();

voidmain()

{

hour_nao1=read_add_24c02(4);minute_nao1=read_add_24c02(5);//24C02读取

hour_nao2=read_add_24c02(6);minute_nao2=read_add_24c02(7);

hour_nao3=read_add_24c02(8);minute_nao3=read_add_24c02(9);

hour_ding1=read_add_24c02(13);minute_ding1=read_add_24c02(14);

hour_ding2=read_add_24c02(15);minute_ding2=read_add_24c02(16);

if(hour_nao1>23)hour_nao1=0;if(hour_nao2>23)hour_nao2=0;if(hour_nao3>23)hour_nao3=0;//异常处理24C02

if(minute_nao1>59)minute_nao1=0;if(minute_nao2>59)minute_nao2=0;if(minute_nao3>59)minute_nao3=0;

if(hour_ding1>23)hour_ding1=0;if(hour_ding2>23)hour_ding2=0;

if(minute_ding1>59)minute_ding1=0;if(minute_ding2>59)minute_ding2=0;

//--------------------------------------------------

lcd_int();//16c02初始化

lcd_write_com(0x01);

//-----------------------------------------------------

InitADC();//初始化ADC采样

//-----------------------------------------------------

get_ds1302();//获取时间

if(year<11||year>15)//异常处理DS1302

{Init_DS1302(12,3,6,9,57,0,2);

}

//----------------------------------------------------

EX0=1;//打开外部中断0

IT0=1;//外部中断0,设置为下降沿触发

//-----------------------------------------------------

//串口输出初始化

TMOD=0x20;//设置定时器1工作方式为:

方式2、8位初始值自动重装

TH1=0xfd;TL1=0xfd;//设置初始值,以设波特率为9600

TR1=1;//启动定时器1

SM0=0;SM1=1;//SCON寄存器设置串行口工作方式1:

一帧10位、1起始位8数据位1停止位

EA=1;//允许总中断

ES=1;//串行中断允许

REN=1;//允许串口接收

//-----------------------------------------------------------------

while

(1)

{

get_ds1302();//获取时间

disp();//根据zt的值显示相应的信息

nao_do();//闹铃的判断处理

if(kg==0)

dinshi_do();//定时判断处理(包含天色判断),嘎嘎,,把采样放别处进行吧。

chuanxing_out();//串行输出信息

//key_do();按键判断处理---用外部中断完成

//保存数据---在数据改变后马上保存

}

}

voiddisp()

{

if(zt==0)//正常走时显示

{lcd_locate(1,2);//1602LCD显示定位在第1行第4个字符处

lcd_2_char(20);lcd_2_char(year);//显示年

lcd_write_data('.');

lcd_2_char(month);//显示月

lcd_write_data('.');

lcd_2_char(day);//显示日

lcd_locate(1,15);

lcd_2_char(week);

lcd_locate(2,1);

lcd_string("");//1602LCD显示定位在第2行第5个字符处

lcd_2_char(hour);//显示小时

lcd_write_data(':

');

lcd_2_char(minute);//显示分

lcd_write_data(':

');

lcd_2_char(second);//显示秒

lcd_string("");

}

//-----------闹铃点1显示-------------------------------

if(zt==1)

{

lcd_locate(1,2);//1602LCD显示定位在第1行第2个字符处

lcd_2_char(hour);//显示小时

lcd_write_data(':

');

lcd_2_char(minute);//显示分

lcd_write_data(':

');

lcd_2_char(second);//显示秒

lcd_string("");

lcd_locate(2,1);

lcd_string("nao1-");

if(zt1==0)

{

lcd_2_char(hour_nao1);//显示小时

lcd_write_data(':

');

lcd_2_char(minute_nao1);//显示分

lcd_string("ON");

}

if(zt1==1)

{

lcd_2_char(hour_nao1);//显示小时

lcd_write_data(':

');

lcd_2_char(minute_nao1);//显示分

lcd_string("OFF");

}

}

//------------闹铃点2显示---------------------------------

if(zt==2)

{lcd_locate(1,2);

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

if(zt2==0)

{lcd_locate(2,1);

lcd_string("nao2-");

lcd_2_char(hour_nao2);

lcd_write_data(':

');

lcd_2_char(minute_nao2);

lcd_string("ON");

}

if(zt2==1)

{lcd_locate(2,1);

lcd_string("nao2-");

lcd_2_char(hour_nao2);

lcd_write_data(':

');

lcd_2_char(minute_nao2);

lcd_string("OFF");

}

}

//--------------闹铃点3显示---------------------------------------

if(zt==3)

{lcd_locate(1,2);

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

if(zt3==0)

{lcd_locate(2,1);

lcd_string("nao3-");

lcd_2_char(hour_nao3);

lcd_write_data(':

');

lcd_2_char(minute_nao3);

lcd_string("ON");

}

if(zt3==1)

{lcd_locate(2,1);

lcd_string("nao3-");

lcd_2_char(hour_nao3);

lcd_write_data(':

');

lcd_2_char(minute_nao3);

lcd_string("OFF");

}

 

}

//------------定时显示------------------------------------------

if(zt==4)

{lcd_locate(1,2);

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

lcd_locate(2,1);

lcd_string("ds-");

lcd_2_char(hour_ding1);

lcd_write_data(':

');

lcd_2_char(minute_ding1);

lcd_write_data('-');

lcd_2_char(hour_ding2);

lcd_write_data(':

');

lcd_2_char(minute_ding2);

}

if(zt==5)

{lcd_locate(1,2);

lcd_2_char(20);lcd_2_char(year);

lcd_write_data('.');

lcd_2_char(month);

lcd_write_data('.');

lcd_2_char(day);

lcd_string("");

lcd_locate(1,15);

lcd_2_char(week);

lcd_locate(2,1);

lcd_string("GB");

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

}

if(zt==6)

{

if(kg==0)

{lcd_locate(1,2);

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

lcd_locate(2,1);

lcd_string("dingshiON");

lcd_string("");

}

if(kg==1)

{lcd_locate(1,2);

lcd_2_char(hour);

lcd_write_data(':

');

lcd_2_char(minute);

lcd_write_data(':

');

lcd_2_char(second);

lcd_string("");

lcd_locate(2,1);

lcd_string("dingshiOFF");

lcd_string("");

}

}

}

//==============================================================

voidnao_do()

{

if(zt1==0)

{if(hour==hour_nao1&&minute==minute_nao1)//闹铃1工作

di_di();

}

if(zt2==0)

{if(hour==hour_nao2&&minute==minute_nao2)//闹铃2工作

di_di();

}

if(zt3==0)

{if(hour==hour_nao3&&minute==minute_nao3)//闹铃3工作

di_di();

}

}

//=========================================================

voiddinshi_do()

{/*channel=1;

GetADCResult(channel);//进行某个通道的ADC采样

if((ADC_RES*4+ADC_LOW2)>150)

jdq=0;

else

jdq=1;*/

doubles3,s4;

s3=hour_ding1*60+minute_ding1;

s4=hour_ding2*60+minute_ding2;

if(s3

{if(((hour*60+minute)>s3)&&((hour*60+minute)

{jdq=0;

channel=1;

GetADCResult(channel);//进行某个通道的ADC采样

if((ADC_RES*4+ADC_LOW2)<150)//天色亮则继电器不工作

jdq=1;

}

elsejdq=1;

}

if(s3>s4)

{if(((hour*60+minute)>s3)||((hour*60+minute)

{jdq=0;

channel=1;

GetADCResult(channel);//进行某个通道的ADC采样

if((ADC_RES*4+ADC_LOW2)<150)

jdq=1;

}

elsejdq=1;

}

}

//=============================================================

voidchuanxing_out()

{h1=hour/10+0x30;

h2=hour%10+0x30;

m1=minute/10+0x30;

m2=minute%10+0x30;

s1=second/10+0x30;

s2=second%10+0x30;

ES=0;//关串口中断

TI=1;//串口发送完成标志

TI=0;//允许发送

SBUF=h1;

while(!

TI);

TI=0;

SBUF=h2;

while(!

TI);

TI=0;

SBUF=':

';

while(!

TI);

TI=0;

SBUF=m1;

while(!

TI);

TI=0;

SBUF=m2;

while(!

TI);

TI=0;

SBUF=':

';

while(!

TI);

TI=0;

SBUF=s1;

while(!

TI);

TI=0;

SBUF=s2;

while(!

TI);

//TI=0;

puts("");

while(!

TI);

TI=0;

delay_ms(500);//延时

}

//===============================================================================

//===========键盘扫描=====================================================

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

当前位置:首页 > 工程科技 > 能源化工

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

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