| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

万年历实训报告

文***享

贡献于2022-10-04

字数:22238


物理机电学院课程设计报告



课程名称: 电子系统课程设计
专业班级: 12电(2)
学 号:
学生姓名:
指导教师:
完成时间: 2015317—2015616
报告成绩:

评阅意见:






评阅教师 日期








设计课题题目: 带温度简易时钟
丶设计务求
(1)具备显示年月日星期时分秒键盘输入功
(2)具备温度测量功
(3)年月日等日期调
(4)具备闹钟功
二系统设计方案
1控制部分方案
网查阅凌阳16位单片机设计凌阳16位单片机丰富中断源时基方便实验设计准确度相高C语言汇编兼容编程环境方便实现递调IO口功较强方便凌阳16位单片机做控制器特色编程音频处理完成语音录制播放识方便设计进行扩展设计更加完善成相低
2显示部分方案
网查阅液晶显示采8段数码济实惠效果加入语音报时功操作较液晶显示说然略显繁琐总体做较性化LED数码显示
3系统基方案
(1)单片机芯片方案:
网查阅AT89S52片ROM全采Flash ROM3V超低压工作时MCS51系列单片机完全该芯片部存储器8KB ROM 存储空间样具89C51功具线编程擦技术电路进行调试时程序错误修改程序新增功需烧入程序时需芯片次拔插会芯片造成损坏
(2)显示模块方案
网查阅采LED数码动态扫描LED数码价格适中显示数字合适采动态扫描法单片机连接时占单片机口线少
(3)时钟芯片方案
网查阅采DS1302时钟芯片实现时钟DS1302芯片种高性时钟芯片动秒分时日周月年闰年补偿年进行计数精度高位RAM做数暂存区工作电压25V~55V范围25V时耗电300nA
(4)温度传感器选择方案证
方案:热敏电阻作传感器热敏电阻相应阻值相串联分压利热敏电阻阻值温度变化变化特性采两电阻变化分压值进行AD转换方案需AD转换电路增加硬件成热敏电阻感温特性曲线严格线性会产生较测量误差
方案二:采数字式温度传感器DS18B20传感器数字式传感器仅需条数线进行数传输易单片机连接AD模块降低硬件成简化系统电路外数字式温度传感器具测量精度高测量范围广等优点
单片机原理
单片机简化微型计算机CPU中身带存储器ROMRAMCPU片总线IC(集成电路)技术电路通特殊工艺做块硅基片封装成芯片CPU片外存储器等等
单片机CPU晶振存储器址锁存器逻辑门七段译码器(显示器)钮扩展芯片接口等通PCB工艺做环氧树脂板样完整单片微型计算机
1 LED显示数码
常见LED显示具清晰明亮特点显示接口绝数单片机应系统必备部件
发光二极组成显示器单片机应产品中常廉价输出设备干发光二极定规律排列成某发光二极导通时相应点笔画点亮控制组合二极导通显出种字符
显示器结构
常7段显示器结构图示发光二极阳极连起称阳极显示器阴极连起成阴显示器1位显示器8发光二极组成中7发光二极a~g控制7笔画亮暗控制数点亮暗种笔画七段显示器显示字符较少字符形状失真控简单方便

电路设计框图

工作原理:STC89C52控制系统单片机接受时钟电路温度传感器信号LCD显示电路中显示出通键电路显示时间闹钟报警温度进行设置
三单元电路分析设计
1.原理分析
(1)复位电路晶振电路(电路图图二)
复位电路电阻R1 KΩ电容C10uf键组成电动复位程序跑飞时单片机复位晶振电路12M晶振30pf电容组成
参数计算:震荡周期1震荡频率机器周期震荡周期*12系统复位时间t应该2us (t2*(112)*122us)STC89C52规格书中关DC特性描述中知道Reset Pin电压超Min07Vcc时Reset Pin会认高电事先假设系统电压5VVcc里成5V 果 Reset Pin电压07Vcc35V成Reset Pin高电果超35V电持续时间超2uS系统会复位然计算RST_H处 电 位考虑流入Reset Pin 电流该 电 路 阶RC电路电容两端暂态电流电压关系式:

设Reset pin 电压: 34V时t0357RC仅t0357RC≥2us时系统会复位满足条件RC≧R1KΩC10uf符合求
STC89C52单片机核心选12MHZ晶振晶振频率越高单片机运行速度越快考虑单片机运行速度快会导致存储器求会变高12MHZ晶振佳选择晶振电路电容没固定值外接电容会影响振荡器频率高低振荡器稳定性起振快速性选择30pf电容作起振电容
复位晶振电路图示

键电路图

显示电路LCD1602模块构成LCD1602液晶屏5V电压驱动带背光显示两行行16字符显示汉字液晶12端电源1516背光源防止直接加5V烧坏背光灯15脚串联1K电阻限流液晶3端液晶度调节端通10K变位器调节液晶显示度液晶4端液晶控制器写数写命令选择端接单片机P23口液晶5端读写选择端液晶中读取数写入命令显示数端始终选择写状态低电接液晶6端信号操作时必须信号接单片机P25口

温度传感器
温度检测电路数字温度传感器DS18B20构成传统热敏电阻等测温元件相直接读出测温度根实际求通简单编程实现912位数字值读数方式设计中DS18B20温度传感器进行环境温度采集转化单片机P20脚接DS18B20IO口脚作数读入写出口

温度传感器
时钟电路
时钟电路DS13026pf电容32768M晶振组成时钟芯片DS1302单片机STC89C52接口3条线完成单片机STC89C52P10时钟芯片数传输端相连P11作DS1302输入时钟SCLK控制端P12控制DS1302复位输入端DS1302接标准32768KHZ石英晶体

述完成Proturs中进行仿真仿真结果:


实验设计结果仿真结果致

四软件部分设计(部分程序框图)
软件部分函数DS1302ds18B20LCD1602text五程序部分组成函数text驱动文件函数程序(具体程序见附页)
void main()
{
IE0X82 开定时中断
TMOD0X01 选择定时器0工作方式1
TR00 启动定时器0
IntDS1302() 初始化DS1302
delay1ms(1)
Lcd_Int() 1602液晶初始化
delay1ms(2)
displaystar() 显示欢迎界面
displaymainpart() 显示部分(变化)
while(1)
{
display_Time( )
Set( )
if(ADD0)
{
Write_com(0x01)
delay1ms(5)
Temperature()
Write_com(0x01)
displaymainpart()
}
if((hourshoura)&&(minutesminutea)&&(seconds0))
{
if(alarmmode1)
{
Write_com(0x01)
delay1ms(5)
Write_Address(0x03)
Write_Date('T')
Write_Date('I')
Write_Date('M')
Write_Date('E')
Write_Address(0x08)
Write_Date('U')
Write_Date('P')
Write_Date('')
delay1ms(5)
while(1)
{
baojing(1)
if(CANL0)
{
Write_com(0x01)
delay1ms(5)
displaymainpart()
break
}
}
}
}
}

}
程序框图图:


实现功:程序功调DS1302DS18B20LCD1602键扫描四模块函数实现整系统运行功实现
LCD1602模块液晶显示模块驱动程序调该模块程序液晶显示屏显示单片机DS1302DS18B20中读取时间温度值
DS18B20模块温度传感器驱动程序调该模块程序读出刻温度值
DS1302模块时钟芯片驱动程序实现单片机DS1302时钟芯片间通信调里面程序实现时间初始化调整时间写入时钟芯片实现单片机时钟芯片中读取出刻时间者调整时间
键扫描模块实现键扫描时间温度显示通键扫描实现时间调整
五丶系统测试结果
功测试实际电路测试前先软件仿真仿真概整电路功设计基功实现LCD1602显示时间温度键设置复位电路电路复位仿真软件实现STC89C52开发板载程序然安装设计实际电路中LCD1602DS18B20DS1302器件安装然通电测试实际电路中功开启总开关LCD1602显示时间温度然调节K1K2K3K4键时间温度进行设置K1键选择设置位置K2键进行+操作K3键进行—操作K4键进行状态确定K5键进行状态复位复位键系统动复位通实际电路中测试软件仿真实现结果基完成整设计
六丶心体会
次电路设计中开始时候原理框架画出确定选器件否符合求然根器件写出程序进行仿真仿真成功开始画PCB时画PCB时没分配布局导致制板完成发现LCD1602单片机STC89C52距离造成调制程中键温度传感器操作时方便电路板功实现完全觉测试必须仅找出设计问题缺陷重新复设计东西知识点时提高设计力电路分析力时软件编程方面更高提高编程力加强学知识提高巩固
七参考文献
[1]郭天祥51单片机c语言教程 电子工业出版社2009
[2]边春元C51单片机典型模块设计应[M]北京:机械工业出版社2008
[3]高 歌Altium Designer电子设计应教程清华学出版社2011
[4]戴仙金51单片机c语言程序开发实例清华学出版社2008
[5]边春元C51单片机典型模块设计应[M]北京:机械工业出版社2008

附页
实验具体程序:
#include
#include
unsigned char code displaywelcome[]{ Welcome To My Lcd Timer}欢迎界面
unsigned char code displaywish[]{ Happy Every Day ^_^} 欢迎界面
unsigned char code overtemperature[]{OVERTEMPERATURE}
unsigned char code digit[]{0123456789} 数字代码
unsigned char modeTHTLTNTDlengthtempswitchMaxtemp40amodealarmmodeminuteshours
minuteasecondshoura12
sbit SCLKP1^0 DS1302时钟输入
sbit DATEP1^1 DS1302数输入
sbit RESTP1^2 DS1302复位端口
sbit SETP1^4 DS1302设置模式选择位
sbit ADDP1^5 增加
sbit REDP1^6 减
sbit CANLP1^7
void delay1ms(int i)1毫秒延时
{
int jk
while(i)
for(j76j>1j)
for(k29k>1k)
}
void delaynus(unsigned char n) 延时干微秒
{
unsigned char i
for(i0i}
***********蜂鸣器模块************
sbit beepP3^6 位定义定义P6位fmp
void dely500(void)
{
unsigned char i
for(i250i>0i)
{
_nop_()
}
}
void baojing(unsigned char n)
{
unsigned char xi
while(n)
{
for(i0i<5i++)
{
for(x0x<200x++)
{
beep~beep
dely500()
}
}
for(i0i<3i++)
{
for(x0x<200x++)
{
beep~beep
dely500()
dely500()
}
}
}
}
*******DS1302模块*************
void Write1302(unsigned char date)1302写数
{
unsigned char i
SCLK0
delaynus(2)
for(i0i<8i++)
{
DATEdate&0x01
SCLK1
delaynus(2)
SCLK0
delaynus(2)
date>>1

}
}
void WriteSet1302(unsigned char cmdunsigned char date) 根相应命令输入相应数
{
REST0
SCLK0
REST1
Write1302(cmd)
delaynus(5)
Write1302(date)
SCLK1
REST0
}
unsigned char Read1302(void) 读取1302数
{
unsigned char idate
delaynus(2)
for(i0i<8i++)
{
date>>1
if(DATE1)
date|0x80
SCLK1
delaynus(2)
SCLK0
delaynus(2)
}
return date
}
unsigned char ReadSet1302(unsigned char cmd)根命令读取1302相应值
{
unsigned char date
REST0
SCLK0
REST1
Write1302(cmd)
delaynus(2)
dateRead1302()
SCLK1
REST0
return date
}
void IntDS1302(void) DS1302初始化
{
unsigned char flag

flag ReadSet1302(0x81)
if(flag&0x80) { 判断时钟芯片否关闭
WriteSet1302(0x8E0x00) 根写状态寄存器命令字写入保护指令
WriteSet1302(0x80((010)<<4|(010))) 根写秒寄存器命令字写入秒初始值
WriteSet1302(0x82((010)<<4|(010))) 根写分寄存器命令字写入分初始值
WriteSet1302(0x84((010)<<4|(010))) 根写时寄存器命令字写入时初始值
WriteSet1302(0x86((010)<<4|(010))) 根写日寄存器命令字写入日初始值
WriteSet1302(0x88((010)<<4|(010))) 根写月寄存器命令字写入月初始值
WriteSet1302(0x8c((1010)<<4|(1010))) 根写年寄存器命令字写入年初始值
WriteSet1302(0x900xa5) 开充电功 选择2K电阻充电方式
WriteSet1302(0x8E0x80) 根写状态寄存器命令字写入保护指令
}
}
***************液晶显示模块*****************
sbit RSP2^5
sbit RWP2^6
sbit EP2^7
sbit BFP0^7
*液晶忙检测*
bit BusyTest(void)
{
bit result
RS0
RW1
E1
_nop_()
_nop_()
_nop_()
resultBF
_nop_()
_nop_()
_nop_()
E0
return result
}
*写指令*
void Write_com(unsigned char command)
{
while(BusyTest()0)
RS0
RW0
E0
_nop_()
_nop_()
_nop_()
P0command
_nop_()
_nop_()
_nop_()
E1
_nop_()
_nop_()
_nop_()
E0
}
*写址*
void Write_Address(unsigned char address)
{
Write_com(address|0x80)
delay1ms(1)
}
*写数*
void Write_Date(unsigned char date)
{
RS1
RW0
E0
_nop_()
_nop_()
_nop_()
P0date
_nop_()
_nop_()
_nop_()
E1
_nop_()
_nop_()
_nop_()
E0
delay1ms(1)
}
*初始化*
void Lcd_Int(void)
{
Write_com(0x38)
delay1ms(1)
Write_com(0x38)
delay1ms(1)
Write_com(0x06)
delay1ms(1)
Write_com(0x0c)
delay1ms(1)
Write_com(0x01)
}
void displaymainpart(void)显示液晶部分(变化部分)
{
Write_Address(0x01)
delay1ms(1)
Write_Date('D')
Write_Date('A')
Write_Date('T')
Write_Date('E')
Write_Date('')
delay1ms(1)
Write_Address(0x0A)
delay1ms(1)
Write_Date('')
Write_Address(0x0D)
Write_Date('')
Write_Address(0x42)
Write_Date('T')
Write_Date('I')
Write_Date('M')
Write_Date('E')
Write_Date('')
Write_Address(0x4A)
Write_Date('')
Write_Address(0x4D)
Write_Date('')
Write_Address(0x06)
Write_Date('2')
Write_Date('0')
}
void display_Second(unsigned char second) 液晶显示秒
{
unsigned char ij
isecond10
jsecond10
Write_Address(0x4E)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_Minute(unsigned char minute) 液晶显示分
{
unsigned char ij
iminute10
jminute10
Write_Address(0x4B)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_Hour(unsigned char hour) 液晶显示时
{
unsigned char ij
ihour10
jhour10
Write_Address(0x48)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_Day(unsigned char day) 液晶显示日
{
unsigned char ij
iday10
jday10
Write_Address(0x0E)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_Month(unsigned char month) 液晶显示月
{
unsigned char ij
imonth10
jmonth10
Write_Address(0x0B)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_Year(unsigned char year) 液晶显示年
{
unsigned char ij
iyear10
jyear10
Write_Address(0x08)
Write_Date(digit[i])
Write_Date(digit[j])
delay1ms(1)
}
void display_houra(unsigned char x) 闹钟时部分显示
{
unsigned char ij
ix10
jx10
Write_Address(0x44)
Write_Date(digit[i])
Write_Date(digit[j])
}
void display_minutea(unsigned char x)闹钟分钟部分显示
{
unsigned char ij
ix10
jx10
Write_Address(0x47)
Write_Date(digit[i])
Write_Date(digit[j])
}
void display_Time(void) 显示实时时间
{
unsigned char valuedaymonthyear
Write_com(0x0c)
valueReadSet1302(0x81)
seconds(((value&0x70)>>4)*10+(value&0x0f))
display_Second(seconds)
valueReadSet1302(0x83)
minutes(((value&0x70)>>4)*10+(value&0x0f))
display_Minute(minutes)
valueReadSet1302(0x85)
hours(((value&0x70)>>4)*10+(value&0x0f))
display_Hour(hours)
valueReadSet1302(0x87)
day(((value&0x70)>>4)*10+(value&0x0f))
display_Day(day)
valueReadSet1302(0x89)
month(((value&0x70)>>4)*10+(value&0x0f))
display_Month(month)
valueReadSet1302(0x8D)
year(((value&0xf0)>>4)*10+(value&0x0f))
display_Year(year)
}
void displaystar(void) 显示欢迎界面
{
unsigned char ij
Write_Address(0x0f)
while(displaywelcome[i]'\0')
{
Write_Date(displaywelcome[i])
i++
delay1ms(1)
}
i0
Write_Address(0x4f)
while(displaywish[i]'\0')
{
Write_Date(displaywish[i])
i++
delay1ms(1)
}
j40
while(j)
{
Write_com(0x18)循环左移
delay1ms(700)
}
Write_com(0x01)
delay1ms(10)
}
void gbdisplay(unsigned char address) 时间调整时光标闪烁
{
Write_Address(address)
delay1ms(5)
Write_com(0x0f)
delay1ms(5)
}
void displaymaxt(unsigned char x) 显示温度
{
unsigned char ijk
Write_com(0x0c)
delay1ms(2)
Write_Address(0x44)
ix100
jx10
kx10
Write_Date(digit[i])
Write_Date(digit[j])
Write_Date(digit[k])
}
*****************时间调整部分*********************
void hourset(void) 调时
{
unsigned char timevaluehour
delay1ms(500) 防止次触发
WriteSet1302(0x8e0x00)写保护掉确保正常调整数值写入DS1302
timevalueReadSet1302(0x85) 读取时数值
hour(((timevalue&0x70)>>4)*10+(timevalue&0x0f))
while(1)
{

if(ADD0)
{
delay1ms(50)
if(ADD0)
{
hour++
delay1ms(300)
while(ADD0)
}
}
if(RED0)
{
delay1ms(50)
if(RED0)
{
hour
delay1ms(300)
if(hour0) hour23
while(RED0)
}
}
timevalue(((hour)10)<<4|(hour10))
WriteSet1302(0x84timevalue)
delay1ms(1)
display_Hour(hour)
Write_Address(0x49)
delay1ms(5)
if(hour>24) hour0
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void minuteset(void) 调分
{
unsigned char timevalueminute
delay1ms(500)
WriteSet1302(0x8e0x00)
timevalueReadSet1302(0x83)
minute(((timevalue&0x70)>>4)*10+(timevalue&0x0f))
while(1)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
minute++
if(minute>60) timevalue0
while(ADD0)
}
}
if(RED0)
{
delay1ms(10)
if(RED0)
{
minute
delay1ms(300)
if(minute0) minute59
while(RED0)
}
}
timevalue((minute10)<<4|(minute10))
WriteSet1302(0x82timevalue)
delay1ms(1)
display_Minute(minute)
Write_Address(0x4c)
delay1ms(5)
if(minute>60) minute0
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void secondset(void) 秒零
{
unsigned char second
delay1ms(500)
WriteSet1302(0x8e0x00)
while(1)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
second0
WriteSet1302(0x800x00)
while(ADD0)
}
}
delay1ms(1)
display_Second(second)
Write_Address(0x4f)
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void yearset(void) 调年
{
unsigned char datevalueyear
delay1ms(500)
WriteSet1302(0x8e0x00)
datevalueReadSet1302(0x8d)
year(((datevalue&0x70)>>4)*10+(datevalue&0x0f))
while(1)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
year++
while(ADD0)
}
}
if(RED0)
{
delay1ms(10)
if(RED0)
{
year
delay1ms(300)
while(RED0)
}
}
datevalue((year10)<<4|(year10))
WriteSet1302(0x8cdatevalue)
delay1ms(5)
display_Year(year)
delay1ms(5)
Write_Address(0x09)
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void monthset(void) 调月
{
unsigned char datevaluemonth
delay1ms(500)
WriteSet1302(0x8e0x00)
datevalueReadSet1302(0x89)
month(((datevalue&0x70)>>4)*10+(datevalue&0x0f))
while(1)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
month++
if(month>12) month1
while(ADD0)
}
}
if(RED0)
{
delay1ms(10)
if(RED0)
{
month
delay1ms(300)
if(month0) month12
while(RED0)
}
}
datevalue((month10)<<4|(month10))
WriteSet1302(0x88datevalue)
delay1ms(1)
display_Month(month)
Write_Address(0x0c)
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void dayset(void) 调日
{
unsigned char datevalueday
delay1ms(500)
WriteSet1302(0x8e0x00)
datevalueReadSet1302(0x87)
day(((datevalue&0x70)>>4)*10+(datevalue&0x0f))
while(1)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
day++
if(day>31) day1
while(ADD0)
}
}
if(RED0)
{
delay1ms(10)
if(RED0)
{
day
delay1ms(300)
if(day0) day31
while(RED0)
}
}
datevalue((day10)<<4|(day10))
WriteSet1302(0x86datevalue)
delay1ms(1)
display_Day(day)
Write_Address(0x0f)
delay1ms(5)
if(CANL0)
{
mode0
Write_com(0x0c)
break
}
if(SET0) break
}
WriteSet1302(0x8e0x80)
}
void alarmhourset(void) 闹钟时调整
{
unsigned char value
valuehoura
while(1)
{
if(ADD0)
{
delay1ms(20)
if(ADD0)
{
Write_com(0x0c)
delay1ms(5)
value++
if(value>23) value0
while(ADD0)
}
}
if(RED0)
{
delay1ms(20)
if(RED0)
{
value
if(value0) value23
while(RED0)
}
}
houravalue
display_houra(houra)
gbdisplay(0x45)
if(CANL0)
{
delay1ms(500)
break
}
}
}
void alarmminuteset(void) 闹钟分钟调整
{
while(1)
{
if(ADD0)
{
delay1ms(20)
if(ADD0)
{
minutea++
if(minutea>59) minutea0
while(ADD0)
}
}
if(RED0)
{
delay1ms(20)
if(RED0)
{
minutea
if(minutea0) minutea59
while(RED0)
}
}
display_minutea(minutea)
gbdisplay(0x48)
if(CANL0)
{
delay1ms(500)
break
}
}
}
void TimeSet(void) 时间调整函数
{
display_Time()
if(SET0)
{
delay1ms(10)
if(SET0)
{
mode++
delay1ms(20)
switch(mode)
{
case(1){gbdisplay(0x48)hourset() delay1ms(500)} break
case(2){gbdisplay(0x4c)minuteset()delay1ms(500)} break
case(3){gbdisplay(0x4f)secondset()delay1ms(500)} break
case(4){gbdisplay(0x09)yearset()delay1ms(500)} break
case(5){gbdisplay(0x0c)monthset()delay1ms(500)} break
case(6){gbdisplay(0x0f)dayset()delay1ms(500)} break
}
if(mode7) mode0
}
}
}
***************显示温度模块********************
unsigned char code displayexplain[]{Digit thermometer}
unsigned char code displayerror[]{DS18B20 ERROR}
unsigned char code displayerror1[]{PLEASE CHECK }
unsigned char code displaypart1[]{WenDu}
unsigned char code displaypart2[]{Cent}
unsigned char flag
**********************操作DS18B20模块***************************
sbit DQP3^3
unsigned char time
**********************DS18B20初始化****************************
bit IntDS18B20(void)
{
bit temp
DQ1
for(time0time<2time++)
DQ0
for(time0time<200time++)
DQ1
for(time0time<10time++)
tempDQ
for(time0time<200time++)
return temp
}
**************************读DS18B20**********************
unsigned char ReadDS18B20(void)
{
unsigned char i
unsigned char dat
for(i0i<8i++)
{
DQ1
_nop_()
DQ0
_nop_()
DQ1
for(time0time<2time++)
dat>>1
if(DQ1)
datdat|0x80
else
datdat|0x00
for(time0time<10time++)
}
return dat
}
*********************DS18B20写数**************************
void WriteDS18B20(unsigned char date)
{
unsigned char i
for(i0i<8i++)
{
DQ1
_nop_()
DQ0
DQdate&0x01
for(time0time<10time++)
DQ1
for(time0time<1time++)
date>>1

}
for(time0time<4time++)
}
*******************读取温度做准备************************
void ReadyreadDS18B20(void)
{
IntDS18B20()
WriteDS18B20(0XCC)
WriteDS18B20(0X44)
delay1ms(200)
IntDS18B20()
WriteDS18B20(0XCC)
WriteDS18B20(0XBE)

}
*************1602液晶显示相关信息模块**********************
****************未检测DS18B20时显示信息模块****************
void Display_Error(void)
{
unsigned char i0
Write_Address(0x00)
while(displayerror[i]'\0')
{
Write_Date(displayerror[i])
i++
delay1ms(100)
}
delay1ms(5)
i0
Write_Address(0x40)
while(displayerror1[i]'\0')
{
Write_Date(displayerror1[i])
i++
delay1ms(100)
}
delay1ms(3000)
}
*************温度显示模块****************
void Display_Explain(void)
{
unsigned char i0
Write_Address(0x00)
delay1ms(5)
while(displayexplain[i]'\0')
{
Write_Date(displayexplain[i])
i++
delay1ms(5)
}
i0
Write_Address(0x40)
while(displaypart1[i]'\0')
{
Write_Date(displaypart1[i])
i++
delay1ms(5)
}
i0
Write_Address(0x4C)
while(displaypart2[i]'\0')
{
Write_Date(displaypart2[i])
i++
delay1ms(5)
}
Write_Address(0x49)
Write_Date('')
delay1ms(5)
}
*********************显示温度整数部分*************************
void Display_Integer(unsigned char x)
{
unsigned char ijk
ix100
jx10010
kx10
Write_Address(0x46)
if(flag1) Write_Date('')
Write_Date(digit[i])
Write_Date(digit[j])
Write_Date(digit[k])
delay1ms(50)
}
************显示温度数部分*********************
void Display_Decimal(unsigned char x)
{
Write_Address(0x4A)
delay1ms(5)
Write_Date(digit[x])
delay1ms(50)
}
void displayovert(void)
{
unsigned char i
Write_com(0x01)
delay1ms(10)
Write_Address(0x03)
delay1ms(10)
Write_Date('W')
Write_Date('A')
Write_Date('R')
Write_Date('N')
Write_Date('I')
Write_Date('N')
Write_Date('G')
Write_Date('')
Write_Address(0x40)
while(overtemperature[i]'\0')
{
Write_Date(overtemperature[i])
i++
delay1ms(10)
}
}
*******************温度函数********************
void Temperature(void)
{
unsigned char i
delay1ms(5)
if(IntDS18B20()0) Display_Error()
else
{
delay1ms(1)
Write_com(0x01)
delay1ms(5)
Display_Explain()
for(length50length>0length)
{
for(i0i<6i++)
{
flag0
ReadyreadDS18B20()
TLReadDS18B20()
THReadDS18B20()
if((TH&0XF8)0X00)
{
flag1
TL~TL
TH~TH
TL+1
if(TL>255) TH+1
TNTH*16+TL16
TD(TL16)*1016
}
TNTH*16+TL16
TD(TL16)*1016
Display_Integer(TN)
Display_Decimal(TD)
delay1ms(10)
}
if(tempswitch1)
{
if(TN>Maxtemp)
{
Write_Address(0x03)
delay1ms(5)
displayovert()
while(1)
{
baojing(1)
if(CANL0)
{
Write_com(0x01)
delay1ms(5)
break
}
}
}
}
if(CANL0) break
}
}
}
void tempset(void)
{
if(ADD0)
{
delay1ms(10)
if(ADD0)
{
Maxtemp++
while(ADD0)
}
}
if(RED0)
{
delay1ms(10)
if(RED0)
{
Maxtemp
while(RED0)
}
}
}
void Maxtempset(void) 高温报警设置
{
Write_com(0x01)
delay1ms(10)
Write_Address(0x03)
delay1ms(10)
Write_Date('T')
Write_Date('E')
Write_Date('M')
Write_Date('P')
Write_Address(0x09)
Write_Date('S')
Write_Date('E')
Write_Date('T')
Write_Address(0x40)
Write_Date('M')
Write_Date('A')
Write_Date('X')
Write_Date('')
while(1)
{
if(SET0)
{
delay1ms(20)
if(SET0)
{
Write_Address(0x4e)
Write_com(0x0f)
while(1)
{
if(ADD0)
{
delay1ms(20)
if(ADD0)
{
Write_Address(0x4b)
delay1ms(5)
Write_Date('O')
Write_Date('N')
Write_Date(' ')
tempswitch1
}
}
if(RED0)
{
delay1ms(20)
if(RED0)
{
Write_Address(0x4b)
Write_Date('O')
Write_Date('F')
Write_Date('F')
tempswitch0
}
}
if(CANL0)
{
delay1ms(500)
break
}
}
}
}
if(tempswitch1)
{
Write_Address(0x4b)
Write_Date('O')
Write_Date('N')
Write_Date(' ')
tempset()
displaymaxt(Maxtemp)
if(CANL0)
{
Write_com(0x01)
displaymainpart()
break
}
}
if(tempswitch0)
{
Write_com(0x0c)
Write_Address(0x4b)
Write_Date('O')
Write_Date('F')
Write_Date('F')
}
if(CANL0)
{
Write_com(0x01)
displaymainpart()
break
}
}
}
void alarmswitchset(void)
{
while(1)
{
if(ADD0)
{
delay1ms(100)
if(ADD0)
{
alarmmode1
Write_Address(0x4c)
Write_Date('O')
Write_Date('N')
Write_Date(' ')
}
}
if(RED0)
{
alarmmode0
Write_Address(0x4c)
Write_Date('O')
Write_Date('F')
Write_Date('F')
}
if(CANL0)
{
delay1ms(500)
break
}
}
}
**************** 设置模块 ******************
void Set(void)
{
if(SET0)
{
delay1ms(10)
if(SET0)
{
Write_Address(0x40)
Write_Date('T')
Write_com(0x0f)
delay1ms(1000)
Write_com(0x0c)
while(1)
{
TimeSet()
if(ADD0)
{
delay1ms(20)
if(ADD0)
{
Write_com(0x01)
Write_Address(0x00)
delay1ms(5)
Write_Date('S')
delay1ms(10)
Maxtempset()
}
}
if(RED0)
{
delay1ms(20)
if(RED0)
{
Write_com(0x01)
delay1ms(5)
Write_Address(0x02)
Write_Date('A')
Write_Date('L')
Write_Date('A')
Write_Date('R')
Write_Date('M')
Write_Address(0x09)
Write_Date('S')
Write_Date('E')
Write_Date('T')
Write_Address(0x46)
Write_Date('')
display_houra(houra)
display_minutea(minutea)
if(alarmmode1)
{
Write_Address(0x4c)
Write_Date('O')
Write_Date('N')
Write_Date(' ')
}
if(alarmmode0)
{
Write_Address(0x4c)
Write_Date('O')
Write_Date('F')
Write_Date('F')
}
while(1)
{
if(SET0)
{
delay1ms(100)
if(SET0)
{
amode++
switch(amode)
{
case(1){gbdisplay(0x45)alarmhourset()Write_com(0x0c)delay1ms(500)} break
case(2){gbdisplay(0x48)alarmminuteset()Write_com(0x0c)delay1ms(500)} break case(3){gbdisplay(0x4c)alarmswitchset()Write_com(0x0c)delay1ms(500)} break
}
if(amode4) amode0
}
}
if(CANL0)
{
Write_com(0x01)
delay1ms(5)
displaymainpart()
break
}
}
}
}
if(CANL0)
{
Write_Address(0x40)
Write_Date(' ')
Write_com(0x0c)
break
}
}
}

}
}
***************函数**********************
void main()
{
IE0X82 开定时中断
TMOD0X01 选择定时器0工作方式1
TR00 启动定时器0
IntDS1302() 初始化DS1302
delay1ms(1)
Lcd_Int() 1602液晶初始化
delay1ms(2)
displaystar() 显示欢迎界面
displaymainpart() 显示部分(变化)
while(1)
{
display_Time( )
Set( )
if(ADD0)
{
Write_com(0x01)
delay1ms(5)
Temperature()
Write_com(0x01)
displaymainpart()
}
if((hourshoura)&&(minutesminutea)&&(seconds0))
{
if(alarmmode1)
{
Write_com(0x01)
delay1ms(5)
Write_Address(0x03)
Write_Date('T')
Write_Date('I')
Write_Date('M')
Write_Date('E')
Write_Address(0x08)
Write_Date('U')
Write_Date('P')
Write_Date('')
delay1ms(5)
while(1)
{
baojing(1)
if(CANL0)
{
Write_com(0x01)
delay1ms(5)
displaymainpart()
break
}
}
}
}
}

}

文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 香币 [ 分享文档获得香币 ]

该文档为用户出售和定价!

购买文档

相关文档

万年历课程设计报告

课程设计报告课程名称程序设计基础专周题目年历显示姓 名XX班 级XXXXXX学 号XX指导教师XXX设计时间2015-03-02至2015-03-06XX学院计算机工程系XX学院课程设计(论文)任务书一、课程设计题目   年历显示 二、课程设计工作自 2015 年 03 月 02 日至 2015 年 0

文***品 3年前 上传569   0

实场营销实训报告

实场营销实训报告  我们这周上的实训课是市场营销实训。我们小组自实训课开始就一直在一起,这次的实训也不例外,。这次实训的主要目标人群是学生家长及校内学生们。这是个符合我们目前状况的实训,现在的我们面临着找工作或创业的选择。通过这次实训我们可以看到我们自身的关于创业的好点子,可以打开我们另一个通往成功的大门。   我们团体一共有五个人,当得知这次实训的主题,我们各抒己见,看我们的创业从哪方

h***5 10年前 上传695   0

windows实训报告

实训是教学工作的重要环节,是课堂理论教学的检验和延续,是培养学生实践技能的重要场所。通过实训,使学生能够完成企业windows服务器的配置、管理与维护。通过实际操作,使学生掌握一定的操作技能,能认真、细致、准确的操作。通过实践过程,培养学生独立思考、独立工作的能力及团队协作精神。

带***识 3年前 上传2059   0

实训报告

三年的大学即将结束,在基本完成了各个专业的基础课,专业课的学习任务的基础上。进行了为期12周的专业课程实验。在虚拟贸易平台中,同学们都参与扮演进出口业务中的不同当事人,在这个共同组成的贸易环境里面对出口商、进口商、工厂甚至银行的日常工作,面对相互竞争与协作从而熟练掌握各种业务技巧和具体操作,体会客户、供应商、银行和各政府机构的互动关系,真正了解到实际贸易的物流、资金流和业务流的运作方式。 通过实验,可以使学生熟悉外贸实务的具体操作流程,增强感性认识,并可从中进一步了解、巩固与深化已经学过的理论和方法,提高发现问题、分析问题以及解决问题的能力。

🌙***8 5年前 上传1746   0

实训报告总结

实训报告总结  我校组织的为期两周的实训马上就要结束了,心中有些不舍,从第一天满怀激动的来到与学校合作的玛世电子商务公司到现在要结束的实训,虽然只有短短两周时间,但我收获很多知识性的东西。以前对电子商务知识只有一个很浅薄的了解,现在加深了对电子商务的了解。  这次我们实训的主要是围绕如何让别人能够更多的指导你的产品,能够尽快的在客户搜索时让你的产品网站最先出现在客户眼前,让客户去点击并产

a***9 12年前 上传899   0

实训报告

人力资源管理沙盘模拟实验报告                            ——G组 1、企业基本情况 公司名称:创世集团(简称CS)    法人代表:包程程 成立时间:2011.11.02            宣传口号:创新联接世界      经营理念:诚信为本、创新为魂 用人理念:以人为本    以德为根   岗为基础  人为核心 人员分工: 总经理:包程程   

而***吧 9年前 上传7864   0

铣床实训报告

铣床实训报告  短短两周的金工实习,随着昨天下午最后一节笔试的结束而结束了。在这段时间,我学到了很多东西,见识了许多新奇的工艺,也了解到了技工人员的工作环境。我想这两周的实习将给我以后的工作带来许多宝贵的经验。  实习的第一天就傻傻地来到车间,没想到原来我们要做的是学习一个软件DDsolid works,不过真的很好玩呢,照着教程一步步来,我们都学得很认真!学习了基本的操作后,我就发挥自

李***忌 11年前 上传1078   0

物流实训报告

物流实训报告  物流实训报告  目  录  一、实训内容... 2  二、实训目的... 2  三、实训中遇到的问题... 2  四、三种角色具体流程分析... 3  五、实训感想及心得体会... 4  实  训  评  语... 5  一、实训内容  这个学期根据学校经济管理系的安排,为我们物流管理两个班级开设了网络物流虚拟实验的实训。这次实训,与以前的

j***2 12年前 上传774   0

护理实训报告

护理实训报告  学院                                      系部                                      班级                                      姓名                                      学号                   

g***5 9年前 上传851   0

会计实训报告

会计实训报告  年级专业班级:  学        号:  姓        名:  提 交  日 期:  一、    实训基本情况  (一)实训时间:2012年9月6日――9月30日  (二)实训单位:光华机床有限责任公司  (三)实训目的:  1、通过对企业会计模拟实训,这样可以系统地掌握企业会计核算的全过程,从而加强我们对学会计理论和知识的理解与认识,完

大***雪 10年前 上传714   0

实训报告总结

实训报告总结  历经为期两个星期的实训能力扩展训练,在我们彼此的心目中有着或多或少的感悟!   前个星期的钳工实训使我更加了解到了划线,錾削,锯切,锉削,钻孔,绞孔,刮削等加工过程。同时也发现了自己在钳工过程中的不足,认识到了在加工过程中的一些需要注意的地方,学到了课本上学不到的知识!  为了加工出精确的工件,首先要把工件表面清理干净,使在划线时更加清楚,而且划线必须仔细,不然会带来

g***9 12年前 上传902   0

ERP实训报告

ERP实训报告  提示:在为期一周的erp实训中我认识和学习到erp系统及在企业运营中的重要性及涉及到的一些跨学科的知识。由此可以了解企业的运营过程、身临其境的进行操作,真正感受一个企业经营者如何利用好现有资源充分达到资源的优化合理配置从而获得利益的最大化。探索企业经营管理的关键,了解erp对企业管理的秘密之道。  一、经营状况分析及总结:  14号上午沙盘实训正式开始,老师将全班同

z***3 10年前 上传706   0

实训报告

实训报告  一、实训时间:  二、实训目的:了解普通车床的工作原理,工作方式、结构特点各部件的用途,并掌握普通车床和立式升降铣床的基本操作。车工对应的机器主要是车床,车床主要由变速箱、主轴箱、挂轮箱、进给箱、溜板箱、刀架、尾座、床身、丝杠、光杠和操纵杆组成。车床是通过各个手柄来进行操作的。在了解了各个手柄的作用之后,老师按照图纸要求给我们示范了一遍今天需要完成的一个小型零部件的加工过程,

王***Ⅰ 8年前 上传666   0

社会实训报告

社会实训报告 2010年1月,我有幸成为一名在社区工作的人员,在两年多的时间里,使我走向社会,接触社会,了解社会,熟悉社会,投身社会的良好形式,我觉得自己对社会工作专业有了更深一步的了解,让我领悟到了很多的东西,而这些东西将让我终生受用。社区的工作,让我加深了我与社会各阶层人的感情,拉近了我与社会的距离,也让自己在社区工作当中开拓了视野,增长了才干,进一步理解社会才是学习和受教育的大课堂,在那

l***9 12年前 上传11863   0

实训6 BIOS设置实训报告

实训6 BIOS设置实训报告实训内容进行常用的BIOS选项设置,包括系统日期和时间设置、超级用户密码和用户密码的设置、启动设备顺序设置、保存修改、不保存修改等;对照主板说明书和BIOS设置程序的帮助了解各选项的含义。实训要求1. 熟悉BIOS设置方法2. 熟练设置常用选项3. 了解BIOS各选项的含义实 训 数 据 记 录 实训微机BIOS类型及版本:一、设置BIOS常用功能

H***t 4年前 上传1475   0

经营之道(ERP实训)实训报告

报告成绩: 教师签名: 经营之道(ERP实训)实训报告班级: 工业工程 学号: 姓名: 组名: 角色: CFO(财务总

文***品 3年前 上传1055   0

实训5 组装微机实训报告

实训5 组装微机实训报告实训内容按要求进行主板部件组装、主机各部件组装及连接、整机连接。实训要求通过微机的实际组装,熟悉微机的组装顺序,掌握微机组装技术和方法。在组装过程中,逐步填写微机组装进程表,并记录实训中遇到的问题和解决的办法。实 训 数 据 记 录一、部件情况记录名称是否配备数量名称是否配备数量机箱有1光驱有1主板有1显示器有1CPU有

H***t 4年前 上传1180   0

工程测量实训报告

工程测量实训报告  在XX至XX学年第二学年十五,十六周,我们进行了为期14天的工程测量实习.我们一共分成九个小组,每个小组都配一个女生,可能是担心我们男生心不够细吧,测量开始之后我们小组各有分工,但又确保每一个人都能得到实习锻炼的机会,确保每一个人都能熟练的使用水准仪,经纬仪,又能锻炼我们每一个人的测绘能力,这是在高中没有办法学到的,我们是怀着无比兴奋的心情开始的,结果令我们非常的满意.

钟***房 9年前 上传606   0

动画造型 实训报告

动画造型 实训报告 实训项目 面部结构 指导教师 张雪松 实训时间 11.5  5~8节 实训地点 实训楼A507 实训目的 了解课程基本内容;讲解面部的基本比例结构。 实训要求 让学生对面部五官的造型和位置有准确的认知。 实训步骤 以实例讲解,让学生了解三庭五眼的概念,并通过学生临摹来加深印象。 实训内容 1、 课程基本内容; 2、 人体造型在动画角色设计中的

精***师 11年前 上传12189   0

文档管理实训报告

文档管理实训报告  通过两周的文档管理实训,不仅仅是巩固了课堂的理论知识,弄清模糊知识点,扩充知识;而且提高了文书文书处理,档案整理等档案工作的日常工作实操能力;更重要的是通过实训培养自身严谨细致的工作作风和良好的沟通合作能力。为了总结经验,现将本次实训报告如下:  一、 实训任务  ① 判断所给材料是否应该归档,如何分类组卷  ② 档案材料装订练习  ③ 电子文档工作介绍及

x***8 9年前 上传709   0

运输管理实训报告

运输管理实训报告  一、 实训时间:XX年12月26日—12月30日  二、 实训地点:教室  三、 实训目的:  1通过运输管理的实训,熟悉并掌握现代运输管理的整个作业过程。掌握运输作业的方法和原则。  2为了更好的学习运输管理知识,巩固所学理论,获取本专业的实际知识,培养初步的实际工作能力和专业技能。  四、 实训内容:  (一)各种运输方式的特点——熟悉各种运输

l***o 10年前 上传781   0

会计单项实训报告

会计单项实训报告  一,实训目的  通过实训使学生掌握原始凭证的填制,审核;记账凭证的填制与审核;分类账簿的登记;会计报表的编制等技能.并初步了解企业会计月末如何计算盈亏,为下学期进一步学习财务会计知识奠定良好基础.  二,实训内容  1,根据所给的资料填制原始凭证和记账凭证.  2,根据原始凭证填制记账凭证.  3,登记明细分类账簿.  4,填制资产负债表及利润表.

h***z 10年前 上传582   0

2014金工实训报告

2014金工实训报告  石油化工生产技术这一门学科的学习是理论与实践相结合,光学不练等于纸上谈兵,经过大一上学期的基本知识学习之后,在下学期我们又进行了为期两周的金工实训课程。通过金工实训我不但了解了工业产品的生产过程,而且增加了对工业生产的感性认识,在实训中获得了机械工业生产中常用金属材料加工工艺基本知识,掌握了初步动手能力的重要途径。  这次我们金工实训了三个工种,下面我将三个工种的

安***霁 10年前 上传518   0

java实训报告总结

java实训报告总结  作为就业培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用。这篇文章是关于在学习java软件开发时练习项目的总结,简单总结为以下几点:   作为就业培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用。这篇文章是关于在学习java软件开发时练习项目的总结,简单总结为以下几点:   1、项目一定要全新的项目,不能是以前做过的   2、项目一定要

d***6 10年前 上传592   0

物流专业实训报告

物流专业实训报告  一.实训时间:XX年5月17日到5月28日   二.实训地点:苏宁南京配送中心   三.实训目的:   本次苏宁实训是加强学生社会实践能力的重要教学方式,也是理论联系实际和提高教学质量的重要措施,旨在增强学生对物流活动、物流的流程和物流的发展现状有感性认识;并通过实训,使学生自觉主动地把学校学到的理论知识与工作实践相结合,能根据实际工作情况找出自己学习的差距,

时***话 11年前 上传740   0