单片机温度检测proteus仿真.docxVIP

  • 38
  • 0
  • 约6.37千字
  • 约 7页
  • 2017-02-21 发布于重庆
  • 举报
单片机温度检测proteus仿真

Proteus仿真图程序部分/***********************lcd1602.c文件程序源代码*************************/#include reg51.h#define LCD1602_DB P0sbit LCD1602_RS = P1^0;sbit LCD1602_RW = P1^1;sbit LCD1602_E = P1^5;void LcdWaitReady() //等待液晶准备好{unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1;do { LCD1602_E = 1;sta = LCD1602_DB; //读取状态字 LCD1602_E = 0; } while (sta 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}void LcdWriteCmd(unsigned char cmd) //写入命令函数{LcdWaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0;}void LcdWriteDat(unsigned char dat) //写入数据函数{LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_E = 1; LCD1602_E = 0;}void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str) //显示字符串,屏幕起始坐标(x,y),字符串指针str{unsigned char addr; //由输入的显示坐标计算显示RAM的地址if (y == 0)addr = 0x00 + x; //第一行字符地址从0x00起始elseaddr = 0x40 + x; //第二行字符地址从0x40起始 //由起始显示RAM地址连续写入字符串LcdWriteCmd(addr | 0x80); //写入起始地址while (*str != \0) //连续写入字符串数据,直到检测到结束符 {LcdWriteDat(*str);str++; }}void LcdInit() //液晶初始化函数{LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口LcdWriteCmd(0x0C); //显示器开,光标关闭LcdWriteCmd(0x06); //文字不动,地址自动+1LcdWriteCmd(0x01); //清屏}/***********************DS18B20.c文件程序源代码*************************/#include reg51.h#include intrins.hsbit IO_18B20 = P3^2; //DS18B20通信引脚void DelayX10us(unsigned char t) //软件延时函数,延时时间(t*10)us{do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } while (--t);}bit Get18B20Ack(void) //复位总线,获取存在脉冲,以启动一次读写操作{bitack; EA = 0; //禁止总中断 IO_18B20 = 0; //产生500us复位脉冲DelayX10us(50); IO_18B20 = 1; DelayX10us(6); //延时60usack = IO_18B20; //读取存在脉冲while(!IO_18B20); //等待存在脉冲结束 EA = 1; //重新使能总中断returnack;}void Write18B20(unsigned char dat) //向DS18B20写入一个字节数据{unsigned char mask; EA = 0; //禁止总中断for (mask=0x01; mask!=0; mask=1) /

文档评论(0)

1亿VIP精品文档

相关文档