单片机课程设计_空调调温_C语言.doc

上传人:苏美尔 文档编号:7208069 上传时间:2020-11-06 格式:DOC 页数:16 大小:540.01KB
返回 下载 相关 举报
单片机课程设计_空调调温_C语言.doc_第1页
第1页 / 共16页
单片机课程设计_空调调温_C语言.doc_第2页
第2页 / 共16页
单片机课程设计_空调调温_C语言.doc_第3页
第3页 / 共16页
单片机课程设计_空调调温_C语言.doc_第4页
第4页 / 共16页
单片机课程设计_空调调温_C语言.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《单片机课程设计_空调调温_C语言.doc》由会员分享,可在线阅读,更多相关《单片机课程设计_空调调温_C语言.doc(16页珍藏版)》请在三一文库上搜索。

1、一硬件电路图二实物图三程序代码(1).显示部分LCD1602程序 a.头文件#ifndef _LCD_H_#define _LCD_H_/*当使用的是4位数据传输的时候定义*/#define LCD1602_4PINS/*包含头文件*/#include#define uint unsigned int #define uchar unsigned char/*PIN口定义*/#define LCD1602_DATAPINS P0sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;/*函数声明*/*在51单片机12MHZ时钟下的延

2、时函数*/void Delay1us(uint a);/*LCD1602写入8位命令子函数*/void LcdWriteCom(uchar com);/*LCD1602写入8位数据子函数*/void LcdWriteData(uchar dat);/*LCD1602初始化子程序*/void LcdInit(); #endifb.c程序文件#includelcd.h/* 函数名 : Delay1us* 函数功能 : 延时函数,延时1us* 输入 : a* 输出 : 无*/void Delay1us(uint a)uint b,c;for(c=a;c0;c-)for(b=110;b0;b-);/*

3、 函数名 : LcdWriteCom* 函数功能 : 向LCD写入一个字节的命令* 输入 : com* 输出 : 无*/#ifndef LCD1602_4PINS /当没有定义这个LCD1602_4PINS时void LcdWriteCom(uchar com) /写入命令LCD1602_E=0;LCD1602_RS=0;LCD1602_RW=0;LCD1602_DATAPINS=com;Delay1us(10);LCD1602_E=1;Delay1us(10);LCD1602_E=0;#else void LcdWriteCom(uchar com) /写入命令LCD1602_E=0;LCD

4、1602_RS=0;LCD1602_RW=0;LCD1602_DATAPINS=com;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Delay1us(10);LCD1602_E=1;Delay1us(10);LCD1602_E=0;Delay1us(10);LCD1602_DATAPINS=com4;Delay1us(10);LCD1602_E=1;Delay1us(10);LCD1602_E=0;#endif/* 函数名 : LcdWriteData* 函数功能 : 向LCD写入一个字节的数据* 输入 : dat* 输出 : 无*/ #ifndef LCD1602_4PINS

5、void LcdWriteData(uchar dat)/写入数据LCD1602_E=0;LCD1602_RS=1;LCD1602_RW=0;LCD1602_DATAPINS=dat;Delay1us(10);LCD1602_E=1;Delay1us(10);LCD1602_E=0;#elsevoid LcdWriteData(uchar dat)/写入数据LCD1602_E=0;LCD1602_RS=1;LCD1602_RW=0;LCD1602_DATAPINS=dat;/由于4位的接线是接到P0口的高四位,所以传送高四位不用改Delay1us(10);LCD1602_E=1;Delay1u

6、s(10);LCD1602_E=0;LCD1602_DATAPINS=dat4;Delay1us(10);LCD1602_E=1;Delay1us(10);LCD1602_E=0;#endif/* 函数名 : LcdInit()* 函数功能 : 初始化LCD屏* 输入 : 无* 输出 : 无*/ #ifndefLCD1602_4PINSvoid LcdInit() /LCD初始化子程序 LcdWriteCom(0x38); /开显示LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x06); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWr

7、iteCom(0x80); /设置数据指针起点#elsevoid LcdInit() /LCD初始化子程序LcdWriteCom(0x32); /将8位总线转为4位总线LcdWriteCom(0x28); /在四位线下的初始化LcdWriteCom(0x0c); /开显示不显示光标LcdWriteCom(0x06); /写一个指针加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /设置数据指针起点#endif(2).A/D转换部分pcf8591 a8591的头文件#ifndef _I2C_H_#define _I2C_H_#includesbit SCL=P

8、21;sbit SDA=P20;void Delay10us(); /延时void I2cStart();void I2cStop();unsigned char I2cSendByte(unsigned char dat);unsigned char I2cReadByte();#endif b8591的c程序文件#includei2c.h/* 函数名 : Delay1us()* 函数功能 : 延时* 输入 : 无* 输出 : 无*/void Delay10us()unsigned char a,b;for(b=1;b0;b-)for(a=2;a0;a-);/* 函数名 : I2cStart

9、()* 函数功能 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿* 输入 : 无* 输出 : 无* 备注 : 起始之后SDA和SCL都为0*/void I2cStart()SDA=1;Delay10us();SCL=1;Delay10us();/建立时间是SDA保持时间4.7usSDA=0;Delay10us();/保持时间是4usSCL=0;Delay10us();/* 函数名 : I2cStop()* 函数功能 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿* 输入 : 无* 输出 : 无* 备注 : 结束之后保持SDA和SCL都为1;表示总线空闲*/

10、void I2cStop()SDA=0;Delay10us();SCL=1;Delay10us();/建立时间大于4.7usSDA=1;Delay10us();/* 函数名 : I2cSendByte(unsigned char num)* 函数功能 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定* 输入 : num* 输出 : 0或1。发送成功返回1,发送失败返回0* 备注 : 发送完一个字节SCL=0*/unsigned char I2cSendByte(unsigned char dat)unsigned char a=0,b=0;/最大255,一个机

11、器周期为1us,最大延时255us。for(a=0;a7; /起始信号之后SCL=0,所以可以直接改变SDA信号dat=dat4.7usSCL=0;Delay10us();/时间大于4usSDA=1;Delay10us();SCL=1;while(SDA)/等待应答,也就是等待从设备把SDA拉低b+;if(b200) /如果超过200us没有应答发送失败,或者为非应答,表示接收结束SCL=0;Delay10us();return 0;SCL=0;Delay10us(); return 1;/* 函数名 : I2cReadByte()* 函数功能 : 使用I2c读取一个字节* 输入 : 无* 输

12、出 : dat* 备注 : 接收完一个字节SCL=0*/unsigned char I2cReadByte()unsigned char a=0,dat=0;SDA=1;/起始和发送一个字节之后SCL都是0Delay10us();for(a=0;a8;a+)/接收8个字节SCL=1;Delay10us();dat=1;dat|=SDA;Delay10us();SCL=0;Delay10us();return dat;(3).main函数文件#include#include#includei2c.h#includelcd.h#define WRITEADDR 0x90 /I2c的读地址#defi

13、ne READADDR 0x91 /I2C的写地址#define uchar unsigned charsbit ok=P10; /OK按键sbit up=P11; /数字上调按键sbit down=P12;/数字下调按键sbit red=P36; /红灯,表示加热sbit green=P37;/绿灯,表示制冷sbit tiao=P13;/调温按键char stemp;/存放设定的温度值char temp;/存放当前的温度值uchar temp0;/存放从AD转换器获得的8为无符号数void Pcf8591SendByte(unsigned char channel);unsigned cha

14、r Pcf8591ReadByte();void Pcf8591DaConversion(unsigned char value); unsigned char gettemp();void displaywendu(char temp);void tiaowen() ;void main()uchar b=T is ,i,c=SettedT is ;LcdInit();red=0;green=0;stemp=5;while(1)temp0=gettemp()/4;temp= (char)(temp0)-14;LcdWriteCom(0x80); /在1602上显示当前温度for(i=0;i5

15、;i+)LcdWriteData(bi); displaywendu(temp);LcdWriteCom(0x80+0x0b);/清除1602上表示加热和制冷的H和C标号,产生闪烁的效果LcdWriteData( );LcdWriteCom(0x80+0x40);/显示设置的温度for(i=0;i=stemp) if(temp-stemp)2) green=1; LcdWriteCom(0x80+0x0b);LcdWriteData(C); if(temp2) red=1; LcdWriteCom(0x80+0x0b);LcdWriteData(H); if(tiao=0) /检测调温按钮有没

16、有按下while(!tiao); tiaowen(); /* 函数名 : Pcf8591SendByte* 函数功能 : 写入一个控制命令* 输入 : channel(转换通道)* 输出 : 无*/void Pcf8591SendByte(unsigned char channel)I2cStart();I2cSendByte(WRITEADDR);/发送uchar写器件地址I2cSendByte(0x40|channel);/发送控制寄存器I2cStop();/* 函数名 : Pcf8591ReadByte* 函数功能: 读取一个转换值* 输入 : 无* 输出 : dat*/unsigned

17、 char Pcf8591ReadByte()unsigned char dat;I2cStart();I2cSendByte(READADDR);/发送读器件地址dat=I2cReadByte();/读取数据I2cStop(); /结束总线 return dat; /* 函数名 : gettemp* 函数功能 :从pcf8591中读取温度* 输入 : * 输出 : uchar()*/ unsigned char gettemp() unsigned char temp;Pcf8591SendByte(0); /电位器/temp=Pcf8591ReadByte()*2;/将前一次转换结果读走D

18、elay1us(0);/延时等待转换完成temp=Pcf8591ReadByte();/读取这一次转换结果return temp; /* 函数名 : displaywendu* 函数功能 :显示温度* 输入 : * 输出 : */void displaywendu(char temp)if(temp0) LcdWriteData(0x2d);temp=temp;temp=temp+1; else LcdWriteData(0x2b); LcdWriteData(0x30+temp/10%10);LcdWriteData(0x30+temp%10); LcdWriteData(0xdf);Lcd

19、WriteData(C); /* 函数名 :tiaowen() * 函数功能 :调温和显示调温的情况* 输入 : * 输出 : */void tiaowen() uchar a=Shift T is ,i; Delay1us(1); while(ok) if(up=0)while(!up);stemp+;if(down=0)while(!down);stemp-;LcdWriteCom(0x80+0x4d); LcdWriteData( );LcdWriteCom(0x80+0x40);for(i=0;i11;i+)LcdWriteData(ai);displaywendu(stemp); 四基本硬件电路的介绍(1).LCD1602a. 读时序图 b写时序图c.1602的内部RAM地址映射d.1602的控制指令(2).pcf8591的简单介绍a. pcf8591的数据传送时序 b. 起停时序 c. pcf8591的传输协议d. pcf8591的控制字

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1