《单片机应用系统设计》课程设计报告格式1Word文档下载推荐.docx
《《单片机应用系统设计》课程设计报告格式1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《单片机应用系统设计》课程设计报告格式1Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
(3)通过4个键实现温度上限和下限设置。
发挥任务:
实现一个时钟,显示时,分秒,并可以设置时间。
2.、设计要求
(1)熟悉STC89C52单片机及其开发环境;
熟悉汇编语言或C51程序设计;
(2)掌握STC89C52单片机最小系统、按键电路、字符液晶显示电路的设计;
掌握DS18B20编程方法,学会看数据手册;
掌握1602字符液晶编程方法;
掌握单片机时钟中断的编程方法;
熟悉项目设计流程;
(3)熟悉硬件软件调试的方法;
(4)设计报告中详细写出硬件电路设计方案、画出软件流程图并总结调试中遇到的问题及解决方法。
三、设计报告撰写规范
单片微机应用系统设计总结报告正文,主要含以下内容(硬件、软件各部分内容也可组合起来进行撰写说明):
1.系统总体设计方案(画出系统原理框图、方案的论证与比较等内容);
2.硬件系统分析与设计(各模块或单元电路的设计、工作原理阐述、参数计算、元器件选择、完整的系统电路图、系统所需的元器件清单。
等内容);
3.软件系统分析与设计(各功能模块的程序设计流程图与说明、软件系统设计、软件抗干扰措施、完整的程序等内容);
4.系统仿真调试与参数测量(使用仪器仪表、故障排除、电路硬件和软件调试的方法和技巧、指标测试的参数和波形、测量误差分析);
5.总结(本课题核心内容及使用价值、电路设计、软件设计的特点和选择方案的优缺点、改进方向和意见等);
6.按统一格式列出主要参考文献。
一、系统总体方案
二、单片机概述
STC89C52特性
STC89C52RC单片机:
8K字节程序存储空间;
512字节数据存储空间;
内带2K字节EEPROM存储空间;
可直接使用串口下载;
AT89S52单片机:
256字节数据存储空间;
没有内带EEPROM存储空间;
参数
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[2]
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.用户应用程序空间为8K字节
5.片上集成512字节RAM
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
9.共3个16位定时器/计数器。
即定时器T0、T1、T2
10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
11.通用异步串行口(UART),还可用定时器软件实现多个UART
12.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
13.PDIP封装
三、温度检测电路
、DS18B20温度采集时序、电路图和温度采集、转换编程。
DS18B20特性:
①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源:
3~5V/DC(可以数据线寄生电源)
⑤、在使用中不需要任何外围元件
⑥、测量结果以9~12位数字量方式串行传送
⑦、不锈钢保护管直径Φ6
⑧、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、标准安装螺纹M10X1,M12X1.5,G1/2”任选
⑩、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
//*****************************************************
voiddisplay_set(void)//显示温度上下限界面
{
lcd1602_string(1,0,str1);
lcd1602_char(2,1,'
T'
);
lcd1602_char(2,2,'
H'
lcd1602_char(2,3,'
:
'
if((SET_mode==1)&
&
(keep%2==1))
{
lcd1602_char(2,4,'
'
lcd1602_char(2,5,'
}
else
lcd1602_char(2,4,disdata[15]);
lcd1602_char(2,5,disdata[14]);
lcd1602_char(2,7,'
C'
lcd1602_char(2,6,0xdf);
lcd1602_char(2,9,'
lcd1602_char(2,10,'
L'
lcd1602_char(2,11,'
if((SET_mode==2)&
lcd1602_char(2,12,'
lcd1602_char(2,13,'
lcd1602_char(2,12,disdata[17]);
lcd1602_char(2,13,disdata[16]);
lcd1602_char(2,15,'
lcd1602_char(2,14,0xdf);
}
/*****************读取即时温度********************************/
voidreadtemp(void)
{
tmpchange();
tmp();
/*****************显示即时温度********************************/
voidshowtemp(void)
{
write_stringtable(0,0,"
temperature:
"
write_date(temp/100+0x30);
write_date(temp%100/10+0x30);
write_date('
.'
write_date(temp%10+0x30);
DS18B20D程序:
#include"
AT89X51"
#include"
DS18B20.H"
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P2^4;
//defineinterface
uinttemp;
//variableoftemperature
ucharflag1;
//signoftheresultpositiveornegative
//****************************************************************
staticvoiddelay(uintcount)//delay
uinti;
while(count)
i=200;
while(i>
0)
i--;
count--;
///////功能:
串口初始化,波特率9600,方式1///////
voidInit_Com(void)
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
//读一次温度,防止运行程序时读出85摄氏度
delay(400);
voiddsreset(void)//sendresetandinitializationcommand18B20复位,初始化函数
DS=0;
i=103;
0)i--;
DS=1;
i=4;
bittmpreadbit(void)//readabit读1位数据函数
bitdat;
i++;
//i++fordelay
dat=DS;
i=8;
while(i>
return(dat);
uchartmpread(void)//readabytedate读1字节函数
uchari,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
j=tmpreadbit();
dat=(j<
<
7)|(dat>
>
1);
//读出的数据最低位在最前面,这样刚好一个字节在DAT里
return(dat);
voidtmpwritebyte(uchardat)//writeabytetods18b20向1820写一个字节数据函数
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)//write1
i++;
//write0
voidtmpchange(void)//DS18B20beginchange开始获取数据并转换
dsreset();
delay
(1);
tmpwritebyte(0xcc);
//addressalldriversonbus写跳过读ROM指令
tmpwritebyte(0x44);
//initiatesasinglete