教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教学研究 >

基于PIC16F887单片机的温度、时钟显示以及闹钟功能

来源:网络收集 时间:2026-04-03
导读: 基于PIC16F887单片机的温度、时钟 显示以及闹钟功能 一、课程设计的目的 《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要 的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片

基于PIC16F887单片机的温度、时钟

显示以及闹钟功能

一、课程设计的目的

《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要

的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片机的 应用方法,熟练PIC 单片机的C 程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。

二、设计内容

1 Proteus 线路图绘制

根据所设计的线路图,绘制与之一致的,能用于仿真的Proteus 线路图。要求所绘的线路图美观、紧凑,参数要与课设 一致。 2、 软件编制与调试

根据所设计的线路图 制相应的单片机C 程序,要求所 制的程序符合C 语言格式并加上注解。每编一段即进行 译,有错及时修改,并先在Proteus 上仿真,基本正确后再用PICkit3 在线调试,最后应脱机运行。

三、设计目标

1该设计包括数字钟及数字温度计:按键的使用.LCD.蜂鸣器 时钟芯片DS1307和温度传感器TC74。

2功能;此设计可以感测环境的温度,显示当前的时间,及闹钟。温度与时间都显示在LCD显示屏上,以及如何调整闹钟界面

四硬件设计及说明 1 复位按键

2时钟芯片DS1307及附属接线

时钟芯片DS1307用于产生时间,它提供了秒、分、时、日、年、和星期等数据,能算只瑞年2100年,时钟的晶振是典型的32.768Hz。 (1)其引脚作用如下:

2 (2)DS1307的读写如下;

1写DS1307 的步骤如下:

a) 发送启始位;

b) 发送DS1307 的7位地址+0 (写),即0b11010000;

c) 发送要写入DS1307 的地址,地址见图16,如要修改分,此值为1;

d) 发送要写入DS1307 的数,如要把分修改为十进制数37,则此数为0x37; e) 发送停止位;

2读DS1307 的步骤如下:

a) 发送启始位;

b) 发送DS1307 的7位地址+0 (写),即0b11010000; c) 发送要读的DS1307 的起始地址,如要从秒读起,为0; d) 发送停止位; e) 发送重新开始位;

f) 发送DS1307 的7位地址+1 (读),即0b11010001; g) 发送读使能位,接收一个数据,单片机发送应答位;

h) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后

一个数时单片机不发送应答位; i) 发送停止位;

注意在DS1307仿真的时候七位地址为0b1001101 而实际为0b1001000 ; (3)功能是;提供时间通过pic16F877送入LCD中显示。

3 振荡方式

4时钟控制按键及闹钟电路

(1)按键1可以再时钟界面和闹钟界面切换

(2)按键2可以通过光标移动设置时间和闹钟

(3)按键3,4可以修改时机

(4)三极管用于电流的放大,以致驱动喇叭。

5 LM016L 液晶显示屏

LM016L是字符型的LCD液晶显示屏其内部控制芯片是HD44780或KS0066之类是16X2的字符型的LCD 对其使用时

(1)要初始化;

(2)在LCD显示前,要对显示位置进行定位,既写位置命令 (3)把该命令写入到DDRAM中

(4)在用写数据命令,显示要显示的字符

五 软件设计及说明

程序大体说明,

1.设单片机上电,屏幕上显示welcome!!和hello!!

2.上述界面延迟一段时间后,自动进入时间界面,通过程序的运行,单片机自动同DS1307和TC74芯片中读取时间和温度并显示在LCD上

3.通过不断的按键扫面,当(1)按键1可以再时钟界面和闹钟界面切换

(2)按键2可以通过光标移动设置时间和闹钟

(3)按键3,4可以修改时间,分别加减

4.当切换到闹钟界面,通过设置好时间后,在时间界面星期旁边会显示一个A

提示我们闹钟已经开启,当到了设置的时间点,蜂鸣器会自动响,延迟一段时间

会自动关掉,或者我们可以用通过按键4人为关掉它

#include<pic.h> __CONFIG(0x20F1);

#define uchar unsigned char #define uint unsigned int #define ds1307 0b1101000 #define TC74 0b1001000 #define RTR 0b00000000 #define FMQ RC1 #define LCD_RS RD4 #define LCD_RW RD5 #define LCD_E RD6 #define S1 RB0 #define S2 RB1 #define S3 RB2 #define S4 RB3 #define DAT 1 #define COM 0

#define LINE1 0b10000000 #define LINE2 0b11000000 #define YEAR LINE1+2 #define MONTH LINE1+5 #define DAY LINE1+8 #define WEEK DAY+3 #define HOUR LINE2+1 #define MINUTE LINE2+4 #define SECOND LINE2+7 #define WENDU SECOND+4 //函数声明

void DELAY(uint n); void DELAY_A(uint n); void DELAY_US(char n); void CSH();

void DS1307_CSH(); void KEYSCAN(); void LCD_CSH(); void LCD_BUSY(); void LCD_CLR(); void LCD_GD(); void READ();

void DSweek(char);

void LCD_WRITE(char,char);

void LCD_WRITE_4(char,char); void TIME(); void TIME_UP(); void TIME_DOWN(); void TIME_UPDATE(); void DISL1(); void DISL2();

void DISL5(); void BCD(uint);

void DISP_T(signed char); void IIC_CSH();

void IIC_SEND(char R);

void IIC_WRITE(char,char); void ALARM_CLOCK(); void ALARM_KG(); char LCD_READ();

char IIC_READ(char addr); char flag,flag_A,A;

char m=0,f=0,s=0,x,r,y,n;

char A_m=0,A_f=0,A_s=0,A_x=0; char shi,ge; char BW,SW,GW;

signed char T_READ();

uchar num1=0,num2=0,num3;

const uchar table0[]={" WELCOME!! "}; const uchar table01[]={" HELLO!! "};

const uchar table04[]={" SET TIME "}; const uchar table[]={"20 - - "}; const uchar table1[]={" : : "}; //BCD码转换,R1双字节转换为十进制数 void BCD(uint R1) { BW=0;SW=0;GW=0; while(R1>=100)

{R1-=100;BW++;} while(R1>=10)

{R1-=10;SW++;} GW=R1; }

//清屏

void LCD_CLR()

{ LCD_WRITE(0b00000001,COM); DELAY(2);

}

//延时子程序

void DELAY(uint n) { uint j; char k;

for(j=0;j<n;j++)

for(k=246;k>0;k--)NOP(); }

//关闹钟

void DELAY_A(uint n) { uint j; char k;

for(j=0;j<n;j++) { if(S4==0)

{DELAY(20); if(S4==0) {break;} }

for(k=246;k>0;k--) { NOP(); if(S4==0)

{DELAY(20); if(S4==0) {break;} } } } }

void DELAY_US(char n) { char j; j=n;

while(j>0) { j--;

NOP();NOP();NOP(); NOP(); } }

//初始化 void CSH() {

TRISC=0b00011000; TRISD=0X00;

ANSELH=0b000000;

TRISB=0b11111111;

RBPU=0; //B口上拉使能 WPUB=0b11111111; …… 此处隐藏:3715字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于PIC16F887单片机的温度、时钟显示以及闹钟功能.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/50073.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)