时间温度显示电路 - 图文
更新时间:2024-06-16 15:18:01 阅读量: 综合文库 文档下载
- 温度显示电路图推荐度:
- 相关推荐
单片机课程设计报告
1设计任务
实时时钟芯片应用
1)可以显示时间,日期及闹钟,并可通过按键进行调整; 2)可同时设置多个闹钟时间(不少于3个)。
2整体设计方案及框图
a.整体设计方案流程:
1)根据实验电路原理图,找出关于时钟设计的相关芯片及原件并利用相关图书资料和网络资源搞清楚其功能结构,最终将各个元件连成时钟电路图画在草稿纸上。
2)根据画好的电路原理图进行电路的焊接过程。
3)电路焊接完毕后,首先进行最小系统的调试,测试最小系统是否能够实现。 4)最小系统在测试通过后进行时钟电路的焊接及测试,若最小系统没有通过测试,则进行错误排查直至最小系统成功实现。 5)最小系统及时钟电路测试通过后进行软件部分编写。
6)根据搜集到的芯片相关资料,了解各芯片管脚结构及功能后进行软件编写。 7)对编写好的程序下载到单片机中进行测试直至所要求功能全部实现。
b.设计框图:
软件部分调全部功能实软件部分编硬件电路部分电路调试 硬件电路数码管部分电路实现 硬件电路设硬件电路焊硬件电路最小系统实现 3硬件设计
最小系统原理:
1)最小系统电路由芯片SST89E516RD和MAX232ACPE,复位电路,LED双色灯,数据通信串口,USB连接口以及晶振部分组成。
2)单片机SST89E516RD工作在12MHz频率下,控制整个电路的运行。 3)复位电路主要通过按钮的短接来实现电路的复位功能。
4)9针的通信串口与MAX232ACPE芯片连接与单片机上的RXD(串行数据接收)和TXD(串行数据发送)来实现单片机与计算机之间的通信。 5)LED双色显示主要通过单片机上的1.6与1.7口来控制。 6)按钮通过2.4~2.7管脚口来实现其功能。
7)USB接口通过与计算机USB接口相连为电路板上的电路提供电源。
显示电路原理:
1)芯片SN74HC573AN实现数码管显示的控制,其八条线路分别控制数码管上a,b,c,d,e,f,g,dot的亮灭,从而将相关数据显示在数码管中。
2)数码管上的Y0~Y7口分别于74LS138芯片上的管脚相连,来实现对数码管某一位的亮灭控制。
时钟电路原理:
1)通过向DS1302中写入初始时钟来让其通过内部和外部的晶振实现计时功能。 2)DS1302中I/O端口为串行数据输入/输出,RST为复位/片选线,Vcc2为主电源,X1、X2为振荡源,GND为地线,SCLK为串行时钟引脚,Vcc1为后备电源。
LED数码管结构图:
四位共阴数码管内部逻辑图
1AF23BEDDPCG4
四位共阴数码管实物引脚图
芯片介绍
SST89E516RD介绍
兼容80C51系列,内置超级FLASH存储器的单片机,工作电压 VDD=4.5~5.5V,5伏工作电压时0~40MHz的频率范围,工作电压 VDD=2.7~3.6V,在3伏工作电压下,原厂保证0~25MHz的工作频,实际最高可达40MHz,与现行的80C52列单片机硬件PIN-TO-PIN完全兼容,软件、开发工具也完全兼容。
1K*8的内部RAM(256Bytes+768Bytes,可使用C语言编程)两块超级FLASH EEPROM,即SST89E516RD/SST89V516RD:64K*8的基本存储块和8K*8的二级存储块(扇区大小为 128 字节)和SST89E58RD/SST89V58RD:32K*8的基本存储块和8K*8的二级存储块(扇区大小为128字节),(二级存储块可用于存放掉电后要保存的数据,放在内部具有极强的抗干扰性)。
独立的块加密,IAP 下的并行操作,块地址重映射。最大片外程序/数据地址空间为64K*8(当然也可以通过I/O口进行块切换,实现超64K扩展)。
三个高电流驱动引脚(每个16mA,可直接驱动LED)和三个16位定时器/计数器。
全双工增强型UART:帧错误检测、自动地址识别。 9个中断源,四个中断优先级。
看门狗定时器 (Watchdog Timer, 缺省情况下不打开, 用户不需要时可不使用)。
可编程计数阵列(PCA),标准为每个机器周期12个时钟,器件可选择在每个机器周期6个时钟基础上加倍。
掉电检测(Brow-out缺省为产生复位,也可设置为产生中断) 降低EMI模式(通过AUXR SFR 不允许ALE 输出时钟) 四个8位 I/O口(32 根输入输出线) MAX232介绍
MAX232是一种把电脑的串行口RS232信号转换为单片机所用到的TTL信号电平的芯片。
RS232引脚定义
1-9针作用分别是载波检测(DCD)、接收数据(RDX)、发送数据(TXD)、数据终端准备好(DTR)、地信号(SG)、数据准备好(DSR)、请求发送(RTS)、清除发送(CTS)、振铃提示(RI)。 DS1302 简介:
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
DS1302的外部引脚分配
DS1302的内部结构
各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入,控制数据的输入与输出;I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
DS1302有下列几组寄存器:
① DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图所示。
DS1302有关日历、时间的寄存器
小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 ②DS1302有关RAM的地址
DS1302中附加31字节静态RAM的地址如图所示。
③ DS1302的工作模式寄存器
所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如图所示。
④此外,DS1302还有充电寄存器等。
2 读写时序说明
DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图。
控制字(即地址及命令字节)
控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输
入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图 。
数据读写时序
3 电路原理图:
电路原理图如图,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。
4软件设计
软件各模块设计流程: 日期功能设计:
时间功能设计:
闹钟功能设计:
闹钟设置显示设计 实现三个闹钟能够独立显示设置,互相之间没有干扰 编写程序实现闹钟到点后蜂鸣器响,LED灯亮红色 闹钟时间点过去后蜂鸣器停止响声,LED灯灭 模块功能实对显示的时间进行长度判断 在LED数码管上显示读出的时间 初始化向DS1302芯片写入初始化时从DS1302中读出时间 模块功能实对显示的日期进行在LED数码管上显示读初始化向DS1302芯片写入初始化日从DS1302中读出日DS1302芯片 DS1302芯片 程序实现代码:
#include
typedef unsigned char unchar; typedef unsigned int unint;
sbit T_CLK = P2^0; //DS1302中串行时钟引脚
sbit T_IO = P2^1; //DS1302中串行数据输入/输出 sbit T_RST = P2^2; //DS1302中复位/片选线 sbit Bee = P2^7; sbit DQ = P3^4; sbit DT =P0^7; sbit P1_6=P1^6; sbit P1_7=P1^7;
sbit TAD = P2^7; sbit K1=P2^6; sbit K2=P2^5; sbit K3=P2^4;
sbit ACC0=ACC^0;//累加寄存器 sbit ACC7=ACC^7;
unchar data year=0x10, month=0x07, date=0x25, day=0x01, hour=0x12, minute=0x59, second=0x45;
unchar data Led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //分别代表0,1,2,3,4,5,6,7,8,9,-
unchar data Dispbuff[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unchar data ring[]={0x00,0x00}; unchar data ring1[]={0x00,0x00}; unchar data ring2[]={0x00,0x00};
unsigned char Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unchar sec,min,hou,dat,mon,wek,yea,i=0,j=0,i1=0,i2=0,i3=0,i4=0; long k=0;
void CDelay(unchar CDelay) //延时 {
while(CDelay--); }
ReadOneChar(void) //读一个字节 {
unchar i = 0; unchar dat = 0; for(i=8;i>0;i--) {
DQ = 0; dat>>=1; DQ = 1;
if(DQ) //判断DQ高低电平,若为高电平则赋给dat高电平值 {
dat |= 0x80; }
CDelay(4);//延时 }
return(dat); //返回dat值 }
WriteOneChar(unchar dat) //写一个字节 {
unchar i = 0; for(i=8;i>0;i--) {
DQ = 0; //低电平脉冲信号 DQ = dat&0x01; CDelay(5);//延时
DQ = 1; //高电平脉冲信号 dat >>= 1;//dat右移一位 }
CDelay(4); }
void oneByteToClock(unchar ucDa) //向DS1302中写一位 {
unchar i; ACC= ucDa; for(i=8; i>0; i--) {
T_IO = ACC0; //相当于汇编中的 RRC T_CLK = 1; T_CLK = 0;
ACC =ACC>> 1;//下一位移到ACC0 } }
unchar oneByteFromClock(void) //从DS1302中读一位 {
unchar i;
for(i=8; i>0; i--) {
ACC = ACC>>1; //*相当于汇编中的 RRC ACC7 = T_IO;
T_CLK = 1; T_CLK = 0; }
return(ACC); }
void giveOneTime(unchar ucAddr, unchar ucDa) {
T_RST = 0; T_CLK = 0; T_RST = 1;
oneByteToClock(ucAddr); //地址,命令 oneByteToClock(ucDa); //写1Byte数据 T_CLK = 1; T_RST =0; }
unchar getOneTime(unchar ucAddr) {
unchar ucDa; T_RST = 0; T_CLK = 0; T_RST = 1;
oneByteToClock(ucAddr); // 地址,命令
ucDa = oneByteFromClock(); // 读1Byte数据 T_CLK = 1; T_RST =0; return(ucDa); }
void resetTime(void) {
giveOneTime(0x8e,0x00); //8e:写寄存器BIT7=WP 作
T_RST = 0; T_CLK = 0;
控制命令,WP=0,写操
T_RST = 1;
oneByteToClock(0xbe); // 0xbe:时钟突发模式:写寄存器 时钟多字节写命令
oneByteToClock(second); oneByteToClock(minute); oneByteToClock(hour); oneByteToClock(date); oneByteToClock(month); oneByteToClock(day); oneByteToClock(year); oneByteToClock(0); T_CLK = 1; T_RST =0; }
void disTime(void) {
unchar sec,min,hou,dat,mon,wek,yea,i,j=0; T_RST = 0; T_CLK = 0; T_RST = 1;
oneByteToClock(0xbf); //* 0xbf:时钟突发模式寄存器:读寄存器字节读命令
sec = oneByteFromClock(); min = oneByteFromClock(); hou = oneByteFromClock(); dat = oneByteFromClock(); mon = oneByteFromClock(); wek = oneByteFromClock(); yea = oneByteFromClock(); T_CLK = 1; T_RST =0;
Dispbuff[0] = sec; Dispbuff[1] = sec/16; Dispbuff[2] = 0xa; Dispbuff[3] = min; Dispbuff[4] = min/16; Dispbuff[5] = 0xa; Dispbuff[6] = hou; Dispbuff[7] = hou/16;
for(i=0; i<8; i++) {
时钟多 P1 = j; P0 = Led[Dispbuff[i]]; CDelay(60); j ++; CDelay(60); } }
void disDate(void) {
unchar sec,min,hou,dat,mon,wek,yea,i,j=0; T_RST = 0; T_CLK = 0; T_RST = 1;
oneByteToClock(0xbf); //* 0xbf:时钟多字节读命令 sec = oneByteFromClock(); min = oneByteFromClock(); hou = oneByteFromClock(); dat = oneByteFromClock(); mon = oneByteFromClock(); wek = oneByteFromClock(); yea = oneByteFromClock(); T_CLK = 1; T_RST =0;
Dispbuff[0] = dat; Dispbuff[1] = dat/16; Dispbuff[2] = 0xa;
Dispbuff[3] = mon; Dispbuff[4] = mon/16; Dispbuff[5] = 0xa; Dispbuff[6] = yea; Dispbuff[7] = yea/16;
for(i=0; i<8; i++) { P1 = j; P0 = Led[Dispbuff[i]]; CDelay(60); j ++; CDelay(60); }
}
void iniClock() {
giveOneTime(0x8e,0x00); //控制写入WP=0 giveOneTime(0x90,0xa5);
giveOneTime(0x80,second); //秒 giveOneTime(0x82,minute); //分 giveOneTime(0x84,hour); //时 giveOneTime(0x86,date); //日 giveOneTime(0x88,month); //月 giveOneTime(0x8a,day); //星期 giveOneTime(0x8c,year); //年 */ giveOneTime(0x8e,0x80); }
unchar bcdToChar (unchar bcd) { unchar n;
n= (bcd>>4)*10 + (bcd&0x0F); return n; }
unchar charToBcd (unchar num) {
unchar n;
n = ((num/10)<<4) | ( num ); return n; }
unchar sToS(unchar s) {
unchar n;
n=(s/16)*10+(s); return n; }
void disRing() //闹钟1设置显示 {
P1=0;
P0=Led[ring[0]]; CDelay(60); P1=1;
P0=Led[ring[0]/10];
CDelay(60); P1=4;
P0=Led[ring[1]]; CDelay(60); P1=5;
P0=Led[ring[1]/10]; CDelay(60); }
void disRing1() //闹钟2设置显示 {
P1=0;
P0=Led[ring1[0]]; CDelay(60); P1=1;
P0=Led[ring1[0]/10]; CDelay(60); P1=4;
P0=Led[ring1[1]]; CDelay(60); P1=5;
P0=Led[ring1[1]/10]; CDelay(60); }
void disRing2() // 闹钟3设置显示 {
P1=0;
P0=Led[ring2[0]]; CDelay(60); P1=1;
P0=Led[ring2[0]/10]; CDelay(60); P1=4;
P0=Led[ring2[1]]; CDelay(60); P1=5;
P0=Led[ring2[1]/10]; CDelay(60); }
void DateDisF() {
if(i==0)
作
{ disDate(); //K1 if(K1==0&&i1==0) { i1=1; yea= bcdToChar(getOneTime(0x8d)); if(yea==89) { yea=0; yea= charToBcd(yea); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操 giveOneTime(0x8c,yea); //写寄存器指令,年 giveOneTime(0x8e,0x80); disDate(); } else{ yea= yea+1; yea= charToBcd(yea); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作 giveOneTime(0x8c,yea); //写寄存器指令,年 giveOneTime(0x8e,0x80); disDate(); } } //K2 if(K2==0&&i2==0) { i2=1; mon= bcdToChar(getOneTime(0x89)); if(mon==12) { mon=1; mon= charToBcd(mon);
giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x88,mon); //写寄存器指令,月 giveOneTime(0x8e,0x80); disDate(); } else{ mon= mon+1; mon= charToBcd(mon);
giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x88,mon); //写寄存器指令,月 giveOneTime(0x8e,0x80); disDate(); } } //K3 if(K3==0&&i3==0) { i3=1; mon= bcdToChar(getOneTime(0x89)); dat= bcdToChar(getOneTime(0x87)); yea= bcdToChar(getOneTime(0x8d));
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) //判断31天月份 { if(dat==31) { dat=1; dat= charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //写寄存器指令,日 giveOneTime(0x8e,0x80); disDate(); } else{ dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //写寄存器指令,日 giveOneTime(0x8e,0x80); disDate(); } } else{ if(mon==2) //二月份平年、闰年天数判断 { if((yea%4)==0&&(yea0)==0&&yea!=0) //闰年 { if(dat==29) {
dat=1; dat= charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //写寄存器指令,日 giveOneTime(0x8e,0x80); disDate(); } else{ dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //写寄存器指令,日 giveOneTime(0x8e,0x80); disDate(); } } else //平年 { if(dat==28) { dat=1; dat= charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //写指令 giveOneTime(0x8e,0x80); disDate(); } else{ dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); //寄存器写指令 giveOneTime(0x8e,0x80); disDate(); } } } else
{ if(dat==30) { dat=1; dat= charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); giveOneTime(0x8e,0x80); disDate(); } else{ dat=dat+1; dat=charToBcd(dat); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x86,dat); giveOneTime(0x8e,0x80); disDate(); } } } } if(K1==1&&K2==1&&K3==1) { i1=0;i2=0;i3=0; } } }
void TimeDisF() {
if(i==1) { disTime(); //K1 if(K1==0&&i1==0) { i1=1; hou= bcdToChar(getOneTime(0x85));
if(hou==23) { hou=0; hou= charToBcd(hou); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x84,hou); //写寄存器指令,时 giveOneTime(0x8e,0x80); disTime(); } else{ hou= hou+1; hou= charToBcd(hou); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x84,hou); //写寄存器指令,时 giveOneTime(0x8e,0x80); disTime(); } } //K2 if(K2==0&&i2==0) { i2=1; min= bcdToChar(getOneTime(0x83)); if(min==59) { min=0; min= charToBcd(min); giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x82,min); //写寄存器指令,分 giveOneTime(0x8e,0x80); disTime(); } else{ min= min+1; min= charToBcd(min);
giveOneTime(0x8e,0x00); //* 控制命令,WP=0,写操作? giveOneTime(0x82,min); //写寄存器指令,分 giveOneTime(0x8e,0x80); disTime(); } }
//K3 if(K3==0&&i3==0) { resetTime(); } if(K1==1&&K2==1&&K3==1) { i1=0;i2=0;i3=0; } } }
void GetTimeF() //读取时间 {
T_RST = 0; T_CLK = 0; T_RST = 1;
oneByteToClock(0xbf); //* 0xbf:时钟多字节读命令 sec = bcdToChar(oneByteFromClock()); min = bcdToChar(oneByteFromClock()); hou = bcdToChar(oneByteFromClock()); dat = bcdToChar(oneByteFromClock()); mon = bcdToChar(oneByteFromClock()); wek = bcdToChar(oneByteFromClock()); yea = bcdToChar(oneByteFromClock()); T_CLK = 1; T_RST =0; }
void ChangeKF() //按钮切换显示实现函数 {
if(TAD==0&&j==0) { if(i==4) { i=0; } else i=i+1; j=1; }
else{
if(TAD==0&&j==1) { i=i; } else j=0; } }
void main (void) {
iniClock(); //始终初始化
while(1) {
GetTimeF(); //获取之前初始化入DS1302中的时间
ChangeKF(); //显示数据切换 DateDisF(); //日期控制 TimeDisF(); //时间控制 //设置闹钟 if(i==2) //闹钟1 { disRing(); P0=0x6; P1=7; if(K1==0&&i1==0) { i1=1; ring[1]=ring[1]+1; if(ring[1]==24) ring[1]=0; disRing(); } if(K2==0&&i2==0) { i2=1; ring[0]=ring[0]+1;
}
if(ring[0]==60) ring[0]=0; disRing(); }
if(K2==1&&K1==1) { i1=0;i2=0; }
if(i==3) //闹钟2 {
disRing1(); P0=0x5b; P1=7; if(K1==0&&i1==0) { i1=1; ring1[1]=ring1[1]+1; if(ring1[1]==24) ring1[1]=0; disRing1(); } if(K2==0&&i2==0) { i2=1; ring1[0]=ring1[0]+1; if(ring1[0]==60) ring1[0]=0; disRing1(); } if(K2==1&&K1==1) { i1=0;i2=0; } }
if(i==4) //闹钟3 {
disRing2(); P0=0x4F; P1=7; if(K1==0&&i1==0) {
i1=1; ring2[1]=ring2[1]+1; if(ring2[1]==24) ring2[1]=0; disRing2(); }
if(K2==0&&i2==0) { i2=1; ring2[0]=ring2[0]+1; if(ring2[0]==60) ring2[0]=0; disRing2(); }
if(K2==1&&K1==1) { i1=0;i2=0; }
}
if(hou==ring[1]&&min==ring[0]) {
Bee=0; P1_6=1; P1_7=1; CDelay(50); Bee=1; } else {
Bee=1; P1_6=0; P1_7=0; }
if(hou==ring1[1]&&min==ring1[0]) {
Bee=0; P1_6=1; P1_7=1; CDelay(50); Bee=1; } else
//闹钟1振铃LED灯亮 //闹钟2振铃LED灯亮
}
}
{
Bee=1; P1_6=0; P1_7=0; }
if(hou==ring2[1]&&min==ring2[0]) //闹钟3振铃LED灯亮 {
Bee=0; P1_6=1; P1_7=1; CDelay(50); Bee=1; } else {
Bee=1; P1_6=0; P1_7=0; }
5实现过程中遇到的问题及解决方法
1)最小系统无法实现:利用万用表对线路电压,电阻及短路与否进行逐个排查直至找出错误连接点
2)LED数码管显示不正确:参照电路原理图与电路对照,发现线路接反,重新焊接后数码管显示正常
3)蜂鸣器接通电源后响声不停:三极管管脚焊接错误,重新焊接后蜂鸣器正常蜂鸣
4)软件部分在编写过程中进行过许多次调试,直至达到要求,其中设置多闹铃部分通过三个数组Ring,Ring1,Ring2来实现闹钟之间互不影像。
6效果图
通电后电路板正面
电路板背面焊接图
日期显示
时间显示
闹钟1
闹钟2
闹钟3
温度显示-正常状态
温度显示-高温状态
7总结及建议
通过本次实践主要总结如下:
1)掌握了电路焊接的基本方法,如:焊锡及电烙铁的使用,吸锡器的使用和电路的基本布局方法。
2)对一些芯片如:SST89E516RD、MAX232ACPE、74LS138、DS1302、DS18B20的结构功能以及在实际中的简单应用。
3)对时钟控制和温控电路有了初步了解,并掌握了对其编程的基本方法。 4)学会了如何在遇到错误的情况下能够进行有效的排查并迅速解决。
5)在实践的过程中也出现了一些问题,如:电路板的焊接连线过于繁琐臃肿,对硬件编程了解不深导致效率低下,在排查错误的过程中没有针对性等。针对这些问题以后要有目的性的进行改进。
8参考文献
[1]《DS1302数据手册》盛世电子科技 [2]《SST89系列单片机中文手册》 [3]《USB 2.0板载设计及布线指南》 [4]《MAX232中文资料 规格书》 [5]《MAX232中文资料及应用》 [6]《USB接口针脚定义,插口针脚识别》 [7]《74系列芯片资料_(中文)》
正在阅读:
时间温度显示电路 - 图文06-16
that引导的定语从句的用法02-13
供电段电力线路工必知必会问答09-15
清溪中心小学日常管理评估自查报告(最新)08-22
Hyperion Essbase技术文档 - 图文07-05
小学教师简短评语大全04-30
2015高校辅导员招聘面试题集及参考答案04-06
职中高二期语文试卷- 副本04-08
危机公关中政府新闻发言人作用论文08-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 电路
- 温度
- 图文
- 时间
- 显示
- 《园林植物病虫害防治》试题
- 2017最新人教版二年级数学上册期末试卷
- 年产10万吨豆制品生产线建设项目可行性研究报告
- CH355DS1
- 2140光标阅读机说明书
- 2019高中语文 第一课 走进汉语的世界检测卷 新人教版选修《语言
- 货币银行学历年期末考试试卷及答案
- 《生物化学》习题册
- 2011证券投资分析最新模拟试题6
- 遗传算法选取最优参数MATLAB程序
- 电解质溶液知识点
- 2019届湖北省部分重点中学高三上学期第二次联考文综政治试题
- 电子贸易习题及答案
- 计量经济学,多重共线性异方差虚拟变量随机解释变量大作业(DOC)
- 恰同学少年 - 图文
- 2014二级建造师法规考试真题及答案
- 2018年中国蚕丝被行业研究报告目录
- 安捷伦泵与比例阀的结构原理与常见故障
- 第五章《圆》导学案
- 2019学校工会工作计划