51单片机数字钟温度计的编程实例

#include reg51.h
char disp[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
sbit dq = p1^3; //定义通信端口
//晶振12mhz
void delay_18b20(unsigned int i)
{
while(i--);
}
//初始化函数
init_ds18b20(void)
{
unsigned char x=0;
dq = 1; //dq复位
delay_18b20(8); //稍做延时
dq = 0; //单片机将dq拉低
delay_18b20(80); //精确延时 大于 480us
dq = 1; //拉高总线
delay_18b20(14);
x=dq; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay_18b20(20);
}
//读一个字节
readonechar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
dq = 0; // 给脉冲信号
dat>>=1;
dq = 1; // 给脉冲信号
if(dq)
dat|=0x80;
delay_18b20(4);
}
return(dat);
}
//写一个字节
writeonechar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
dq = 0;
dq = dat&0x01;
delay_18b20(5);
dq = 1;
dat>>=1;
}
}
//读取温度
readtemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
init_ds18b20();
writeonechar(0xcc); // 跳过读序号列号的操作
writeonechar(0x44); // 启动温度转换
delay_18b20(100);
init_ds18b20();
writeonechar(0xcc); //跳过读序号列号的操作
writeonechar(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=readonechar();
b=readonechar();
//传感器返回值除16得实际温度值
//为了得到2位小数位,先乘100,再除16,考虑整型数据长度,
//技巧处理后先乘25,再除4,除4用右移实现
t = (b*256+a)*25;
return( t >> 2 );
}
main()
{
unsigned int tmp;
unsigned char counter;
while(1)
{
//温度测量频率没有必要太高,太高反而影响数码显示
//所以用计数器加以控制
if(counter-- == 0)
{
tmp = readtemperature();
counter = 20;
}
p2 = 0xff;
p0 = disp[tmp%10];
p2 = 0xfb;
delay_18b20(1000);
p2 = 0xff;
p0 = disp[tmp/10%10];
p2 = 0xf7;
delay_18b20(1000);
p2 = 0xff;
p0 = disp_dot[tmp/100%10];
p2 = 0xef;
delay_18b20(1000);
p2 = 0xff;
p0 = disp[tmp/1000%10];
p2 = 0xdf;
delay_18b20(1000);
}
}

中国崛起?AI芯片新蓝海将至
数造辉煌!西部数据上海工厂成为中国首家荣获“可持续发展灯塔工厂”称号企业
三星Galaxy X计划推出折叠屏,弯度细数1.0R需要2019年就绪
大数据与品牌价值之间是什么关系
Java程序员把机器学习作为主攻方向,未来会有更多的发展机会
51单片机数字钟温度计的编程实例
汽车芯片最厉害的公司
外国用华为设备安全吗 华为:零件70%来自全球
KDD最佳论文:中国拿下Research Track最佳学生论文
最新无人驾驶技术排行榜:百度完爆苹果和特斯拉
录音电话的录音时间
数字经济的重要技术驱动力人工智能技术发展
调查表明:2017年手机电池续航超75小时
万物互联:研发、工程、市场、孵化的一体化功能平台问世
联想凌拓推ThinkSystem DM5100F全闪存阵列,为企业打造数据引擎
SMART常用的运动控制子程序的应用详解
如何构建差动放大器并对其性能进行优化?
变压器绕组的直流电阻测量方法
Allegro SPB15.2进行多人协作布局布线的方法
电容的Q值与D值