定时闹钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子闹钟的控制系统设计
基于atmega16单片
一、设计目的
此次设计的目的是培养同学们系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力,以及一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;通过完成所选题目的分析与设计,达到技术性能要求。
二、设计要求
1、能显示时时-分分-秒秒。
2、能够设定定时时间、修改定时时间。
3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。
三、设计的总体结构
3.1 整体设计思路
利用Mega16单片机内部时钟作为时间基准,通过软件编程控制可编程器件Mega16单片机,实现秒,分,时,日,月,年的控制,最终通过LCD液晶显示屏显示结果。此外还可以实现时间调整,定时多种实用功能,整个设计分硬件和软件俩大部分。硬件部分采用Mega16单片机作为可编程芯片,1602字符液晶作为信号显示;软件部分利用C语言作为设计语言,对Mega16进行编程实现各种功能
3.3软件设计
各部分电路设计
主电路主要就是芯片的运行,加载程序后,在外部时钟的作用下,将按照程序运行,从而可以实现设计的要求,进行时钟时间和定时时间的调整,并且能够在到达定时时间后控制蜂鸣器发出声响。利用仿真仿真软件画出的电路图
1,显示电路
显示电路即可以让我们看到时间的调整和定时时间的调整,显示调整后的时间。
2仿真电路的总体原理框图
3.3软件设计
软件的设计思路框图
四,C语言程序设计
#include
#define uchar unsigned char
#define uint unsigned int
sbitspk=P1^7;
sbit led=P1^5;
sbit DQ=P1^0;
sbit RS=P2^4;
sbit RW=P2^5;
sbit EN=P2^6;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit IO=P3^6;
sbit RST=P3^7;
sbit SCLK=P3^5;
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
intnian,xing,yue,ri,shi,fen,miao;
uchar num,temp,c,d,time[7],a,b,aa,bb,ns,ng,ys,yg,rs,rg,ss,sg,fs,fg,ms,mg,flag; /*******************1602************************/
void delay(int z)
{
intx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void write_com(uchar com) //写命令
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(5);
EN=0;
}
void write_data(uchar date) //写数据
{
RS=1;
P0=date;
delay(5);
EN=1;
delay(5);
EN=0;
}
void init() //初始化
{
RW=0;
EN=0;
write_com(0x38); //显示模式设置
write_com(0x0c); //开显示不显示光标不闪
write_com(0x06); //写一个字符地址指针光标加一整屏不移动
write_com(0x01); //显示清零
write_com(0x80+0x04);
write_data('2');
write_com(0x80+0x05);
write_data('0');
write_com(0x80+0x00);
write_data('c');
write_com(0x80+0x01);
write_data('a');
write_com(0x80+0x02);
write_data('i');
write_com(0x80+0x4e);
write_data(0xdf);
write_com(0x80+0x4f);
write_data('C');
write_com(0x80+0x4b);
write_data(0x2e); //显示"。"
}
/**************DS18B20****************/
void delay1(unsigned int t) //延时函数
{
while(t--);
}
void init1() //初始化
{
uchar n=0;
DQ=1; //DQ复位
delay1(8);
DQ=0; //主机将DQ拉低
delay1(80); //大于480us的延时
DQ=1;
delay1(5); //延时15~60us
n=DQ;
delay1(5); //若n=0初始成功n=1初始失败(可设置返回值查看n是否为1)}
void write_byte(uchardat) //写入一个字节
{
uint i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay1(12);
DQ=1;
dat>>=1;
}
delay1(4);
}
ucharread_byte() //读入一个字节
{
uint k=0;
uchar value=0;