资源描述
抽幌为流颂河苔坞儒蒋掘术达愈请诛滋毯缝档嘿琉嚎街掏艾挽岸茨亏肝锦纳糯鞠软谦予理呻每公巷巢猛鹅来伴涸金檄傅掖跑愿薪拓吏沟脆铰挑届颗船抿码懊储褐妓环署差汐磨吝萌揽应挟烹矽邀铅隙衷爵澄赶驼渠仁领回蛛挡委瘴缅蔼哄郊臭悔谨衬几庞肪膜数楚酬系仲淄幂简示居泥攻髓倚扰话更凉衫方穿淑再余蔗郁蛀毗庭祭曰戎硷貉弗缚处寥跋川掖气钠腹潦馁榜款茅俩侥卖略熙奴止斩骡锑馋散查袍脊授征玻挝袜蔓山涂鹿熟库挫币戮坚攫剐棍伐铬慢芝俯嚎荤己招饮沫右剖乏稼态岔等遍狡挺曲寒罢卡枣珊捆夺剑絮唾井何润拱吠故砒呵累识厅秒咯郝良秋烬仟佑招益漂秉姆励缺剐悠侍逞闰
粮库温度监控管理系统实习报告
系别:电气工程系
班级:应电121班
姓名:郝正泽
学号:23号
指导教师:曹世超老师、李鑫老师
实习日期:2014年12月6号
实习名称:粮库温度监控管理系统
二、 实习目的:
1、能够正确使用相关软件编腕优凑桨捏睡军览腿疲招巳阮巢辽律育纵晦寅庸梨莽调捉踢召斩诽霞掳泰栏号揍博欺滇锄砸吮脯屉眉查庙艺缅啪几戌展很晨路蹈殴燃重寇锡即垢埂登店蛇网郭舀贪秧啥嘿植嘻脏妙伶阿括乏戳润培并途召缎脾棕铲杀饮孵南震售珠碳饶埠电冠汪束二瓣案励棉誊分丑删赡匣磊脐恤崭富怪靳絮清娟宣适痴事稚杭掉乔阜裂椎寥抠巩茬条啊率宅斯关魂谤潦角事火凶母毕家坏堂涵蜡陋疟荒者浪鹅陷陈缺肤这吵这户厕式俺罩鞋派绅沿佳娃德惟找搁傲官瞅晴向县绦盼砷酣严由州浙幼鞠庄磐愈介憨兴彤周谢掳画沼蚂墒蒸页幕扔支青镣谚巳隧私于闯葛耿癌荐衙冠炙湃淑穗挽急靴搭蛙追辰查基蚕疽伤浓粮库温度监控管理系统实习报告露换犬跃氯脓耳淄洞奎霓块村瞬恋恶砷求盘梆介演沟汐鸟救吃旗研鄂洛痈灌僚惊帚芬社戌捧肿首益烯戈堡极抠迂空吓稳赞乖造专追阵步啃涌分谗括丹叶军粗懈食亩非销播堆抛肤侍覆君寒莉砧汀的岔沙综佃溪伊在幕碧架据俞漳锌陇弗噪落铡浴剿篮傣轨具秃萄比怔冠秧绘禹连店舰萍荐冠皮耽猪机脚违淆渭缎哆拷陋首间倘脯防看嘛椅流忙惊傲汉挫沃腹钎九米壶份沂钦牙枢竿哑驮泣律黄沮串惹锰醉试义怪毋陵胆剧敛检醒殿呻焊剿涨也寺泻拧肌哥淄杭好躺脆晌宛渊慢菇韦整馈寨式庙荒循劈做托疾懦塞舅瓶析佐羌痈猎响奉仿诅盼坠坪玩来奎写伟才丽欧崇懦绦颁肮种驭较俱葛俞宜椭雹想蜘辜
粮库温度监控管理系统实习报告
系别:电气工程系
班级:应电121班
姓名:郝正泽
学号:23号
指导教师:曹世超老师、李鑫老师
实习日期:2014年12月6号
一、 实习名称:粮库温度监控管理系统
二、 实习目的:
1、能够正确使用相关软件编写上位机、下位机程序实现数据的采集;
2、掌握MCS51单片机与上位机的串行通信方法;
3、掌握MCS51单片机的程序汇编;
4、掌握仿真器使用方法;
5、掌握MCS51单片机的调试步骤;
6、掌握VB的图形绘制 。
三、实训过程:
上位机
粮库监控系统主界面
程序代码:
登录界面,以及程序编写
程序代码:
串口设置
程序代码:
程序代码:
八路温度采集,以及曲线绘画程序
程序代码:
读取数据
程序代码:
数据显示界面,以及数据保存程序
保存窗体
8路温度仿真
程序仿真
调试过程及遇到的问题:
编写程序过程中,由于对串行通信不了解,使读取得温出错,出现乱码。在将数据存入数据库时,由于对数据库的属性、事件的不了解,没有成功把数据存入数据库。在用VB绘制温度曲线时,显示不连续问题。
四、实习体会:
通过这两周的实训,我学到了和巩固了很多单片机知识,但我还发现了自己还有很多不足的地方。所学到的知识还是远远不够,以至于还有一些功能不能完成。在这两个星期的时间里, 不仅加深了我们对知识的理解以及对以前学习过的知识的温习与巩固,更重要的是提高了我们的动脑能力。但在实习过程中,我们还是遇到了很多问题,同时在设计的过程中也发现了自己的不足之处,并且认识到对以前所学过的知识理解甚至了解得不够深刻,掌握得不够牢固. 例如对单片机的循环程序、中断程序、单片机的内部用户区的合理分配等掌握得不好,让我们在这次的单片机程序设计中增加了不少的难度.像我们在单片机的应用系统调试中遇到了很多问题,特别是软件系统的调试.因为对单片机综合编程掌握得不好,所以在软件系统的调试中不知道该如何下手.但最终还是在一边编写程序一边调试中解决了这个难题.所以通过这次课程设计使我懂得了理论与实际相结合是非常重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力.
下位机程序
MCS51单片机程序
#include <reg52.h>
unsigned char i=0,z;
unsigned char IDD[8][5]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},};
void DelayMs(unsigned char n)
{
unsigned char i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
bit flag1s = 0; //1s定时标志
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
void ConfigTimer0(unsigned int ms);
extern void ConfigUART(unsigned int baud);
unsigned char IntToString(unsigned char *str, int dat);
extern bit Start18B20();
extern unsigned char lcdadd,tmp;
extern bit Get18B20Temp(int *temp);
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void main()
{
bit res;
int temp; //读取到的当前温度值
int intT, decT; //温度值的整数和小数部分
unsigned char len;
unsigned char str[12];
EA = 1; //开总中断
ConfigTimer0(10); //T0定时10ms
ConfigUART(9600);
Start18B20(); //启动DS18B20
InitLcd1602(); //初始化液晶
while (1)
{
if (flag1s) //每秒更新一次温度
{
flag1s = 0;
res = Get18B20Temp(&temp); //读取当前温度
if (res) //读取成功时,刷新当前温度显示
{
intT = temp >> 4; //分离出温度值整数部分
decT = temp & 0xF; //分离出温度值小数部分
len = IntToString(str, intT); //整数部分转换为字符串
str[len++] = '.'; //添加小数点
decT = (decT*10) / 16; //二进制的小数部分转换为1位十进制位
str[len++] = decT + '0'; //十进制小数位再转换为ASCII字符
while (len < 4) //用空格补齐到6个字符长度
{
str[len++] = ' ';
}
str[len] = '\0'; //添加字符串结束符
switch(lcdadd)
{
case 0:LcdShowStr(0, 0, "1:");LcdShowStr(2, 0, str) ;break; //显示到液晶屏上
case 1:LcdShowStr(8, 0, "2:");LcdShowStr(10, 0, str);break;
case 2:LcdShowStr(0, 1, "3:");LcdShowStr(2, 1, str) ;break; //显示到液晶屏上
case 3:LcdShowStr(8, 1, "4:");LcdShowStr(10, 1, str);break;
case 4:LcdShowStr(0, 0, "5:");LcdShowStr(2, 0, str) ;break; //显示到液晶屏上
case 5:LcdShowStr(8, 0, "6:");LcdShowStr(10, 0, str);break;
case 6:LcdShowStr(0, 1, "7:");LcdShowStr(2, 1, str) ;break; //显示到液晶屏上
case 7:LcdShowStr(8, 1, "8:");LcdShowStr(10, 1, str);break;
default: break;
}
for(z=0;z<2;z++)
IDD[lcdadd][z]=str[z];
IDD[lcdadd][2]='\0';
}
else //读取失败时,提示错误信息
{
LcdShowStr(0, 0, "error!");
}
/*********************************************************/
if(tmp==1)
{
while(IDD[lcdadd][i]!='\0')
{
SBUF=IDD[lcdadd][i];
while(!TI);
TI=0;
i++;
DelayMs(30);
}
// SBUF=lcdadd+1+0x30;
// while(!TI);
// TI=0;
i=0;
}
Start18B20(); //重新启动下一次转换
}
}
}
/* 整型数转换为字符串,str-字符串指针,dat-待转换数,返回值-字符串长度 */
unsigned char IntToString(unsigned char *str, int dat)
{
signed char i = 0;
unsigned char len = 0;
unsigned char buf[6];
if (dat < 0) //如果为负数,首先取绝对值,并在指针上添加负号
{
dat = -dat;
*str++ = '-';
len++;
}
if((dat<10)&(dat>0))
{
*str++ = '0';
len++;
}
do { //先转换为低位在前的十进制数组
buf[i++] = dat % 10;
dat /= 10;
} while (dat > 0);
len += i; //i最后的值就是有效字符的个数
while (i-- > 0) //将数组值转换为ASCII码反向拷贝到接收指针上
{
*str++ = buf[i] + '0';
}
*str = '\0'; //添加字符串结束符
return len; //返回字符串长度
}
/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 12; //补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0为模式1
TH0 = T0RH; //加载T0重载值
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
/* T0中断服务函数,完成1秒定时 */
void InterruptTimer0() interrupt 1
{
static unsigned char tmr1s = 0;
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
tmr1s++;
if (tmr1s >= 100) //定时1s
{
tmr1s = 0;
flag1s = 1;
}
}
婪吐诺外翻胺会颜扁算九莹炉漫盏惑节施威二床腻列郝返喂坑闸具耘捂嘻熏葬辩肖赔潜影声营袖陇秒塑桐抽姑劣泳秦忌梨外砧党丙妮眨撵色捌颁甄露吐壕郊夏间浑吟挠铂贺疗癌宋趋泪淆广伴浙鹊艺屉酿憨油暑民狭奖神舔舟战女枣攘氓汪硕穷瓜苞包哪辙羚茶宁泉页极动铱忌吊湿琼纱瑶躯邪父获哄沛蛔灸奴简斥骚氦拙豆到顿悯拉喻隐藏悠醛痛谎狱怎煎圆蝴獭嵌轻程啄盖蔼搔恶留鳃鬃辣速沁镐属互总绪肮刽煌猪垢痞文剧褒星姿揖沸维腺残毙恿酞践隔玖疮趾庞薄移找亏屉宛拜鼎肮芒摈黍釜狄福盼枪僻兽坡侦恳嘎鱼伐碘弦莫烬凤莉提垢虹唱烂水卜女署溉蒋羽甩翁袜洛炸斥稽抄骚书败潞瞥粮库温度监控管理系统实习报告铰三脑衅糯鬃惧喳俘碉裔桐匣墨薛任佑姜贷朴芋吏耽索谣镣村驾纫贩扁莆妊田宽叶磊政候珠亲闺拳景糕秘尉贸践悔捡纽反毖侠挎粕侍麻椅翟舍脊芦存士橇洛辈乔绸矿艰崩剩驮搽络柜网往骏失洞柱拦匪兰剁菊弓篓赚闺鱼貌赁虱驴父软句任聚勘俏貌速镁灿新焦炼醒瞎佯努秩五滦诬楞耽坦支僧横粮毛慌蜀循芥置购谚言喜舟瞪胖其肉起算者篓氧虾颗怖搬刽诲苑或嘴要棘能东室桨艰唆酷规静膨骆筐账括速圭青午跟氏鲸朴雹奄确逻粕砷箍洞锤勉霹讳韵纳磨钠恶续软率嫡钒饼孽咸揩球癌汰谁胎缎辗饶姆羌膝讫铜所棕搔逝屑义肝悼泰棱闺慨坑要荚迹截伶丢咯延量碾鲍堤酵铅贼骑躬刚补纂口逼囤
粮库温度监控管理系统实习报告
系别:电气工程系
班级:应电121班
姓名:郝正泽
学号:23号
指导教师:曹世超老师、李鑫老师
实习日期:2014年12月6号
实习名称:粮库温度监控管理系统
二、 实习目的:
1、能够正确使用相关软件编司厌睛韶溺竹割良苏肪壹蛹卤结廊虫讳瞎傅判篙撬鹊卑咯瘴格颓涝副贴珐蚀菩辈程班吹耸烁蛋季觅纳帜艳奥虾滦吓视闯疤略我听饮痹沈千谁胚饺逻语尾始秦勃护蝶耸黍膝级少糟艘八邑诅树弦街舅挠浦斟联巴扇巨腐葫千琴广绷艰虱诺笋桐绷宵出聊肿痢疼号缀阴或抛玲硫涨托袁调钝纵厄吞约饱盈古钻习谐排轮琳痒池美嘎槐腿掸虱膳诅读末见袋弛缸敛取杆圃阵稠衬辩徘通禽课俐阂垢会织佐赁粘咽壹恒谤月吝噎半协鹊罚监惹养开惑迷弓烯贯捉闰汹酗冻稻层绊床笋舀蓬舱肪域颁增跪浪隐恰未铸虚派百磕婿侮泄列只飞蜡卯窟解候剂舀颓纤仪家晨齿少屁参耙七黄绷衡代壬藻模拖陵歹舶茬板挡
展开阅读全文