基于单片机的电饭锅温度监测及控制系统
华 目 基于华片机的华华华华华 华华名称 华工程及其自华化气 指华华教 肖金华
华 称 副授教 班 华 华力 083 班 学号 20084450310 学生姓名 冀凌波
2012年 1 月 6 日
第1华~共59华
目华
目华 ............................................................................................................................... ........................ 2摘 要, ............................................................................................................................... .............. 2第 章 华 华 1 ............................................................................................................................... ....... 3
第 1.1 华 述概.................................................................................................... 3
华华华度控制华展华及华华意华温状 1.1.1 ................................................................................... 4
华华华度控制的华华目的温 1.1.2 ............................................................................................. 4
第 1.2 华 华华究的主要容研内................................................................................ 4第 章 硬件介华 2 ............................................................................................................................... . 5
第 2.1 华 整硬件架体构.......................................................................................... 5
第 2.2 华 DS18b20 工作原理及功能介华.............................................................. 5
的主要特征 2.2.1 DS18B20 .............................................................................................. 5
的主要功能及控制 2.2.2 DS18B20 .................................................................................. 6
第 2.3 华 DS1302 功能介华........................................................................................ 7
第 2.4 华 LCD1602 工作原理及功能介华............................................................... 9
,,液晶华示华介 2 4 1 .......................................................................................................... 9
的基本及引脚功能参数 2.4.2 1602LCD ......................................................................... 10
的指令华明及华序 2.4.3 1602LCD ..................................................................................... 11
第 2.5 华 度华华及控制系华外华华路华华温................................................................... 13第 章 度华华控制的华华温 3 ................................................................................................................ 16
第 3.1 华 度华华及控制系华想温构........................................................................ 16
第 3.2 华 度华华及控制系华华件部分流程华温.......................................................... 17
第 3.3 华 度华华及控制系华华件部分各主要子函华明温数..................................... 17
华件部分子函数 3.3.1 LCD1602 ....................................................................................... 17参献考文, ....................................................................................................................................... 33华,辞 ............................................................................................................................... .................. 34附华, ............................................................................................................................... .................. 35
附华一,源程序..................................................................................................... 35摘 要,
本次华程华华华华了华华华控制的华华和华用~华系华以STC90C516的华片机华核心华华度温的华华和控制。
首先,本文华度控制的华展华及华华意华温状做了介华~而后华全部的硬件华路华行了华
第2华~共59华
华的华华~包括DS1302华华芯片和1Wire华华字度华感器数温DS18B20的控制方式和工作原理~矩华式华华的华用等。接着华华件部分也作了仔华的思考~按模华华行华化程构序华华~包括华示、华华、华华、度控制和度华感器的程序华明出各子程序流程华等温温并画。最后华行了系华整华华。体
温将度控制系华华华了温度华华DS18B20华华华华到华片机中~华片机华华华所华华据并数
的华理华华了度保持在某一定华~能自华控制华整度。将温确区并温
水控制 华片机 温DS18B20华华华,
第1章 华 华
第1.1华 述概
第3华~共59华
1.1.1 华华华度控制华展华及华华意华温状
温学研度是烹华非常华华的一华物理量~在生活~华代科究和各华高新技华的华华和研个参数温条究中也是一非常普遍和常用的华量。例如米华制作华程中~按照度件的华定保持一定的度才能保华米华的华量。华华华华华行度的华控~例如温温水华控、水量温控制、保度等~判 可能存在的华缺陷~华而能及华华华、华理、华防糊华的华生。因温温断
此究度烹华华控制华具有重要的意华。研温称
华华华度控制采用华片机华华的全字华
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
~是常华华华华的升华华品。本华华华度控制温数温
的特点是在同一硬件系华中华用不同的华件~可以得到功能不同的华控华器。华就可以大大华省华品的华华华华和成本~因此有着泛的华用前景和市华。广
需要指出的是~华华华度控制的华展引入华片机之后~有可能降低华某些硬件华温
路的要求~但华华不是华可以忽略华华华路本身的重要性~尤其是直接华取被华信的华号感器部分~仍华华予充分的重华~有华提高整台华器的性能的华华仍然在于华华华路尤其是华感器的改华。华在华感器也正在受着微华子技华的影~不华展华化。华感器正朝着响断
小型、固华、多功能和集成化的方向华展。
近年~华华华的华展尤华迅速。外市华上已华出华了多华多华的先华华华华~华用烹华来国内。例如~能华华行模糊控制的华华华~智能化人华控制华华华。仿
1.1.2 华华华度控制的华华目的温
华一步深化了华华片机智能控制的理解~华华片机的C华言华程也有了更加深入的。加强了华片机外部华路之华通信的理解~也提高了自己控制华片机外体会与与
部华路通信的能力。
第1.2华 华华究的主要容研内
华是一华合硬件华华和华件华华于一的华目~其中各部分的华华我华已华在个体独平华华做华~华在华合起形来个温成一烹华水控制系华。
利用DS18B20华华度华华华华片机~华片机通华控制温并I/O口华出~控制加华和降温没与温系华~本例中~有加华降部件~华华华华器华行控制~由I/O口P3^6、P3^7控制~华华由华片机华烹华度的控制和保持~温温且具有加华华束保功能。
本华华可以华华烹华度华定华固定华~华定加华华华。华加华华将温并温温束后华行保~且保温温度和加华度下限可华。华定加华度及加华华华后~按华温始华华始加华~加华华华华束后华行保~直温断至华。
第4华~共59华
第2章 硬件介华
第2.1华 整硬件架体构
本华华中整硬件架华如体构下华2.1示。
华2.1 硬件架 构
第2.2华 DS18b20工作原理及功能介华
温众与靠度华感器的华华多~在华用高精度、高可性的华合华 DALLAS;拉达斯,公司生华的 DS18B20 度华感 器温当体仁不华。超小的华~超低的硬件华消~抗干华能力强~精度高~附加功能强~使得 DS18B20 更受华迎。华于我 华普通的华子华好者来华~DS18B20 的华华更是我华华华片机技华和华华度学温相华的小华品的不二华华。2.2.1 DS18B20 的主要特征
DS18B20 的主要特征,全字度华华及华出数温数~先华的华华华据通信~最高 12 位分辨率~精度可达土0.5华氏度~12位分辨率华的最大工作周期华 750 毫秒~可华华寄生工作方式~华华度温–范华华55?C ~+125?C (67–?F ~+257?F)内置 EEPROM~限温华警功能~64位光刻ROM~内号挂置华品序列~方便多机接~多华封形装式~适华不同硬件系华。
第5华~共59华
2.2.2 DS18B20 的主要功能及控制
DS18B20 的度华华字据华出全集成于一芯片之上~而温与数数个从抗干华力更强。其一工作个两个即温数周 期可分华部分~度华华和据华理。在华解其工作流程之前我华有必要了解18B20的 部存华器华源。内
18B20 共有三华形华的存华器华源~华分华是,它
ROM 只华存华器~用于存放DS18B20ID华华~其前8位是华华系列华华;DS18B20的华华是19H,~后面48位是芯片唯一的序列号~最后8位是以上 56 的位的CRC华;冗余校华,。据在 出华华华数置不由用华更改。DS18B20共64位ROM。
RAM 据华存器~用于部华数内数数算和据存取~据在掉华后华失~DS18B20 共9字华 个RAM~每个字华华8位。第1、2字华是度华华后的据华信个温数
息~第 3、4字华是用华个EEPROM;常用于度华温警华华存,的华像。在上华华位华其华将被刷新。第5字华华是用华第个3个EEPROM的华像。第6、7、8字华华华个数寄存器~是华了华用华得到更高的度分温内温辨率而华华的~同华 也是部度华华、华算的华存华元。第9字华华前个8字华的个CRC华。
EEPROM非易失性 华华~用于存体数温放华期需要保存的据~上下限度华警华和校华据~数DS18B20共3位EEPROM~ 在并RAM都存在华像~以方便用华操作。
控制器华18B20操作流程,
1~华位,首先我华必华华DS18B20芯片华行华位~华位就是由控制器;华片机,华DS18B20华华华至少480uS的低华平信。号当18B20接到此华位信后华在号会15~60uS后回华一芯片的存在。个脉冲
2~存在,在华脉冲将数位华平华束之后~控制器华华据华华华拉高~以便于在 15~60uS后接 收存在~存在华一脉冲脉冲个60~240uS的低华平信。号至此~通信双达来将会与方已华成了基本的华华~接下是控制器18B20华的据通信。如数果华位低华平的华华不足或是华华华的华路路 断会脉冲况都不接到存在~在华华华要注意意外情的华理。
3~控制器华送ROM指令,方双将打完了招呼之后最要华行交流了ROM 指令共有5~条个条每 一工作周期只能华一~ROM指令分华是华ROM数据、指定匹配芯片、跳华ROM、芯片搜索、华警芯片搜索。ROM指令华8位华度~功能是华片的 内64位光刻ROM华行操作。其主要目的是华了分辨一华华上接的多条挂个器件作华理。华然~华华华上可以同华接多器件~通华并挂个并个独每器件上所有的ID号来区挂个华~一般只接华18B20芯片华可以跳华ROM指令;注意,此华指的跳华ROM指令非不华并送ROM指令~而是用特有的一条“跳华指令”,。ROM 指令在下文有华华的介华。
4~控制器华送存华器操作指令,在ROM指令华送华18B20之后~华接着;不华断,就是华送存华器操作指令了。操作指令同华华8位~共6~存华器条操作指
第6华~共59华
令分华是写RAM数据、华RAM数将据、RAM数据华制到EEPROM、度华华、温将EEPROM中的华警华华制到RAM、工作 方式切华。存华器操作指令的功能是命令18B20作什华华的工作~是芯片控制的华华。
5~华行或数写个将数据华,一存华器操作指令华束后华华行指令华行或据的华写个温~华操作要华存华器操作指令而定。如华行度华华指令华控制器;华片机,必华等待18B20华行其指令~一般华华华华华500uS。如华行据华指令华需要华数写格遵循18B20的华华序写来数写将操作。据的 华方法有下文有华华介华。
若要华出前的度据我华需要华行次工作当温数两个周期~第一周期华华位、跳华ROM指令、华行 度华华存华器温操作指令、等待500uS度华华华华。华接着华行第温个二周期华华位、跳华ROM指令、华行华RAM的存华器操作指令、华据数;最多华9字华~中个途可停止~只华华华度华华华前温2字华可个即它异,。其的操作流程也大同小~在此不多介华。
第2.3华DS1302功能介华
DS1302是 DALLAS公司推出的涓流充华华华芯片内个含有一华华华华/日华和 31字华华 静RAM可通华华华的串行接口与华片机华行通信。
可提供,秒分华日日期月年的信息~每月的天数数和华年的天可自华华整~可通华AM/PM指示定采用决24或12小华格式。
华2.2 DS1302
第7华~共59华
各引脚的功能华,
Vcc1,主华源~Vcc2,华华源。份当Vcc2>Vcc1+0.2V华~由Vcc2 向DS1302供华~当Vcc2< Vcc1华~由Vcc1向DS1302供华。SCLK,串行华华~华入~控制数据的华入华出与~I/O,三华接口华的向据华双数~CE,华入信~在华、据号写数期华~必华华高。华引脚有功能,两个CE华始控制字华华移位寄存器的控制华华~CE 提供华束华字华或多字华据华华的方数法。
华2.3 DS1302 部华内构
DS1302 部包括,内
Power control:华源控制模华
Input shift registers,华入移位寄存器
Command and control logic,通华华华控制器与
Oscillator and divider,晶体振华器及分华器
DS1302 的部主要华成部分华然有,内移位寄存器、控制华华、振华器、华华华 华以及 RAM。华然据分成华~但是华华片机的程序而言~其华是一华的~ 就是华特定的数两
地址华行华写操作。
第8华~共59华
第2.4华 LCD1602工作原理及功能介华
2,4,1 液晶华示华介
?液晶华示原理
液晶华示的原理是利用液晶的物理特性~通华华华华其华示区域华行控制~有华就有华示~华华可以华示出华即形。液晶华示器具有厚度薄、适用于大华模集成华路直接华华、易于华华全彩色华示的特点~目前已华被泛华用在广数便携式华华、字华像机、PDA移华通信工具等多华众域。
?液晶华示器的分华
液晶华示的分华方法有多华~通常可按其华示方式分华很段式、字符式、点华式等。除了黑白华示外~液晶华示器华有多灰度有彩色华示等。如果根据华华方式分~可以来分华华华华静;Static,、华华矩华华华;Simple Matrix,和主华矩华华华;Active Matrix,三华。
?液晶华示器各华华形的华示原理:
华段的华示,点华华形式液晶由M×N个华示华元华成~假华LCD华示有屏64行~每行有128列~每8列华华1字华的8位~即每行由16字华~共16×8=128点华个成~上屏64×16华示华个与元华示RAM区1024字华相华华~每一字华的容和华示内屏上相华位置的亮暗华华。例如的第一行的屏亮暗由RAM区的000H——00FH的16字华的容定~内决当;000H,=FFH华~华屏条幕的左上角华示一短亮华~华度华8点个~当;3FFH,=FFH华~华屏条当幕的右下角华示一短亮华~;000H,=FFH~;001H,=00H~;002H,=00H~……;00EH,=00H~;00FH,=00H华~华在屏条幕的华部华示一由8段亮华和8条虚暗华华成的华。华就是LCD华示的基本原理。
字符的华示,用LCD华示一字个个符华比华华华~因华一字符由6×8或8×8点华华成~要到和华示既找屏几个幕上某位置华华的华示RAM区的8字华~华要使每字华的不同位华“1”~其的华它“0”~华“1”的点亮~华“0”的不亮。华华一就华成某来个内来字符。但由于华字符华生器的控制器华~华示字符就比华华华了~可以华控制器工作在文本方式~根据在LCD上华始华示的行列号数找及每行的列出华示RAM华华的地址~华立光华~在此送上华字符华华的代华可。即
华字的华示,华字的华示一般采用华形的方式~事先微机中提取要华示的华字的从
点华华;一般用字模提取华件,~每个华字占32B~分左右半两~各占16B~左华华1、3、5……右华华2、4、6……根据在LCD上华始华示的行列号数找及每行的列可出华示RAM华华的地址~华立光华~送上要华示的华字的第一字华~光华位置加1~送第二个个字华~华行按列华华~送第三字华……直到32B华示完就可以LCD上得到一个完整华字。
第9华~共59华
2.4.2 1602LCD的基本及引脚功能参数
1602LCD分华华背光和不华背光两华~基控制器大部分华HD44780~华背光的比不华背光的厚~是否华背光在华用中并两无差华~者尺寸差华如下华10-54所示,
华2.4 1602LCD华
1602LCD采用华准的14脚;无背光,或16脚;华背光,接口~各引脚接口华明如表10-13所示:
表2.1,引脚接口华明表,
华号符号引脚华明华号符号引脚华明
华源地数据1VSS9D2
华源正极数据2VDD10D3
液晶华示偏华数据3VL11D4
数据4RS数据/命令华华12D5
数据5R/W华/写华华13D6
使能信号数据6E14D7
数据背光源正极7D015BLA
数据背光源华极8D116BLK
第1脚,VSS华地华源。
第10华~共59华
第2脚,VDD接5V正华源。
第3脚,VL华液晶华示器华比度华整端~接正华源华华比度最弱~接地华华比度最高~华比度华高华华生会个“鬼影”~使用华可以通华一10K的华位器华整华比度。
第4脚,RS华寄存器华华~高华平华华华据数寄存器、低华平华华华指令寄存器。
第5脚,R/W华华信华~高华写号写当平华华行华操作~低华平华华行操作。RS和R/W共同华低华平华可以入指令写当或者华示地址~RS华低华平R/W华高华平华可以华忙信~号当RS华高华平R/W华低华平华可以入据。写数
第6脚,E端华使能端~当E端由高华平跳华成低华平华~液晶模华华行命令。
第7,14脚,D0,D7华8位双数向据华。
第15脚,背光源正。极
第16脚,背光源华。极
2.4.3 1602LCD的指令华明及华序
1602液晶模华部的控制器共有内11控制指令~如表条10-14所示,
表2.2,控制命令表
序号指令RSR/WD7D6D5D4D3D2D1D0
清华示10000000001
光华返回2000000001*
置华入模式300000001I/DS
4华示华/华控制0000001DCB
光华或字符移位5000001S/CR/L**
置功能600001DLNF**
置字符华生存华器地址字符华生存华器地址70001
置数据存华器地址华示据存华器数地址8001
华忙华志或地址华器数地址901BF
要的据容写数内10写数到CGRAM或10
DDRAM,
华出的据容数内11从CGRAM或DDRAM华11
数
;华明,华高华平、华低华平,10
指令1,华示~指令华清01H,光华华位到地址00H位置。
指令2,光华华位~光华返回到地址00H。
指令3,光华和华示模式华置 I/D,光华移华方向~高华平右移~低华平左移 S:屏幕上所有文字是否左移或者右移。高华平表示有效~低华平华无效。
指令4,华示华华控制。 D,控制整华示的华华~高华体与平表示华华示~低华平表示华华示 C,控制光华的华华~高华与平表示有光华~低华平表示无光华 B,控制光华是否华
第11华~共59华
华~高华平华华~低华平不华华。
指令5,光华或华示移位 S/C,高华平华移华华示的文字~低华平华移华光华。
指令6,功能华置命令 DL,高华平华华4位华华~低华平华华8位华华 N,低华平华华华行华示~高华平华行华示 双F: 低华平华华示5x7的点华字符~高华平华华示5x10的点华字符。
指令7,字符华生器RAM地址华置。
指令8,DDRAM地址华置。
指令9,华忙信和号光华地址 BF,华忙华志位~高华平表示忙~此华模华不能接收命令或者数据~如果华低华平表示不忙。
指令10,据。写数
指令11,华据。数
华写操作华序如华和所示,10-5510-56
华2.5 华操作华序
第12华~共59华
华2.6 写操作华序第2.5华 度华华及控制系华外华华路华华温
如华2.7所示华华片机系华华路。
华2.7华片机系华
第13华~共59华
如华2.8所示华DS1302华路。
华2.8 DS1302华路华
如华2.9所示华DS18B20华路。
第14华~共59华
华2.9 DS18B20华路华
如华2.10所示华LCD1602华路华。
华2.10 LCD1602华路
第15华~共59华
第3章 度华华控制的华华温
第3.1华 度华华及控制系华想温构
本华华基于STC90C516RD+华片机与DS18B20度华华芯片。系华中用到了温运温
度华华、据华华、华片机的通信和控制、数DS1302华华华华及LCD1602液晶华示。首先由矩华华华华定DS1302初始华华~由华片机华行控制和入~程序华后~写启由华件华华华片机华各芯片的初始化。系华正常行后~运由DS18B20华行度的华华~华华到华片机中华行华温并
理和华示~再由华片机华所接收到的据华行分数达温析和华理~以到控
制度
关于办公室下班关闭电源制度矿山事故隐患举报和奖励制度制度下载人事管理制度doc盘点制度下载
的目的。
第16华~共59华
第华 度华华及控制系华华件部分流程华温3.2
温度华华及控制系华华件部分流程华如下华3.1所示。
华3.1 华件部分流程华
第3.3华 度华华及控制系华华件部分各主要子函华明温数
程序华始运独温行后~通华矩华华华及立按华华置初始华华及度控制华警
范华。
3.3.1 LCD1602华件部分子函数
延华子函,数
void delay()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++)
;
}
第17华~共59华
void delayxms(uchar x){
int i,j;
for(i=x; i<0; i--)
for(j=120; j<0; j--);
}
1602命令函,数
void enable(uchar del){
P0 = del;
RS = 0;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
1602据函,写数数
void write(uchar del){
P0 = del;
RS = 1;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
1602初始化函,数
void L1602_init(void){
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);}
第18华~共59华
将数需要华示的据华示在1602上,void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
write(sign);
}
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
while(1)
{
if(*p == '\0') break;
write(*p);
p++;
}
}
以下华DS1302据的入、华出、数写BCD华华华、DEC华华华、寄存器的华、写写初始华入
等子函,数
void v_RTInputByte(uchar ucDa){
uchar i;
ACC = ucDa;
T_RST = 1;
for(i=8; i>0; i--)
{
T_IO = ACC0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
第19华~共59华
}
}
uchar uc_RTOutputByte(void) {
uchar i;
T_RST = 1;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
T_IO=1;
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
void v_W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr);
_nop_();
_nop_();
v_RTInputByte(ucDa);
T_CLK = 1;
T_RST = 0;
}
uchar uc_R1302(uchar ucAddr){
uchar ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr);
第20华~共59华
_nop_();
_nop_();
ucDa = uc_RTOutputByte();
T_CLK = 1;
T_RST = 0;
return(ucDa);
}
void v_BurstW1302T(uchar *pSecDa){
uchar i;
v_W1302(0x8e, 0x00);
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbe);
for(i=8; i>0; i--)
{
v_RTInputByte(*pSecDa);
pSecDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstR1302T(uchar *pSecDa){
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbf); //0xbf:华华多字华华命令
for(i=8; i>0; i--)
{
*pSecDa = uc_RTOutputByte(); //华1Byte据数
pSecDa++;
}
T_CLK = 1;
第21华~共59华
T_RST = 0;
}
void v_BurstW1302R(uchar *pReDa){
uchar i;
v_W1302(0x8e,0x00); //控制命令,WP=0,写操作
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xfe); //0xbe:华华多字华写命令
for(i=31; i>0; i--) //31Byte 寄存器据数
{
v_RTInputByte(*pReDa); //写1Byte据数
pReDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstR1302R(uchar *pReDa)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xff); //0xbf:华华多字华华命令
for(i=31; i>0; i--) //31Byte 寄存器据数
{
*pReDa = uc_RTOutputByte(); //华1Byte据数
pReDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_Set1302(uchar *pSecDa)
第22华~共59华
{
uchar i;
uchar ucAddr = 0x80;
v_W1302(0x8e, 0x00); //控制命令,WP=0,写操作
for(i=7; i>0; i--)
{
v_W1302(ucAddr, *pSecDa); // 秒 分 华 日 月 星期 年
pSecDa++;
ucAddr += 2;
}
v_W1302(0x8e, 0x80); //控制命令,WP=1,保华写
}
void v_Get1302(uchar ucCurtime[]){
uchar i;
uchar ucAddr = 0x81;
for(i=0; i<7; i++)
{
ucCurtime[i] = uc_R1302(ucAddr); //格式华: 秒 分 华 日 月 星
期 年
ucAddr += 2;
}
}
uchar dectobcd(uchar dec)
{
uchar bcd;
bcd = 0;
while(dec >= 10)
{
dec -= 10;
bcd++;
}
bcd <<= 4;
bcd |= dec;
return bcd;
}
第23华~共59华
uchar bcdtodec(uchar bcd)
{
uchar data1;
data1 = bcd & 0x0f; //取BCD低4位
bcd = bcd & 0x70; //剔除BCD的最高位和低4位。
data1 += bcd >> 1;
data1 += bcd >> 3; //用位移代替乘法算运
return data1;
}
void Write_DS1302Init(void)
{
v_W1302(0x8e,0);
v_W1302(0x80,miao); //写入秒
v_W1302(0x8e,0);
v_W1302(0x82,fen); //写入分
v_W1302(0x8e,0);
v_W1302(0x84,shi); //写入小华
v_W1302(0x8e,0);
v_W1302(0x86,ri); //写入日
v_W1302(0x8e,0);
v_W1302(0x88,yue); //写入月
v_W1302(0x8e,0);
v_W1302(0x8a,xingqi);//写入星期
v_W1302(0x8e,0);
v_W1302(0x8c,nian); //写入年}
void Run_DS1302(void)
{
while(1)
{
v_W1302(0x8f, 0);
miao = bcdtodec(uc_R1302(0x81)); //华出DS1302中的秒
v_W1302(0x8f, 0);
fen = bcdtodec(uc_R1302(0x83)); //华出DS1302中的分
v_W1302(0x8f, 0);
第24华~共59华
shi = bcdtodec(uc_R1302(0x85)); //华出DS1302中的小华
v_W1302(0x8f, 0);
ri = bcdtodec(uc_R1302(0x87)); //华出DS1302中的日
v_W1302(0x8f, 0);
yue = bcdtodec(uc_R1302(0x89)); //华出DS1302中的月
v_W1302(0x8f, 0);
nian = bcdtodec(uc_R1302(0x8d)); //华出DS1302中的年
L1602_char(2, 1, shi / 10 % 10 + 48);L1602_char(2, 2, shi % 10 + 48);L1602_char(2, 3, '-');
L1602_char(2, 4, fen / 10 % 10 + 48);L1602_char(2, 5, fen % 10 + 48);L1602_char(2, 6, '-');
L1602_char(2, 7, miao / 10 % 10 + 48);L1602_char(2, 8, miao % 10 + 48);L1602_char(1, 8, nian / 10 % 10 + 48);L1602_char(1, 9, nian % 10 + 48);L1602_char(1, 10, '-');
L1602_char(1, 11, yue / 10 % 10 + 48);L1602_char(1, 12, yue % 10 + 48);L1602_char(1, 13, '-');
L1602_char(1, 14, ri / 10 % 10 + 48);L1602_char(1, 15, ri % 10 + 48);Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPL / 16 + TMPH * 16;L1602_char(2, 14, (temp / 10 % 10+48));L1602_char(2, 15, (temp % 10+48));if(temp1<=u)
{
HEAT = 1;
第25华~共59华
while(Cmin < fen);
}
if(temp1<=d)
{
KEEP = 1;
HEAT = 0;
while(1);
}
}
华华华华子函,数
void keyscan()
{
uchar temp;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delayxms(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
{
nian++;
nian1++;
if(nian1==99) nian=nian1=0;
if(nian1==10) nian=0x10; //消除16华
制与10华制在DS1302及1602
if(nian1==20) nian=0x20; //上的华示
if(nian1==30) nian=0x30;
if(nian1==40) nian=0x40;
if(nian1==50) nian=0x50;
if(nian1==60) nian=0x60;
第26华~共59华
if(nian1==70) nian=0x70;
if(nian1==80) nian=0x80;
if(nian1==90) nian=0x90;
}
break;
case 0xde:
{
yue++;
yue1++;
if(yue1==13) yue=yue1=0;
if(yue1==10) yue=0x10;
}
break;
case 0xbe:
{
ri++;
ri1++;
if(ri1==31) ri=ri1=0;
if(ri1==10) ri=0x10;
if(ri1==20) ri=0x20;
if(ri1==30) ri=0x30;
}
break;
case 0x7e:
{
shi++;
shi1++;
if(shi1==24) shi=shi1=0;
if(shi1==10) shi=0x10;
if(shi1==20) shi=0x20;
}
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
第27华~共59华
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delayxms(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:
{
fen++;
fen1++;
if(fen1==60) fen=fen1=0;
if(fen1==10) fen=0x10;
if(fen1==20) fen=0x20;
if(fen1==30) fen=0x30;
if(fen1==40) fen=0x40;
if(fen1==50) fen=0x50;
}
break;
case 0xdd:
{
miao++;
miao1++;
if(miao1==60) miao=miao1=0;
if(miao1==10) miao=0x10;
if(miao1==20) miao=0x20;
第28华~共59华
if(miao1==30) miao=0x30;
if(miao1==40) miao=0x40;
if(miao1==50) miao=0x50;
}
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
Write_DS1302Init();
L1602_char(2, 1, shi1 / 10 % 10 + 48);L1602_char(2, 2, shi1 % 10 + 48);L1602_char(2, 3, '-');
L1602_char(2, 4, fen1 / 10 % 10 + 48);L1602_char(2, 5, fen1 % 10 + 48);L1602_char(2, 6, '-');
L1602_char(2, 7, miao1 / 10 % 10 + 48);L1602_char(2, 8, miao1 % 10 + 48);L1602_char(1, 8, nian1 / 10 % 10 + 48);L1602_char(1, 9, nian1 % 10 + 48);L1602_char(1, 10, '-');
L1602_char(1, 11, yue1 / 10 % 10 + 48);L1602_char(1, 12, yue1 % 10 + 48);L1602_char(1, 13, '-');
L1602_char(1, 14, ri1 / 10 % 10 + 48);L1602_char(1, 15, ri1 % 10 + 48);if(UP==0)
{
delayxms(20);
if(UP==0) u++;
while(!UP);
}
if(DOWN==0)
第29华~共59华
{
delayxms(20);
if(DOWN==0) d++;
while(!DOWN);
}
if(d>=u) d = u = 0;
L1602_char(1, 10, u /10 % 10 + 48);
L1602_char(1, 11, u % 10 + 48);
L1602_char(1, 12, d /10 % 10 + 48);
L1602_char(1, 13, d % 10 + 48);Cmin = fen1 + 1;
if(Cmin > 60)
{
Cmin = Cmin - 60;
}
}
DS18B20华、控制、写数初始化子函,void delay_1()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++)
;
}
void delay_2(uint N)
{
int i;
for(i=0; i
> i;
temp = temp & 0x01;
write_bit(temp);
delay_2(5);
}
}
主函,数
void main()
{
nian1=yue1=ri1=shi1=fen1=miao1=0;
nian=yue=ri=shi=fen=miao=0x00;
L1602_init();
L1602_string(1,1,"DATE 20");
L1602_string(2,9," ");
L1602_string(2,10,"TEM");
L1602_string(2,16,"C");
P1=0x0f;
P2 = 0x00;
while(1)
{
keyscan();
if(START==0)
{
Write_DS1302Init();
第32华~共59华
Run_DS1302();
}
}
}
参献考文,
[]余华存、曹国华华著.华片机原理及接口技华[].西安,西安华子科技大出学版社~1 M
2007
[]华华、华杰.华片机原理华用与[].北京:机械工华出版社~2 M 2005[]曹薇、华云敏.华片机原理及华用[].北京,中水国利水华出版社~3 M2004 []华华人.系列华片机华用子程序集华[].北京,华大出清学版社~ 4 MCS-51M1998 []华福学.华感器华用及其华路精华[].北京,北京华子工华出版社~5 M1991 []康华光.华子技华基华字部分——数[].北京:高等教育出版社,6 M2000[]李桂安、丁华信、田野.华工华子华践初步[].南京:华南大出学版社~7 M1999[8] 余华泉、李玉和华著.PROT华华演华[].北京,人民华华出版社~ELM2000
第33华~共59华
华,辞
最后华段的华程华华~是华大学学个四年所知华的一华合华用。其价华不低于华华华华~华华自我华华和肖金华老华的指华我成功的华华了烹华度控制的华华和究。温研
华华华华程华华华华的华华~个使我更加了解了华片机和C华言的知华~以及字、模华华数路的华用~提高了PROTEL的华用能力~在华华和解华华的华程中~决增强了自己的华手能力和分析能力。因华我华只有华华中出华的华践况清繁华华的情分析摸索~才能华看前方的迷华~走出自己的道路。任何华面的理华~在华与教条践面前都是华白无力的~华才是最践噪会好的老华。在华华的华华华程中我也看到了自己的粗心、急、知华的融华用能力不足等等的华华~本次华华华了我一及华华华华华~解自我华华的机。个决会
白华华隙~日月如梭。大四的第一个学学期的华程华华已华走入最后的华段。大的生活也即将来真会落幕~但华于我华~才是正踏入社工作、生活的华演。很很高心能华利的完成本华华的华华工作。华然华华华不上完美~华有多欠缺的地方需要改华~但华我到了多学很知华。
在华华的究华程中~感华研学帮老华和同华我的指华、助和支持~表示衷心的感华,在此~华肖金华老华的悉心华华教致以最衷心的感华.
第34华~共59华
致华人:冀凌波
2011年12月21日
附华,
附华一,源程序
#include
#include
#define uchar unsigned char#define uint unsigned int#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBEunsigned char TMPH,TMPL,Cmin;float tt;
void write_byte(uchar val);uchar Reset(void);
uchar read_byte(void);void delay_2(uint N);
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit SPEAKER = P1^2;
sbit T_CLK = P1^6;
sbit T_IO = P3^5;
sbit T_RST = P1^7;
sbit HEAT = P3^6;
sbit KEEP = P3^7;
sbit E = P2^7;
sbit RW = P2^6;
sbit RS = P2^5;
第35华~共59华
sbit DQ = P2^3; sbit START = P3^4; sbit DOWN = P3^3;sbit UP = P3^2;uchar miao,fen,shi,ri,yue,nian,miao1,fen1,shi1,ri1,yue1,nian1,xingqi,x,ii;
uint temp1,u,d;
void delay()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++);
}
void delayxms(uchar x){
int i,j;
for(i=x; i<0; i--)
for(j=120; j<0; j--);
}
void enable(uchar del){
P0 = del;
RS = 0;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
void write(uchar del){
P0 = del;
RS = 1;
RW = 0;
E = 0;
第36华~共59华
delay();
E = 1;
delay();
}
void L1602_init(void){
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
write(sign);
}
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
while(1)
{
if(*p == '\0') break;
write(*p);
p++;
}
}
void v_RTInputByte(uchar ucDa){
uchar i;
ACC = ucDa;
T_RST = 1;
第37华~共59华
for(i=8; i>0; i--)
{
T_IO = ACC0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
uchar uc_RTOutputByte(void)
{
uchar i;
T_RST = 1;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
T_IO=1;
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
void v_W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr);
_nop_();
_nop_();
v_RTInputByte(ucDa);
T_CLK = 1;
T_RST = 0;
}
uchar uc_R1302(uchar ucAddr)
{
uchar ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr);
第38华~共59华
_nop_();
_nop_();
ucDa = uc_RTOutputByte();
T_CLK = 1;
T_RST = 0;
return(ucDa);
}
void v_BurstW1302T(uchar *pSecDa){
uchar i;
v_W1302(0x8e, 0x00);
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbe);
for(i=8; i>0; i--)
{
v_RTInputByte(*pSecDa);
pSecDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstR1302T(uchar *pSecDa){
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
华华多字华华命令v_RTInputByte(0xbf); //0xbf:
for(i=8; i>0; i--)
{
华数据*pSecDa = uc_RTOutputByte(); //1Byte
pSecDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstW1302R(uchar *pReDa){
uchar i;
第39华~共59华
控制命令写操作v_W1302(0x8e,0x00); //,WP=0,
T_RST = 0;
T_CLK = 0;
T_RST = 1;
华华多字华写命令v_RTInputByte(0xfe); //0xbe:
寄存器据数for(i=31; i>0; i--) //31Byte
{
写数据v_RTInputByte(*pReDa); //1Byte
pReDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstR1302R(uchar *pReDa){
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
华华多字华华命令v_RTInputByte(0xff); //0xbf:
寄存器据数for(i=31; i>0; i--) //31Byte
{
华数据*pReDa = uc_RTOutputByte(); //1Byte
pReDa++;
}
T_CLK = 1;
T_RST = 0;
}
void v_Set1302(uchar *pSecDa){
uchar i;
uchar ucAddr = 0x80;
控制命令写操作v_W1302(0x8e, 0x00); //,WP=0,
for(i=7; i>0; i--)
{
秒 分 华 日 月 星期 年v_W1302(ucAddr, *pSecDa); //
pSecDa++;
ucAddr += 2;
}
控制命令写保华v_W1302(0x8e, 0x80); //,WP=1,}
第40华~共59华
void v_Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for(i=0; i<7; i++)
{
格式华秒 分 华 日 月 星期 年ucCurtime[i] = uc_R1302(ucAddr); //:
ucAddr += 2;
}
}
uchar dectobcd(uchar dec){
uchar bcd;
bcd = 0;
while(dec >= 10)
{
dec -= 10;
bcd++;
}
bcd <<= 4;
bcd |= dec;
return bcd;
}
uchar bcdtodec(uchar bcd){
uchar data1;
取低位data1 = bcd & 0x0f; //BCD4
剔除的最高位和低位。bcd = bcd & 0x70; //BCD4
data1 += bcd >> 1;
用位移代替乘法算运data1 += bcd >> 3; //
return data1;
}
void Write_DS1302Init(void){
v_W1302(0x8e,0);
写入秒v_W1302(0x80,miao); //
v_W1302(0x8e,0);
写入分v_W1302(0x82,fen); //
v_W1302(0x8e,0);
写入小华v_W1302(0x84,shi); //
第41华~共59华
v_W1302(0x8e,0);
写入日v_W1302(0x86,ri); //
v_W1302(0x8e,0);
写入月v_W1302(0x88,yue); //
v_W1302(0x8e,0);
写入星期v_W1302(0x8a,xingqi);//
v_W1302(0x8e,0);
写入年v_W1302(0x8c,nian); //
}
void Run_DS1302(void)
{
while(1)
{
v_W1302(0x8f, 0);
华出中的秒miao = bcdtodec(uc_R1302(0x81)); //DS1302
v_W1302(0x8f, 0);
华出中的分fen = bcdtodec(uc_R1302(0x83)); //DS1302
v_W1302(0x8f, 0);
华出中的小华shi = bcdtodec(uc_R1302(0x85)); //DS1302
v_W1302(0x8f, 0);
华出中的日ri = bcdtodec(uc_R1302(0x87)); //DS1302
v_W1302(0x8f, 0);
华出中的月yue = bcdtodec(uc_R1302(0x89)); //DS1302
v_W1302(0x8f, 0);
华出中的年nian = bcdtodec(uc_R1302(0x8d)); //DS1302
L1602_char(1, 1, shi / 10 % 10 + 48);
L1602_char(1, 2, shi % 10 + 48);
L1602_char(1, 3, '-');
L1602_char(1, 4, fen / 10 % 10 + 48);
L1602_char(1, 5, fen % 10 + 48);
L1602_char(1, 6, '-');
L1602_char(1, 7, miao / 10 % 10 + 48);
L1602_char(1, 8, miao % 10 + 48);
L1602_char(2, 8, nian / 10 % 10 + 48);
L1602_char(2, 9, nian % 10 + 48);
L1602_char(2, 10, '-');
L1602_char(2, 11, yue / 10 % 10 + 48);
L1602_char(2, 12, yue % 10 + 48);
L1602_char(2, 13, '-');
L1602_char(2, 14, ri / 10 % 10 + 48);
L1602_char(2, 15, ri % 10 + 48);
Reset();
第42华~共59华
write_byte(jump_ROM);write_byte(start);Reset();
write_byte(jump_ROM);write_byte(read_EEROM);TMPL = read_byte();TMPH = read_byte();temp1 = TMPL / 16 + TMPH * 16;
L1602_char(1, 14, (temp1 / 10 % 10+48));
L1602_char(1, 15, (temp1 % 10+48));
if(temp1<=u)
{
HEAT = 1;
while(Cmin < fen);}
if(temp1<=d)
{
KEEP = 1;
HEAT = 0;
while(1);
}
}
}
void keyscan()
{
uchar temp;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delayxms(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
{
nian++;
第43华~共59华
nian1++;
if(nian1==99) nian=nian1=0;
消除华制与华制在if(nian1==10) nian=0x10; //1610
及DS13021602
上的华示if(nian1==20) nian=0x20; //BUG
if(nian1==30) nian=0x30;if(nian1==40) nian=0x40;if(nian1==50) nian=0x50;if(nian1==60) nian=0x60;if(nian1==70) nian=0x70;if(nian1==80) nian=0x80;if(nian1==90) nian=0x90;}
break;
case 0xde:
{
yue++;
yue1++;
if(yue1==13) yue=yue1=0;
if(yue1==10) yue=0x10;}
break;
case 0xbe:
{
ri++;
ri1++;
if(ri1==31) ri=ri1=0;
if(ri1==10) ri=0x10;
if(ri1==20) ri=0x20;
if(ri1==30) ri=0x30;}
break;
case 0x7e:
{
shi++;
shi1++;
if(shi1==24) shi=shi1=0;
if(shi1==10) shi=0x10;
if(shi1==20) shi=0x20;}
break;
}
while(temp!=0xf0)
第44华~共59华
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delayxms(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:
{
fen++;
fen1++;
if(fen1==60) fen=fen1=0;
if(fen1==10) fen=0x10;
if(fen1==20) fen=0x20;
if(fen1==30) fen=0x30;
if(fen1==40) fen=0x40;
if(fen1==50) fen=0x50;
}
break;
case 0xdd:
{
miao++;
miao1++;
if(miao1==60) miao=miao1=0;
if(miao1==10) miao=0x10;
if(miao1==20) miao=0x20;
if(miao1==30) miao=0x30;
if(miao1==40) miao=0x40;
第45华~共59华
if(miao1==50) miao=0x50;
}
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
Write_DS1302Init();
L1602_char(1, 1, shi1 / 10 % 10 + 48);L1602_char(1, 2, shi1 % 10 + 48);L1602_char(1, 3, '-');
L1602_char(1, 4, fen1 / 10 % 10 + 48);L1602_char(1, 5, fen1 % 10 + 48);L1602_char(1, 6, '-');
L1602_char(1, 7, miao1 / 10 % 10 + 48);L1602_char(1, 8, miao1 % 10 + 48);L1602_char(2, 8, nian1 / 10 % 10 + 48);L1602_char(2, 9, nian1 % 10 + 48);L1602_char(2, 10, '-');
L1602_char(2, 11, yue1 / 10 % 10 + 48);L1602_char(2, 12, yue1 % 10 + 48);L1602_char(2, 13, '-');
L1602_char(2, 14, ri1 / 10 % 10 + 48);L1602_char(2, 15, ri1 % 10 + 48);
if(UP==0)
{
delayxms(20);
if(UP==0) u++;
while(!UP);
}
if(DOWN==0)
{
delayxms(20);
if(DOWN==0) d++;
while(!DOWN);
}
if(d>=u) d = u = 0;
L1602_char(1, 10, u /10 % 10 + 48);
第46华~共59华
L1602_char(1, 11, u % 10 + 48);
L1602_char(1, 12, d /10 % 10 + 48);
L1602_char(1, 13, d % 10 + 48);
Cmin = fen1 + 1;
if(Cmin > 60)
{
Cmin = Cmin - 60;
}
}
void delay_1()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++);
}
void delay_2(uint N){
int i;
for(i=0; i> i;
temp1 = temp1 & 0x01;
write_bit(temp1);
delay_2(5);
}
}
第48华~共59华
void main()
{
nian1=yue1=ri1=shi1=fen1=miao1=0;
nian=yue=ri=shi=fen=miao=0x00;
L1602_init();
L1602_string(2,1,"DATE 20");
L1602_string(1,9," ");
L1602_string(1,16,"C");
P1=0x0f;
P2 = 0x00;
while(1)
{
keyscan();
if(START==0)
{
Write_DS1302Init();
Run_DS1302();
}
}
}
第49华~共59华
附华二,程序华华华片
目前华定加华华华华分华~加华度温至度华始保低温至度再次加华~目前度华温度。1030159
第50华~共59华
附华三华物照片
由于有加华保模华没温故控制华华器华作~于华上无法反华其华作~望老华华华。
第51华~共59华