定时时钟设计C语言.docx
- 文档编号:12283110
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:46
- 大小:2.29MB
定时时钟设计C语言.docx
《定时时钟设计C语言.docx》由会员分享,可在线阅读,更多相关《定时时钟设计C语言.docx(46页珍藏版)》请在冰点文库上搜索。
定时时钟设计C语言
电子设计制作任务总结分析报告
小组成员:
林苗苗郑梦静史旭浩
一、设计任务
设计任务一LCD电子定时闹钟设计:
功能说明:
定时闹钟的时间显示和设置
1.LCD显示屏的显示格式为“SETTIME时时:
分分:
秒秒”,并且能够修改时钟时间的时、分、秒。
2.操作键K1:
当前时间状态的设置按钮;
3.操作键K2:
闹钟设定时间的显示按钮;
4.操作键K3:
设置闹钟时间按钮;
5.操作键K4:
闹铃ON/OFF状态设置,设为ON时连续三次发出哗的一声,设为OFF时发出哗的一声;
6.当设置现在的时间或闹铃时间时,
操作键K1:
调整时;
操作键K2:
调整分;
操作键K3:
设置完成。
7.定时时间到时发出一阵声响,按下K4键可以停止声响。
设计任务二带有LCD显示的音乐倒数定时器设计:
功能说明:
倒数定时器的时间设置、显示及音乐的播放
1.使用文字型LCD(16×2)来显示目前倒数的时间,显示格式为“TIME时时:
分分:
秒秒”
2.具有4个按键操作来设置现在想要倒数的时间:
操作键K1:
设置定时时间的开启和关闭;
操作键K1+操作键K2:
调整时;
操作键K1+操作键K3:
调整分;
操作键K1+操作键K4:
时间调整完成。
3.一旦按键后则开始倒数计时,当计时为0时则发出一阵生日快乐歌的音乐声响;
4.重置后内定倒数计时时间为5min,显示“00:
05:
00”。
二、关于两个设计任务的硬件部分说明
51单片机:
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
它广泛应用于工业测控系统之中。
8位CPU·4kbytes程序存储器(ROM)(52为8K),256bytes的数据存储器(RAM)(52有384bytes的RAM),32条I/O口线·111条指令,大部分为单字节指令,21个专用寄存器,2个可编程定时/计数器,5个中断源,2个优先级(52有6个),片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
本次实验采用的是。
图189C51单片机各引脚情况图289C51单片机内部结构
LCD显示:
LCD1602是通过16字x2行的5x7点阵图形来显示字符的典型液晶显示器,一般采用的标准的16引脚接口,各引脚情况如表1所示。
其功能是负责将设置的时间数据显示出来,方便实验者观察。
而且,采用的LCD1602是点阵字符型LCD液晶显示,可以显示数字与阿拉伯字母等字符,随着半导体技术的发展,LCD的液晶显示越来越广泛的应用于各种显示场合。
并且液晶显示可以工作在低电压、低功耗下,显示界面友好、内容丰富。
数码管显示驱动简单,但是不能显示高精度数位。
LCD1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
表1LCD1602各引脚情况图3LCD1602各引脚的连线情况
2.3蜂鸣器:
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
蜂鸣器在电路中用字母“H”或“HA”表示。
本次设计任务采用压电式蜂鸣器。
图4压电式蜂鸣器图5蜂鸣器驱动原理图
2.4其他小部件元件
三极管、电容、继电器、电阻、LED灯、按钮等等。
2.5电路设计完成图
设计方案一:
设计方案二:
经选择分析,设计方案二更优。
2.6电路连接完成图
三、关于两个设计任务的软件部分说明
任务一——LCD电子定时闹钟设计任务
总体框架流程图
按键检测流程图
蜂鸣器的流程图
子程序的模块划分(完整程序见附录)
写指令函数子程序
写数据函数子程序
写时间函数子程序
显示时间初始化
延时函数子程序
蜂鸣器子程序
设置当前时间子程序
设置闹钟时间子程序
显示闹钟函数子程序
按键扫描函数子程序
LCD1602初始化子程序
中断服务子程序
3.2任务二——带有LCD显示的音乐倒数定时器设计
总体框架流程图
蜂鸣器流程图
按键扫描流程图
子程序的模块划分(完整程序见附录)
写指令函数子程序
写数据函数子程序
写时间函数子程序
显示时间初始化
延时函数子程序
蜂鸣器子程序
LCD1602初始化子程序
设置倒计时时间子程序
按键扫描函数子程序
显示时间初始化
中断服务子程序(与任务一相比增加选择程序,加入生日快乐歌)
四、关于两个设计任务的测试部分说明
任务一——LCD电子定时闹钟设计任务
设置当前时间
显示当前时间
设置闹钟时间
显示闹钟时间
任务二——带有LCD显示的音乐倒数定时器设计
电源开启后,倒数定时器的初始化界面
设置倒数定时器时间
倒数定时结束时的界面
五、附录:
关于两个设计任务的程序代码
任务一——LCD电子定时闹钟设计任务
#include<>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]="NOWTIME:
";
ucharcodetable1[]="SETNOWTIME:
";
ucharcodetable2[]="SETALARMTIME:
";
ucharcodealarm[]="ALARMTIME:
";
ucharcodealarmoff[]="ALARMTIME:
OFF";
ucharcodealarmon[]="ALARMTIME:
ON";
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
sbitK1=P2^3;sbitK2=P2^4;//
sbitK3=P2^5;//
sbitK4=P2^6;//
sbitbeep=P3^4;
ucharflag,num,count,k1num,k2num,k3num,k4num;
charmiao,shi,fen,ashi,afen;
//延时函数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//蜂鸣器子程序
voiddi()
{
beep=0;
delay(100);
beep=1;
}
//写命令函数
voidwrite_com(ucharcom)
{
lcdrs=0;
lcdrw=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//写数据函数
voidwrite_date(uchardate)
{
lcdrs=1;
lcdrw=0;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//写时间函数
voidwrite_sfm(ucharadd,uchardate)
{
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
//显示时间初始化
voidTimeInit()
{
write_com(0x01);
write_com(0x80);
for(num=0;num<9;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40+6);
write_date(':
');
delay(5);
write_com(0x80+0x40+9);
write_date(':
');
delay(5);
write_sfm(4,shi);
write_com(0x80+0x40+4);
write_sfm(7,fen);
write_com(0x80+0x40+7);
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
//设置当前时间
voidSetNowTime()
{
if(K1==0)
{
delay(5);
if(K1==0)
{
while(!
K1);
di();
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!
K2);
di();
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!
K3);
di();
k1num=0;
TR0=1;
TimeInit();
}
}
}
//设置闹钟时间
voidSetAlarmTime()
{
flag=0;
if(K1==0)
{
delay(5);
if(K1==0)
{
while(!
K1);
di();
ashi++;
if(ashi==24)
ashi=0;
write_sfm(4,ashi);
write_com(0x80+0x40+4);
}
}
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!
K2);
di();
afen++;
if(afen==60)
afen=0;
write_sfm(7,afen);
write_com(0x80+0x40+7);
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!
K3);
di();
k3num=0;
EA=1;
flag=1;
TimeInit();
}
}
}
//显示闹钟函数
voidDisplayAlarmTime()
{
write_com(0x01);
write_com(0x80);
for(num=0;num<11;num++)
{
write_date(alarm[num]);
delay(5);
}
write_com(0x80+0x40+6);
write_date(':
');
delay(5);
write_sfm(4,ashi);
write_com(0x80+0x40+4);
write_sfm(7,afen);
write_com(0x80+0x40+7);
}
//键盘扫描函数
voidkeyscan()
{
if(K1==0)
{
delay(5);
if(K1==0)
{
TR0=0;
while(!
K1);
di();
k1num++;
}
}
if(k1num!
=0)
{
write_com(0x80);
for(num=0;num<13;num++)
{
write_date(table1[num]);
delay(5);
}
SetNowTime();
}
else
{
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!
K2);
di();
k2num++;
}
}
if(k2num==1)
{
EA=0;
DisplayAlarmTime();
k2num=2;
}
if(k2num==3)
{
k2num=0;
EA=1;
TimeInit();
}
else
{
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!
K3);
di();
k3num++;
write_com(0x01);
}
}
if(k3num==1)
{
EA=0;
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table2[num]);
delay(5);
}
write_com(0x80+0x40+6);
write_date(':
');
delay(5);
write_sfm(4,ashi);
write_com(0x80+0x40+4);
write_sfm(7,afen);
write_com(0x80+0x40+7);
SetAlarmTime();
}
else
{
if(K4==0)
{
delay(5);
if(K4==0)
{
while(!
K4);
di();
k4num++;
}
}
if(k4num==1)
{
di();
k4num=2;
flag=0;
}
if(k4num==3)
{
k4num=0;
di();
delay(500);
di();
delay(500);
di();
flag=1;
}
}
}
}
if(flag==1&&shi==ashi&&fen==afen)
{
beep=~beep;
delay(500);
}
if(K4==0&&flag==1)
{
delay(5);
if(K4==0&&flag==1)
{
while(!
K4);
di();
flag=0;
k4num=0;
}
}
}
//lcd1602初始化
voidinit()
{
lcden=0;
shi=0;
fen=0;
miao=0;
ashi=0;
afen=0;
count=0;
k1num=0;
write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后地址指针加1
write_com(0x01);//显示清0,数据指针清0
TimeInit();
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
//主函数
voidmain()
{
init();
write_com(0x80);
while
(1)
{
keyscan();
}
}
//中断服务子程序
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);
}
}
任务二——带有LCD显示的音乐倒数定时器设计
#include<>
#defineuintunsignedint
#defineucharunsignedchar
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlcden=P2^2;
sbitK1=P2^3;
sbitK2=P2^4;
sbitK3=P2^5;
sbitK4=P2^6;
sbitbeep=P3^4;
ucharnum,count;
charshi,miao,fen;
uchari,j,time1,time2;
ucharcodetable[]="SETTIME";
uintcodearray1[]={
400,400,650,650,650,1200,
400,400,650,650,650,1200,
400,400,650,650,650,650,1200,
400,400,650,650,650,1200
};
ucharcodearray[]={
0xfd,0x79,0xfd,0x79,0xfd,0xc7,0xfd,0x79,0xfe,0x21,0xfe,0x05,
0xfd,0x79,0xfd,0x79,0xfd,0xc7,0xfd,0x79,0xfe,0x51,0xfe,0x21,
0xfd,0x79,0xfd,0x79,0xfe,0xc0,0xfe,0x84,0xfe,0x21,0xfe,0x05,0xfd,0xc7,
0xfe,0x99,0xfe,0x99,0xfe,0x90,0xfe,0x21,0xfe,0x51,0xfe,0x21
};
//延时函数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//写命令函数
voidwrite_com(ucharcom)
{
lcdrs=0;
lcdrw=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//写数据函数
voidwrite_date(uchardate)
{
lcdrs=1;
lcdrw=0;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//写时间函数
voidwrite_sfm(ucharadd,uchardate)
{
ucharge,ge1;
ge1=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+ge1);
write_date(0x30+ge);
}
//显示时间初始化
voidTimeInit()
{
write_com(0x01);
write_com(0x80);
for(num=0;num<8;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40+6);
write_date(':
');
delay(5);
write_com(0x80+0x40+9);
write_date(':
');
delay(5);
write_sfm(4,shi);
write_com(0x80+0x40+4);
write_sfm(7,fen);
write_com(0x80+0x40+7);
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
//设置倒计时时间
voidSetTime()
{
if(K1==0)
{
delay(5);
if(K2==0)
{
delay(5);
if(K2==0)
{
while(!
K2);
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!
K3);
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
}
if(K4==0)
{
delay(5);
if(K4==0)
{
while(!
K4);
TR0=1;
TimeInit();
}
}
}
}
//键盘扫描函数
voidkeyscan()
{
if(K1==0)
{
delay(5);
if(K1==0)
{
TR0=0;
SetTime();
}
}
}
//lcd1602初始化
voidinit()
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定时 时钟 设计 语言