包含Keil源程序与Protues仿真电路图。
https://static.assets-stash.eet-china.com/album/old-resources/2009/10/30/8e2d0663-42e9-4894-99a0-4197a12fe844.rar
main函数如下:
/*****************用定时器+DS18B20写得温度程序(上半屏显示)********************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include"CODE.h"
#include"DS18B20.H"
sbit R1=P2^4; //位定义
sbit R2=P2^5;
sbit CLK="P2"^6;
sbit STB="P2"^7;
uchar j,time,wendu_shi,wendu_ge; //数据变量定义
char dat;
void WriteByte(); //上半屏写一个字节数据函数
void init_timer0(); //中断初始化
/*-------------------------------------------*/
void main()
{
init_timer0(); //中断初始化
while(1)
{
if(time>=50) //每2.5秒刷新一次温度数据
{
time=0;
tempchange(); //温度转换命令
wendu_shi=get_temp()/100;
wendu_ge=get_temp()%100/10;
}
for(j=0;j<16;j++) //行扫描
{
dat=wendu[j][0]; //温
WriteByte();
dat=wendu[j][1];
WriteByte();
dat=wendu[j+16][0]; //度
WriteByte();
dat=wendu[j+16][1];
WriteByte();
dat=table[wendu_shi][j]; //温度十位
WriteByte();
dat=table[wendu_ge][j]; //温度个位
WriteByte();
dat=wendu[j+32][0]; //℃
WriteByte();
dat=wendu[j+32][1];
WriteByte();
P1=j; //放上面会错乱 消影
STB=1; //下降沿,上升沿显示错乱
STB=0;
delay(2);
}
}
}
void init_timer0() //中断初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
time++;
}
void WriteByte() //上半屏写一个字节的数据
{
uchar k;
for(k=0;k<8;k++) //循环8次把编码传给锁存器
{
dat="dat"<<1;
R1=CY;
R2=1;
CLK="0"; //上升沿有效
CLK="1";
}
}
用户347785 2011-4-15 10:00
用户191275 2010-6-21 09:46