- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计报告
姓名: 吴新旺
学号: 0815241048
班级: 08电子C班
设计题目:多功能万年历
实现功能:
显示年月日,时分秒,星期与温度
年月日,时分秒均可调,具备自动调节闰年的功能
具有闹钟功能,且开关控制闹钟的开启与关闭
具有整点报时功能
三、系统的硬件设计与实现RAM的实时时钟芯片,具有掉电自动保存功能。可自动对秒、分、时、日、周、月、年进行计数,具有闰年补偿功能,而且精度高位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。显示模块采用LCD1602显示屏,它内置192种字符,可显示32个符号或数字,清晰可见,而且功率消耗小寿命长抗干扰能力强。其工作电压为5v。温度采集模块采用温度传感器18b20。
3、各单元电路设计:
3.1 单片机主控制模块的设计
一个典型的单片机最小系统一般由时钟电路、复位电路、电源指示灯和外部扩展接口等部分组成。最小系统电路原理图如图1所示。
图1
3.2 时钟电路模块设计
DS1302内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。图中VCC1为后备电源,VCC2为主电源。DS1302由VCC1或VCC2两者中的较大者供电。所以在主电源关闭的情况下,也能保持时钟的连续运行。X1和X2是振荡源,外接32.768KHz晶振用来为芯片提供计时脉冲。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。DS1302
的硬件接线图如图2所示:
图2
3.3 温度传感采集模块设计
如图-3所示。采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点。
图3
3.4 独立按键设计
电路由三个独立按键开关组成,分别与单片机的I/O相连,控制调整电路的加、减以及确定。
3.4 电路原理及说明
总得流程图如下:
(1) 时钟芯片DS1302的工作原理:
DS1302在每次进行读、写程序前都必须初始化,先
把SCLK端置 “0”,接着把RST端置“1”,最后才给予
SCLK脉冲;读/写时序如下图4所示。图5为DS1302的
控制字,此控制字的位7必须置1,若为0则不能把对
DS1302进行读写数据。对于位6,若对程序进行读/写时
RAM=1,对时间进行读/写时,CK=0。位1至位5指操作
单元的地址。位0是读/写操作位,进行读操作时,该位
为1;该位为0则表示进行的是写操作。控制字节总是
从最低位开始输入/输出的。表6为DS1302的日历、时
间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,
时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,
时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM
的写操作之前,WP必须为0。当“WP”为1时,写保护位防
止对任一寄存器的写操作。
DS1302的有关程序如下:
void write_byte(uchar dat)//写一个字节
{
ACC=dat;
RST=1;
for(a=8;a0;a--)
{
IO=ACC0;
SCLK=0;
SCLK=1;
ACC=ACC1;
}
}
uchar read_byte()//读一个字节
{
RST=1;
for(a=8;a0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC1;
}
return (ACC);
}
//----------------------------------------
void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制
{
uchar Decimal;
Decimal=bcd4;
return(Decimal=Decimal*10+(bcd=0x0F));
}
//----------
文档评论(0)