1、基于温度远程控制系统基于温度远程控制系统【实验目的】 本次实验目的如下:1、 绘制原理仿真电路图;2、 调试hex文件;3、 A机在LCD1602芯片上显示DS18B20所得到的时间,以及DS1302所获取的温度值,并且发送给B机,在B机的LCD1602上显示。4、 如果A机的温度大于30C则蜂鸣器鸣笛,步进电机正转。若A机的温度在28C到30C之间,步进电机反转,蜂鸣器鸣笛。其余温度时,无反应。5、 B机在无操作时,始终接收A机发送的时间和温度值,并且在LCD1602上显示。6、 B机按下K3按键时,可以对A机进行设置时间,并且显示所设置的时间,通过矩阵键盘设置时间,通过K3进行位操作。如果
2、按下B机的K2则显示接收到的日期,温度,电机状态,第几周;7、 把A机电机运动的状态发送给B机。8、 如果按下A机的K3则显示时间,温度,电机状态,第几周;按下A机的K4则显示日期,温度,电机状态,第几周。9、 “-”表示电机不转,“”表示电机正转,“”表示电机反转。正转和反转时蜂鸣器发出的频率不同。【实验原理】对实验四的原理图进行如下图A和B调整。【实验内容】1、 熟悉Protues绘制原理图的基本步骤。2、 学会可执行文件的加载以及程序仿真的方法。3、 验证数码管的动态显示效果。4、 验证DS1302写入和读取效果。5、 验证LCD1302显示效果。6、 验证DS18B20温度读取效果。7
3、、 验证串口通信。8、 验证蜂鸣器,矩阵键盘,验证步进电机正反转。9、 验证外部中断,验证串口中断;【实验步骤】1、 熟悉动态数码管显示的原理,LCD1602显示的原理。2、 熟悉DS1302芯片的写入和读取。3、 熟悉DS18B20芯片的读取。4、 熟悉蜂鸣器的控制;5、 熟悉步进电机的控制;6、 绘制Protues原理图。7、 在ISIS中加载可执行文件a.hex运行仿真,并调试。【实现效果】实验效果如图A2所示,完成实验目的所要求的内容。【实验小结】通过这次实验是我更加熟悉了LCD1602的显示和DS1302的写入和读取,步进电机的控制和蜂鸣器、矩阵键盘的工作原理,外部中断的使用,串口中
4、断的使用,双机通信的原理,以及keil和Protues的应用。【附录】C51源程序A机程序#include#define dj P0#define lcd P1sbit DQ=P37;sbit RST=P22;sbit SCLK=P23;sbit IO=P24;sbit fmq=P21;sbit RS=P25;sbit RW=P26;sbit EN=P27;sbit K3=P32;sbit K4=P33; unsigned char second,minute,hour,week,day,month,year;unsigned char t13027=0x15,0x11,0x20,0x47,0
5、x21,0x30,0x00; unsigned char code ggsj=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x50,0
6、x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59;unsigned char zf05=Time:;unsigned char zf15=Temp:;unsigned char zf25=Data:;unsigned char zf35=Week:;unsigned char zf43=0;i-) for(j=10;j0;j-);void cktx() SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL1=0XF3; ES=1; EA=1; TR1=1; void wbzd() IT0=1; EX0=1; IT1=1
7、; EX1=1; IP=0x01; EA=1;void int0() interrupt 0 if(K3=0) rq=1; void int1() interrupt 2 if(K4=0) rq=0; void send(unsigned char dat) SBUF=dat; while(TI=0); TI=0;unsigned char receive() unsigned char dat; while(RI=0); RI=0; dat=SBUF; return dat;void zd() interrupt 4 if(RI) if(m=7) m=0; gszh(); init1302(
8、); jssjm+=receive(); RI=0; void writecom(unsigned char com) lcd=com; RS=0; RW=0; EN=1; delay(10); EN=0;void writedat(unsigned char dat) lcd=dat; RS=1; RW=0; EN=1; delay(20); EN=0;void init() writecom(0x01); writecom(0x38); writecom(0x0c); writecom(0x06);unsigned char read1302(unsigned char add) unsi
9、gned char n,dat,dat1; RST = 0; SCLK = 0; RST = 1; for(n=0; n= 1; SCLK = 1; SCLK = 0; for(n=0; n1) | (dat17); SCLK = 1; SCLK = 0; RST = 0; SCLK = 1; IO = 0; IO = 1; return dat; void write1302(unsigned char add,unsigned char dat) unsigned char n; RST = 0; SCLK = 0; RST = 1; for (n=0; n= 1; SCLK = 1; S
10、CLK = 0; for (n=0; n= 1; SCLK = 1; SCLK = 0; RST = 0;void read1302time() second=read1302(0x81); minute=read1302(0x83); hour=read1302(0x85); day=read1302(0x8b); week =read1302(0x87); month=read1302(0x89); year=read1302(0x8d); sjsj0=hour/16; sjsj1=hour%16; sjsj2=10; sjsj3=minute/16; sjsj4=minute%16; s
11、jsj5=10; sjsj6=second/16; sjsj7=second%16; rqsj0=year/16; rqsj1=year%16; rqsj2=12; rqsj3=month/16; rqsj4=month%16; rqsj5=12; rqsj6=day/16; rqsj7=day%16; rqsj8=week/16; rqsj9=week%16; void init1302() write1302(0x8e,0x00); write1302(0x86,t13020); write1302(0x88,t13021); write1302(0x8c,t13022); write13
12、02(0x89,t13023); write1302(0x84,t13024); write1302(0x82,t13025); write1302(0x80,t13026); write1302(0x8e,0x80);int init18b20() int i; DQ=0; i=70; while(i-); DQ=1; i=0; while(DQ) i+; if(i50000) return 0; return 1;void write18b20(unsigned char dat) int i,j; for(i=0;i=1; DQ=1;unsigned char read18b20() unsigned char dat
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1