内容发布更新时间 : 2025/1/5 10:53:30星期一 下面是文章的全部内容请认真阅读。
//按下K1显示序列码,按下K2显示实时温度(本实验适合初学者调试理解18B20用, ) #include
#define uint unsigned int //uint 无符号整数
sbit DQ=P2^2; //单总线(与自己的开发板相匹配) uint temp; //温度 uchar flag1; //符号
sbit rs = P1^0; // 控制LCD (与自己的开发板相匹配) sbit rw = P1^1; // 控制LCD (与自己的开发板相匹配) sbit lcden = P2^5; //led使能端 (与自己的开发板相匹配) sbit K1=P3^4; //独立按键k1(与自己的开发板相匹配)
sbit K2=P3^5; //独立按键k2 (与自己的开发板相匹配) sbit du=P2^6; //位选(防LED灯乱闪)(与自己的开发板相匹配) sbit we=P2^7; //段选(防LED灯乱闪) (与自己的开发板相匹配)
uchar a,b,c,d,e,f,g,h,A1,A2,A2t,A3,A4,A5;//写在LCD上的字符,具体在程序中看 void delay(uint count) //延迟程序 (200*count)/8 毫秒 {
uint i;
while(count) {
i=200; while(i>0) i--; count--; } }
void DQreset(void) //初始化,主机将DQ拉高 (上升沿) (从机检测到上升沿后延时15到60毫秒,从机拉低总线60到240毫秒表示“我”在线) { //从机的工作是自动完成的 uint i; DQ=0; i=103; while(i>0)i--; DQ=1; i=4; while(i>0)i--; }
bit tmpreadbit() //从18b20读1位 {
uint i; bit dat; DQ=0;i++; DQ=1;i++;i++; dat=DQ;
i=8;while(i>0)i--;
return (dat); //返回dat }
uchar tmpread() //从18b20读1字节 {
uchar i,j,dat; dat=0;
for(i=1;i<=8;i++) {
j=tmpreadbit();
dat=(j<<7)|(dat>>1); }
return(dat); }
void tmpwritebyte(uchar dat) //18b20写1bit (只能用于写命令) {
uint i; uchar j; bit testb;
for(j=1;j<=8;j++) //一位一位地传 {
testb=dat&0x01; dat=dat>>1; if(testb) {
DQ=0; i++;i++; DQ=1;
i=8;while(i>0)i--; } else {
DQ=0; i=8;while(i>0)i--; DQ=1; i++;i++; } } }
void tmpchange(void) //温度转换子程序 {
DQreset(); delay(1);
tmpwritebyte(0xcc); //CCH跳过ROM tmpwritebyte(0x44); //44H温度转换 }
uint tmp() //读取温度子程序 {