单片机实习文档_第1页
单片机实习文档_第2页
单片机实习文档_第3页
单片机实习文档_第4页
单片机实习文档_第5页
已阅读5页,还剩17页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE1北华大学北华大学啤酒罐装检测系统单片机实习报告姓名:班级:学号:院系:指导教师:实习日期:

目录实习的目的任务…………….…...3硬件介绍………………….…..….4软件介绍…………………..….….7程序设计………...………………10实习体会………………...………20参考文献………………...………20教师评语……………...…………21实习的目的与任务1.实习目的:1)熟悉并掌握单片机外围芯片的应用方法2)掌握单片机应用系统一般的设计过程3)掌握51单片机定时器、外部中断的使用方法4)利用KeiluV4软件完成应用系统软件设计5)利用STC-ISP软件完成在系统编程、下载,并完成系统软件调试2.实习任务:(1)实习题目:简易的啤酒罐装检测系统(2)题目背景:某啤酒企业在生产啤酒过程中,需要人工实时监测啤酒发酵时候的温度,温度控制的好坏直接影响啤酒的口感,影响企业效益。同时在啤酒装瓶的时候,不装满的产品是不合格的产品,不合格的产品不能再市场上流通。(3)设计要求:1.用LCD12864显示当前的日期。2.学会用18b20进行内温度的检测,并且在液晶上实时显示当前温度。3.用一个普通I/O口模拟一个10s的脉冲信号,用来模拟装瓶的过程4.装瓶是否为合格品,在检测到一个脉冲信号后,用TLC2543检测当前的电压值。当检测的电压值大于3V时,认为当前的产品为合格,好的个数要加1;否则,当前的产品为不合格,坏的个数要加1。5.产品的好坏以及产品好坏的个数在LCD12864上都要有所显示。6.完成以上项目后,自由发挥,可以添加矩阵按键,蜂鸣器,电机驱动等更好的模拟生产啤酒的过程。(4)设计要求的简易流程框图,仅供参考。STCSTC89C52RCLCD1286418B20TLC2543检测电压检测脉冲信号10S脉冲信号硬件介绍1、系统总体框图图1硬件设计整体框图单片机介介绍AT89C52是一个低电压,高性能CMOS

8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。单片机引脚介绍P0口P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻,如图所示。P1口P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表1。Flash编程和程序校验期间,P1接收低8位地址。表.P1.0和P1.1的第二功能引脚号功能特性P1.0T2,时钟输出P1.1T2EX(定时/计数器2)P2口P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。P3口P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用Flash闪速存储器编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1振荡器反相放大器及内部时钟发生器的输入端。XTAL2振荡器反相放大器的输出端。实验硬件原理图1)51单片机最小系统及外部引脚引出图图2单片机最小系统三、软件介绍KeilC51是美国keil出品的51系统兼容单片机语言软件开发系统,与汇编相比,语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C语言开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体会高级语言的优势。下面详细介绍此次实验建立过程。打开

keil软件,点击菜单栏上的Project,选择NewuVisionProject。命名为pinlvji,并保存。选择工程保存的路径与位置。给工程命名,然后保存。接着弹出选择芯片类型,一般是写51单片机系列的程序的话,就选择Atmel公司的芯片,点开后,选择AT89C52.最后点击OK。选择菜单File,接着选择New。新建一个文件。然后保存文件,保存在工程的路径下,保存的格式为“.c”.点开Project

下的Target1左边的加号。鼠标右击SourceGroup1,选择AddFieltoGroup'SourceGroup1'...按截图的操作,找到.c的文件,添加到工程里面。最后close,就可以了。编写代码,编译,生成.hex文件。下载程序设计1.程序设计总流程图开始开始启动定时器0打开外部中断0打开中断EA=1外部中断触发YN读取TLC2543读取18B20数据LCD12864显示结束>3VBAD++;GOOD++;YN2.电路原理图3.程序运行实物图实物图4.程序编写#include"reg51.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedintsbitLCD_Din=P1^0; sbitLCD_CLK=P1^1; sbitW=P1^2; sbitE=P1^3; sbitI=P1^4; sbitDQ=P1^7; sbitoutput=P1^5; sbitmc_out=P2^0; #defineCS_ON(W=0,E=0,I=0)#include"12864.h"#include"DS18B20.h" uintAD,num,num1,GOOD,BAD;uintread_2543(ucharCON_WORD) {uintad=0;uchari;CON_WORD<<=4;LCD_CLK=0;CS_ON;for(i=0;i<12;i++){if(output==1)ad=ad|0x01; if(CON_WORD&0x80) LCD_Din=1; else LCD_Din=0; LCD_CLK=1; _nop_();_nop_(); _nop_();_nop_(); LCD_CLK=0; _nop_();_nop_(); _nop_();_nop_(); CON_WORD<<=1; ad<<=1;}LCD_CS_OFF;ad>>=1;return(ad);}voidAD_DUQU(){uintadcaiji,qian,bai,shi,ge;adcaiji=AD/0.819;qian=adcaiji/1000;bai=adcaiji%1000/100;shi=adcaiji%100/10;ge=adcaiji%10;write_com(0x98+3);dis_num_9(qian);dis_num_9(10);dis_num_9(bai);dis_num_9(shi);dis_num_9(ge);dis_num_9(11);}voidmain(){uintm;lcd_init();TMOD=0X01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;ET0=1;TCON=0x11;EA=1;xianshihanzi(1,2,"2015-10-27");xianshihanzi(2,1,"温度:");xianshihanzi(2,7,"℃");xianshihanzi(3,1,"G:");xianshihanzi(3,5,"B:");xianshihanzi(4,1,"电压:");while(1){m++;if(IE0==1){IE0=0;AD=AD/0.819;if(AD>3000)GOOD++;elseBAD++;}if(m>20) {AD_DUQU(); m=0; }ds1820disp();num_dis(3,3,GOOD);num_dis(3,7,BAD); AD=read_2543(0); delay(5);}}voidTime_0()interrupt1{TH0=(65536-45872)/256;TL0=(65536-45872)%256;num++;if(num==20){num=0; num1++; if(num1>4) { num1=0; mc_out=~mc_out; }}}#defineLCD_CS_ON(W=1,E=1,I=0)#defineLCD_CS_OFF(W=1,E=1,I=1)uchara[]={"0123456789"},dis_num_mul[5]={0};voiddelay(uintn){uinti,j;for(i=0;i<=n;i++)for(j=0;j<110;j++);}voiddelay_us(uintn){while(n--);}voidSend_12864_data(uchardat){uinti;for(i=0;i<8;i++){if((dat<<i)&0x80) LCD_Din=1; else { LCD_Din=0; } LCD_CLK=0; _nop_();_nop_(); LCD_CLK=1;}}voidwrite_com(ucharcmd){LCD_CS_ON;Send_12864_data(0xf8);Send_12864_data(cmd&0xf0);Send_12864_data((cmd<<4)&0xf0);delay(2);LCD_CS_OFF;}voidwrite_data(uchardat){LCD_CS_ON;Send_12864_data(0xfa);Send_12864_data(dat&0xf0);Send_12864_data((dat<<4)&0xf0);delay(2);LCD_CS_OFF;}voidlcd_init(){write_com(0x30);delay(10);write_com(0x0c);delay(10);write_com(0x01);delay(10);write_com(0x06);delay(10);}voidxianshihanzi(uintline,uintpos,uchar*s){if(line==0){while(*s>0){write_data(*s);s++;delay_us(5);}}if(line==1){write_com(0x80+pos-1);while(*s>0){write_data(*s);s++;delay_us(5);}}if(line==2){write_com(0x90+pos-1);while(*s>0){write_data(*s);s++;delay_us(5);}}if(line==3){write_com(0x88+pos-1);while(*s>0){write_data(*s);s++;delay_us(5);}}if(line==4){write_com(0x98+pos-1);while(*s>0){write_data(*s);s++;delay_us(5);}}}voiddis_num_9(uintnum){switch(num){case0:xianshihanzi(0,0,"0");break;case1:xianshihanzi(0,0,"1");break;case2:xianshihanzi(0,0,"2");break;case3:xianshihanzi(0,0,"3");break;case4:xianshihanzi(0,0,"4");break;case5:xianshihanzi(0,0,"5");break;case6:xianshihanzi(0,0,"6");break;case7:xianshihanzi(0,0,"7");break; case8:xianshihanzi(0,0,"8");break;case9:xianshihanzi(0,0,"9");break;case10:xianshihanzi(0,0,"."); break; case11:xianshihanzi(0,0,"V"); break;}}voidnum_dis(uintline,uintpos,uintnum){uinti;if(line==1)write_com(0x80+pos-1);if(line==2)write_com(0x90+pos-1);if(line==3)write_com(0x88+pos-1);if(line==4)write_com(0x98+pos-1);if(num<1000){if(num<100){if(num<10){dis_num_9(num);for(i=0;i<2;i++){xianshihanzi(0,0,"");}}else{dis_num_mul[0]=num/10;dis_num_mul[1]=num%10;for(i=0;i<2;i++)dis_num_9(dis_num_mul[i]);xianshihanzi(0,0,"");}}else{dis_num_mul[0]=num/100;dis_num_mul[1]=num%100/10;dis_num_mul[2]=num%10;for(i=0;i<3;i++)dis_num_9(dis_num_mul[i]);}}}uinttvalue;voiddelay_18B20(uinti){while(i--);}voidds1820rst(){ucharx=0;DQ=1;delay_18B20(4);DQ=0;delay_18B20(100);DQ=1;delay_18B20(40);}uchards1820rd(){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}voidds1820wr(ucharwdata){uchari=0;for(i=8;i>0;i--){DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata>>=1;}}read_temp(){uchara,b;ds1820rst();ds1820wr(0xcc);ds1820wr(0x44);ds1820rst();ds1820wr(0xcc)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论