大连交通大学2013届本科生毕业设计(论文)
LCD_E=1;//允许 delay_n40us(1); LCD_E=0; delay_n40us(1);
}
//******************************* //********写数据函数************* void LCD_write_data(uchar dat) { LCD_DB=dat; LCD_RS=1;//数据 LCD_RW=0;//写入 LCD_E=1;//允许 delay_n40us(1); LCD_E=0;
delay_n40us(1);
}
//******************************** //*******显示一个字符函数********* void LCD_disp_char(uchar x, uchar y,uchar dat) { uchar address; if(y==1) address=0x80+x; else
address=0xc0+x; LCD_write_command(address); LCD_write_data(dat);
}
//******************************** //********延时函数*************** void delay_n40us(uint n) {
uint i;
30
大连交通大学2013届本科生毕业设计(论文)
}
uchar j; for(i=n;i>0;i--)
for(j=0;j<2;j++);
void Delay_10us(void) { U8 i; i--; i--; i--; i--; i--; i--; }
void Delay(U16 j) { }
//*******一字节数据传送函数********* void COM(void) {
U8 i;
for(i=0;i<8;i++)
U8 i;
for(i=0;i<27;i++);
for(;j>0;j--)
{
U8FLAG=2;
while((!P2_0)&&U8FLAG++);
Delay_10us(); Delay_10us(); U8temp=0; Delay_10us();
if(P2_0)U8temp=1;
U8FLAG=2;
31
大连交通大学2013届本科生毕业设计(论文)
}
while((P2_0)&&U8FLAG++);
//超时则跳出for循环 if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; }
*******单片机与传感器通信函数********* void RH(void) {
//主机拉低18ms Delay(180); P2_0=1;
//总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();
//主机设为输入 判断从机响应信号 P2_0=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P2_0) {
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束 while((!P2_0)&&U8FLAG++); U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((P2_0)&&U8FLAG++); //数据接收状态 COM();
32
P2_0=0;
//T !
大连交通大学2013届本科生毕业设计(论文)
U8RH_data_H_temp=U8comdata; COM();
U8RH_data_L_temp=U8comdata; COM();
U8T_data_H_temp=U8comdata; COM();
U8T_data_L_temp=U8comdata; COM();
U8checkdata_temp=U8comdata; P2_0=1;
//数据校验 _L_temp);
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data
if(U8temp==U8checkdata_temp) {
U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; }
//湿度整数部分
s1[0] = (char)(0X30+U8RH_data_H/10); s1[1] = (char)(0X30+U8RH_data_H); //湿度小数部分
s1[2] = (char)(0X30+U8RH_data_L/10); //温度整数部分
s2[0] = (char)(0X30+U8T_data_H/10); s2[1] = (char)(0X30+U8T_data_H); //温度小数部分 s2[2] = (char)(0X30+U8T_data_L/10); } }
//*******************************
33
大连交通大学2013届本科生毕业设计(论文)
//液晶显示函数 void disp() { LCD_disp_char(0,1,'s'); LCD_disp_char(1,1,'h'); LCD_disp_char(2,1,'i'); LCD_disp_char(3,1,'d'); LCD_disp_char(4,1,'u'); LCD_disp_char(5,1,':'); LCD_disp_char(6,1,s1[0]); LCD_disp_char(7,1,s1[1]); LCD_disp_char(8,1,'.');
LCD_disp_char(9,1,s1[2]);
LCD_disp_char(10,1,'%'); LCD_disp_char(11,1,'R'); LCD_disp_char(12,1,'H'); LCD_disp_char(0,2,'w'); LCD_disp_char(1,2,'e'); LCD_disp_char(2,2,'n'); LCD_disp_char(3,2,'d'); LCD_disp_char(4,2,'u'); LCD_disp_char(5,2,':'); LCD_disp_char(6,2,s2[0]); LCD_disp_char(7,2,s2[1]); LCD_disp_char(8,2,'.'); LCD_disp_char(9,2,s2[2]);
LCD_disp_char(10,2,0xDF);
LCD_disp_char(11,2,'C');
}
//阈值设置函数 void shezhi() {
//初值
s1[3] = (char)(0X30+count1/10);
34